docs(dev-tooling): 变异纪律补两条 —— 判据退出码不许经管道取值(tail 改写了量纲)+ 新判据上线先找相反的不变量

第 6 条是我自己刚踩的:`bash check-shared-libs.sh 2>&1 | tail -25; echo $?` 拿到的是
tail 的退出码,于是那条脚本的红(真值 1)被我报成 0 —— 只因为失败信息走 stderr 没进管道
才露出来。第 7 条是这轮最贵的一课:新的'不可达就搬走'与既有的'共用模块逐字节同源'
方向相反,我只看⻅了自己那条,差点让下次部署静默删掉 dsh 桥的生产模块。
This commit is contained in:
2026-09-14 20:14:47 +08:00
parent fbdfdcc81d
commit a1ed4ea1a5

View File

@ -163,6 +163,17 @@ bash deploy/prune-deploy-artifacts.sh --self-check # 判据自检(16 项,
5. **别只看过滤后的输出。** `grep '^not ok'` 会丢掉"整份文件没跑起来"这个信息
(语法错时只报一条 `not ok 1 - test/xxx.test.mjs`)。退出码 + `# pass`/`# fail`
汇总行才是可靠信号 —— 也**不要**为此引入手抄的"期望用例数"常量:手抄常量会过期。
6. **判据的退出码不许经管道取值。** 反例(2026-09-14,我自己踩的):
`bash deploy/check-shared-libs.sh 2>&1 | tail -25; echo "exit=$?"` ——
`$?` 拿到的是 **`tail` 的**退出码,于是那条脚本的红(真值 1)被我报成了 0;
两个失败信息之所以还看得见,只是因为它们走 stderr 没进管道。
**用 `$PIPESTATUS[0]`,或先落文件再读** —— 管道会改写量纲,与上一条同族。
7. **一条新判据上线时,先找它可能与哪些既有不变量冲突。** 2026-09-14:
新加的"本平台不可达 ⇒ 搬去 `test/lib/`"与既有的"共用模块四方**逐字节同源、
连相对路径一起钉**"(`deploy/check-shared-libs.sh`)**方向相反** ——
我只看⻅了自己那条,于是"按规则推断出的正确动作"把共用判据打红两处,
还差点让下次部署**静默删掉**一个 dsh 桥的生产模块(`lib/user-question.js`)。
⇒ 可达性只能当**报告**,不能当搬家判据;判据里读共用清单做豁免(不手抄)。
### 两条同族的实现纪律