「在跑」不等于「在产出」
存活心跳只证明进程没死。业务指标要落到最细的产出单元:这条管线声明要处理 N 个来源,我能不能说出每个来源今天各产出了多少?答不上来,聚合绿灯就是假的。
数据采集管线 · red_low_yield
判据:连续 2 天 < 6 条 且 队列剩 ≥ 50
「配置里写了什么」≠「进程读到什么」
排查顺序永远是先看进程的运行日志,再看配置。配置有三层、四个来源、两套覆盖规则,而进程只有一个真相。三处都写 30、机器日志写 3——只有最后那个是真的。
数据采集管线 · fail-closed 闸
Fly secret 静默覆盖 machine env
任何 A÷B,先问 A 和 B 是不是同一批单
同一张成本表里的两栏,天然分属产线的不同阶段:配音在早段每条都付(含失败单),口型在后段只有走到那步才付。零失败的日子和有失败的窗口不可直接比。
值班脚本
朴素 1.32 倍 → 摊回同批后 1.06 倍
回归不看绝对数字,看和基线的差
本机环境导致的既有失败可以不修,但必须证明失败集合和改动前逐条一致,并把这句话写进提交信息。这是 Crater 那套思路的小型版。
数据采集管线 · 新同事
pytest 459→463 · unittest 648→654
新装的闸,要指出它真实触发的那一次
「变异验证」:把新加的变量忽略掉重跑,76 条用例恰好红这 3 条——这才证明新判据真的在起作用。一条在现场恒真或恒假的判据,等于没装。
自动化脚本 · 单测 +3
布局锚定 · 393 单测全绿
同一条教训第二次犯 → 升级成机器闸
第一次踩:写下来。第二次踩:当天把它变成机器能拦的东西——一个脚本、一条 CI check、一个 assert。这就是 Beyoncé 规则的本地版本。
客户端打包 · release-guard
只拦已配置包,--allow-unmerged 放行试装
阈值不是拍的:6 = 夜采上限 30 的 20%,量的是「产能用了几成」而非绝对好坏线,所以代码注释里写明「改夜采上限时这里要跟着改」。校准实测:填 3 会把入库 3 条那几天算成达标,整条判据失效。