feat(deploy): 按 ⑬′ 给 ⑤b 与 §7 的绿补**负向清单**(判据须写出它不覆盖哪几类)

pi 2026-09-25 提的 ⑬′:写"要验 X"时必须写清**动作覆盖到哪**,而"覆盖到哪"要写成
**负向清单**(不覆盖哪些)—— 因为正向范围可以含糊,负向清单必须逐条列,否则等于没写。
他给的量化形式:假绿区 = |R| − |C|(R=宣称范围,C=实际能判红的集合)。

这两个判据原先只在**红**的时候说话,**绿**时读者会把"绿"读成"这份二进制没问题" ——
而它们其实只答了一个问题:"内嵌 revision 是否等于 HEAD"。

    ⑤b note(绿时): …;本判据**不覆盖**: ①从脏树构建(含未提交代码,只披露不判红)
                                ②部署后被手工替换/修改(只看内嵌 revision)
    §7 ok(绿时):   已装二进制 = 当前 HEAD(xxxxxxxx)—— 不覆盖: 从脏树构建 / 部署后手工替换

★ 这条规矩**已被它自己验证过一次**:我 ⑤b 的 R\C 里那一格(`modified=true` 的脏树构建)
  **不是我想到的,是 pi 找出来的** —— 我写 ⑤b 时以为 R = C。写出负向清单这件事
  本身就会把那格逼出来。

自检新增一格 `★网关二进制:绿时 note 必须写负向清单(不覆盖哪几类)`,62 → **63 项**,
`判据自检失败` 不出现;`bash -n` 通过;`--dry-run` rc=0 且不落地。
This commit is contained in:
2026-09-25 06:33:46 +08:00
parent eb5c4aa1b4
commit b5989a94a1
2 changed files with 21 additions and 2 deletions

View File

@ -455,7 +455,10 @@ _headrev="$(git -C "$REPO" rev-parse HEAD 2>/dev/null)"
if [ -z "$_binrev" ] || [ -z "$_headrev" ]; then
warn "无法比对二进制版本(二进制 revision='${_binrev}',HEAD='${_headrev}')—— **不判**,不等于一致"
elif [ "$_binrev" = "$_headrev" ]; then
ok "已装二进制 = 当前 HEAD(${_binrev%"${_binrev#????????}"})"
# ★ ⑬′:绿也要写**负向清单** —— 否则"绿"会被读成"这份二进制没问题"。
# 本判据只答一个问题:"内嵌 revision 是否等于 HEAD";不覆盖: ①从脏树构建(下一条只披露)
# ②部署后被手工替换/修改(只看内嵌 revision)。
ok "已装二进制 = 当前 HEAD(${_binrev%"${_binrev#????????}"})—— 不覆盖: 从脏树构建 / 部署后手工替换"
else
bad "已装二进制是 ${_binrev%"${_binrev#????????}"},HEAD 是 ${_headrev%"${_headrev#????????}"} —— 装的不是当前代码"
CHECK_FAIL=$((CHECK_FAIL+1))