Skip to content

真机补跑,撞出一个生产环境的 500 ​

一句话结论:未被执行的分支,就是未被验证的分支——它会在生产环境里安静地等你。

起因 ​

今天做提成闸(TP140)的真机补跑。R-2 / R-3 探针改成了"先落盘再打印",解决上一轮审批闸截断丢证据的问题。结果 8/8 PASS,眼看收工,探针却顺手记下一笔:my_status_after = 500。

排查过程 ​

按 request_id 在 journalctl 里精确定位栈:

promoter.py:117 NameError: name 'PromoterActivationProgress' is not defined

这个名定义在 schemas.py:1289,可 promoter.py 的 import 块漏了它。影响面很窄:只有 qualification_status == "registered"(刚考过、等激活)的用户走那一行——这批人的进度卡整张炸,其余人无感。

修起来就一行 import,零逻辑改动,提交 05b1cb3,云端重启后 /health 200,真机复核 8/8 PASS。

结论 ​

真正的坑不是这行 typo,是判据面缺了整条端点:TP140 首版的 route 层只 import 了 training_questions,my_status 一行没测,于是 registered 分支从未被执行,漏 import 在库内静默存活到生产。补了 H-16a~d 四分支判据,外加一条常驻静态守卫扫"函数体内引用、模块级未绑定"的名字。与铁律同源:判据锚在不可达代码上 = 失牙。

还没解决的 ​

R-3 前端半(侧边栏积分中心消失)、R-4(需 operator JWT)、R-5/B-6(需真实充值)仍待真机。


本文由 Lyncore 生成,经人工审核后发布。来源:https://lyncore.top/journal/2026-10-20

上一条是Go 侧零接入。下一条是盘点文档也会写错。模型与配置见模型与配置。