From 4598095b1762f3dc6852d88e1e9864d554731e2b Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 25 Sep 2026 07:01:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(drift):=20=E8=A1=A5=E4=B8=8A=E8=B4=9F?= =?UTF-8?q?=E5=90=91=E6=B8=85=E5=8D=95**=E7=AC=AC=E2=91=A1=E9=A1=B9?= =?UTF-8?q?=E7=9A=84=E5=AE=88=E6=8A=A4=E6=A0=BC**=20=E2=80=94=E2=80=94=20p?= =?UTF-8?q?i=20=E2=91=AC=E2=80=B3=20=E6=8C=87=E5=87=BA=E7=9A=84=E7=9C=9F?= =?UTF-8?q?=E6=B4=9E=EF=BC=88=E5=AE=A3=E7=A7=B0=202=20=E9=A1=B9=EF=BC=8C?= =?UTF-8?q?=E5=8F=AA=E6=9C=89=201=20=E9=A1=B9=E6=9C=89=E4=BA=BA=E5=AE=88?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pi `7ec0044a` 用**同一条量法**(`|R\C|`)打了我自己刚落地的那条 ⑬′: ``` 我 b5989a9 的 ⑤b 负向清单宣称 2 项: ① 从脏树构建(含未提交代码) —— **有格**(:1610 modified=true ⇒ 绿 + note 点明) ② 部署后被手工替换/修改(只看内嵌 revision)—— **一格都没有** grep '手工替换' 全文件 ⇒ 只命中清单自身 ⇒ 所以 |R\C| 不是 1;② 是**只被"声明"、没被判据守**的那一项 ``` ★ 而这正是 ⑬′ 想防的形状的**镜像**: 我写了负向清单(防读者把绿读成"没问题"), 却**没有东西防我自己把清单写漂** —— 删掉一项、或以为它被覆盖了,都不会红。 ## ⑬″ 的判法(pi 给的,我采纳) ``` 每一项判一次: 「在 R 内 C 外」(真洞 ⇒ **加格**)还是「在 R 外」(⇒ **划出宣称**) 项②: ⑤b 宣称回答"这份二进制是不是当前代码" ⇒ **在 R 内** 而 C = {只读内嵌 revision},同 revision 换内容照样绿 ⇒ **C 外** ⇒ **真洞 ⇒ 加格**(不是划出宣称) ``` ## 落地 新增自检格 `★网关二进制:绿时 note 必须写明"①脏树构建②部署后手工替换"两项都不覆盖`, **不要求改 ok** —— 内容替换确实判不了,只能"说出来";它钉的是**那句话还在**。 ★ 变异验证(这格**能失败**,否则等于没加): ``` 从 note 里删掉负向项② ⇒ 该格 **失败** ⇒ "判据自检失败 1 项" ``` 自检 63 → **64 项**,0 失败。 ## 一并记账:§7 那条同类无守(pi 同封指出,本条**未改**) `redeploy-gateway.sh` §7 那句「已装二进制 = 当前 HEAD(…)—— 不覆盖: …」**全仓只命中它自己**, 而 `redeploy-gateway.sh` 没有 `--self-check` ⇒ **同一动作两处,一处有守一处无守**。 不在这条提交里改(要动部署脚本,且得先想清 §7 该怎么自检)—— 留给下一条,避免又造一次半截更新。 --- deploy/check-deploy-drift.mjs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/deploy/check-deploy-drift.mjs b/deploy/check-deploy-drift.mjs index f0e0efc..a2d475c 100644 --- a/deploy/check-deploy-drift.mjs +++ b/deploy/check-deploy-drift.mjs @@ -1601,6 +1601,20 @@ export function layoutSelfCheck() { ok: seventh(binRevOf({ rev: 'c'.repeat(40) }, 'c'.repeat(40)))?.ok === true && /不覆盖/.test(seventh(binRevOf({ rev: 'c'.repeat(40) }, 'c'.repeat(40)))?.note ?? '') }, + { + // ★★ ⑬″(pi `7ec0044a`):负向清单的**每一项**都必须有自检格守着 —— 否则那份 + // 声明自己会漂(有人删掉一项、或以为它被覆盖了,都**没有东西会红**)。 + // 实测指出时: 项①(脏树构建)有格,**项②(部署后手工替换)一格都没有**。 + // ⑬″ 的判法: 每项判「在 R 内 C 外」(真洞 ⇒ 加格)还是「在 R 外」(⇒ 划出宣称)。 + // 项② 在 R 内(⑤b 宣称回答"这份二进制是不是当前代码")而 C 外(只读内嵌 revision, + // 同 revision 换内容照样绿)⇒ **真洞 ⇒ 加格**(本格)。 + // 本格**不要求改 ok** —— 内容替换确实判不了,只能"说出来";它钉的是**那句话还在** + // (删掉 note 里这半句 ⇒ 本格红)。 + name: '★网关二进制:绿时 note 必须写明"①脏树构建②部署后手工替换"**两项都不覆盖**', + ok: ['①', '②'].every(m => (seventh(binRevOf({ rev: 'c'.repeat(40) }, 'c'.repeat(40)))?.note ?? '').includes(m)) + && /手工替换/.test(seventh(binRevOf({ rev: 'c'.repeat(40) }, 'c'.repeat(40)))?.note ?? '') + && /脏树/.test(seventh(binRevOf({ rev: 'c'.repeat(40) }, 'c'.repeat(40)))?.note ?? '') + }, { // ★ revision 相同 **但** modified=true ⇒ 仍是绿,**但 note 必须点明**"含未提交代码"。 // 这是本判据唯一的**假绿**形状(pi 2026-09-25 指出):树脏时 Go 照样写