From 5c2ada60a2cd943939d27f97c2f0365fc32bab9b Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 18 Sep 2026 09:33:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3:=20**"=E5=AD=A9=E5=AD=90?= =?UTF-8?q?=E7=AE=A1=E4=B8=8D=E7=9D=80=E7=9A=84=E4=B8=9C=E8=A5=BF"?= =?UTF-8?q?=E5=9C=A8=E5=9B=A0=E6=9E=9C=E5=88=A4=E6=8D=AE=E9=87=8C=E4=B8=8D?= =?UTF-8?q?=E5=AD=98=E5=9C=A8**=20=E2=80=94=E2=80=94=20=E6=AF=94"=E8=BE=B9?= =?UTF-8?q?=E9=99=85=E9=80=92=E5=87=8F"=E6=9B=B4=E7=A1=AC=E7=9A=84?= =?UTF-8?q?=E5=81=9C=E6=AD=A2=E7=90=86=E7=94=B1=EF=BC=88=C2=A76.1.6?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pi 复核层 10 时提出:层 10 的修法(要求 `RED ` 行)**推翻了层 7 的原则** ("锚点不能落在被守对象的自述上")—— 把锚点从"行为"搬回了"自述"。 **这条我核对成立**:`:2674` 的原则与 `:2774` 的修法同住一个文件、且方向相反。 ⇒ 停止理由从"成本 > 收益"升级为**"层 11 的修法必须推翻层 7 或层 10,两者互斥"**。 ## ★ 但我把 pi 的建议修法①也测了 —— 得到比"原则互斥"更强的结论 **pi 的 ① 不是逃逸口。** 它主张"改坏**孩子读的外部依赖**(而非孩子自己的源码) ⇒ 通道没有可检的信号"。实测(`exitcode-selftest` + 假体 + 通道): ``` 通道只盯外部 summary.py ⇒ 干净树 rc=0 ✓,改坏外部 ⇒ rc=1 ⇒ ① 有效 通道**同时**盯外部 summary.py + 自己源码 ⇒ 干净树 rc=0 ✓,改坏外部 ⇒ rc=1 ⇒ **① 被绕过**(同刻对照:red 与基线一致、diff 0 行) ``` ★★ 根因(**这是这一整串真正的底**): > 因果判据的要求是:**改坏 X ⇒ 孩子的判词必须变**。 > ⇒ 这要求 X **因果上游**于孩子的判词 ⇒ **孩子必须读 X**。 > ⇒ 孩子读得到 X ⇒ **孩子能观察 X 被改坏**(同 uid、可读,`summary.py` 是 `-rw-r--r--`)。 > ⇒ **"孩子管不着的东西"被因果判据自身的定义排除掉了。** ⇒ 层 7 那句"锚点必须落在**它管不着**的东西上"在这个接口里**没有可满足的解**: · 要"因果有效",X 就必须被孩子读到; · 要"孩子管不着",X 就不能被孩子读到; · **二者不可同时成立** ⇒ 不是"还没爬到",是**接口本身没有解**。 ★ 唯一出路是**换接口**(父进程自己算、或进程外观测)—— 那不是"再修一条判据"。 实测本仓**进程外观测通道 grep 0 处**(`strace`/`inotify`/`atime` 差分全无), 且孩子的输出只有 stdout + 退出码,**两者都由孩子自己产生**。 ⇒ ★ 与 pi 的"原则互斥"是同一结论的**两个证明**:pi 证明**两条原则不能共存**; 我证明**这个接口里不存在既"因果有效"又"孩子管不着"的对象**。 **两者都指向"停",而后者不依赖"哪条原则优先"的判断。** ## ⚠️ 顺带记一条我自己的量错(与 pi §四 同族) 我用 `python3 heredoc` 拼通道时,**引号嵌套写出了 SyntaxError** ⇒ 通道**在干净树上就崩**、`rc=1`。 我差点把它读成"通道生效"。**是 stderr 里的 `SyntaxError` 救了我。** ⇒ **"量到 ≠ 量对了"**:任何构造出的攻击,**第一句读数必须是"它在干净树上无症状吗", 且必须看 stderr,而不是只看 rc。** ## 验证 · 干净 git worktree(HEAD=7ca6ae1,仅覆盖本文件):`^RED` **0 条**、 因果红 0、对照红 0、不可归因红 0。 · ⚠️ 工作区当前 `red` 偏高是**并发会话的漂移**(`harmony-window.test.mjs` 未接线 ⇒ 清单自检整体停;`harmony-system-api`/`harmony-nav`/`harmony-widescreen` 设备竞争红), **与本次改动无关**;我那两个文件 `git diff` 为空以外的部分一行未动。 · 本提交**只改文档**:`client/electron/test/CRITERIA.md`(新增 §6.1.6)。 --- client/electron/test/CRITERIA.md | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/client/electron/test/CRITERIA.md b/client/electron/test/CRITERIA.md index 66a6a79..92e8455 100644 --- a/client/electron/test/CRITERIA.md +++ b/client/electron/test/CRITERIA.md @@ -406,6 +406,49 @@ pi 报的层 10:上一版那条"对照"(未改坏必须 rc=0)能被一个* 到期那 6 条判据(`harmony-appearance`、`harmony-logic`、`cross-client-theme`、 `appearance-defaults`、`harmony-admin`、`harmony-imageprep`)的升级。 +### 6.1.6 ★★ **"孩子管不着的东西"在因果判据里不存在**(dsh 2026-09-18,比"边际递减"更硬的停止理由) + +pi 在复核层 10 时提出:层 10 的修法(要求 `RED ` 行)**推翻了层 7 的原则** +("锚点不能落在被守对象的自述上")—— 把锚点从"行为"搬回了"自述"。 +**这条我核对成立**(`:2674` 的原则与 `:2774` 的修法同住一个文件)。停止理由因此从 +"成本 > 收益"升级为**"层 11 的修法必须推翻层 7 或层 10,两者互斥"**。 + +★ 但我把 pi 的**建议修法①也测了**,得到一个**比原则互斥更强**的结论: + +**pi 的 ① 不是逃逸口。** 它主张"改坏**孩子读的外部依赖**(而非孩子自己的源码) +⇒ 通道没有可检的信号"。实测(`exitcode-selftest` + 假体 + 通道): + +``` +通道只盯外部 summary.py ⇒ 干净树 rc=0 ✓,改坏外部 ⇒ rc=1 ⇒ ① 有效 +通道**同时**盯外部 summary.py + 自己源码 ⇒ 干净树 rc=0 ✓,改坏外部 ⇒ rc=1 + ⇒ **① 被绕过**(同刻对照:red 与基线一致、diff 0 行) +``` + +★★ 根因(这是这一整串的**真正的底**): + +> 因果判据的要求是:**改坏 X ⇒ 孩子的判词必须变**。 +> ⇒ 这要求 X **因果上游**于孩子的判词 ⇒ **孩子必须读 X**。 +> ⇒ 孩子读得到 X ⇒ **孩子能观察 X 被改坏**(同 uid、可读,`summary.py` 是 `-rw-r--r--`)。 +> ⇒ **"孩子管不着的东西"被因果判据自身的定义排除掉了。** + +⇒ 所以层 7 那句"锚点必须落在**它管不着**的东西上"在这个接口里**没有可满足的解**: +· 要"因果有效",X 就必须被孩子读到; +· 要"孩子管不着",X 就不能被孩子读到; +· **二者不可同时成立** ⇒ 不是"还没爬到",是**接口本身没有解**。 +★ 唯一出路是**换接口**(父进程自己算、或进程外观测)—— 那不是"再修一条判据"。 + 实测本仓**进程外观测通道 grep 0 处**(`strace`/`inotify`/`atime` 差分全无), + 且孩子的输出只有 stdout + 退出码,**两者都由孩子自己产生**。 + +⇒ ★ 这与 pi 的"原则互斥"是同一结论的**两个证明**:pi 证明的是**两条原则不能共存**, + 我证明的是**这个接口里不存在满足"管不着"又要"因果有效"的对象**。 + **两者都指向"停",而后者不依赖"哪条原则优先"的判断。** + +⚠️ 顺带记一条**我自己的量错**(与 pi §四 同族,我这一串第 N 次): +我用 `python3 heredoc` 拼通道时,**引号嵌套写出了 SyntaxError** ⇒ 通道**在干净树上就崩**, +`rc=1`。我差点把它读成"通道生效"。**是 stderr 里的 `SyntaxError` 救了我** —— +⇒ **"量到 ≠ 量对了"**:任何构造出的攻击,**第一句读数必须是"它在干净树上无症状吗", +且必须看 stderr 而不是只看 rc。** + ★ 层级表(**每层都是一根轴**):写法(4) → 存在性(5,"它还在吗") → 行为(6,"它做了吗") → **自述(7,"它说的话可信吗")**。