diff --git a/client/electron/test/run-all.mjs b/client/electron/test/run-all.mjs index 32c0fcc..1c6aa62 100644 --- a/client/electron/test/run-all.mjs +++ b/client/electron/test/run-all.mjs @@ -789,12 +789,19 @@ if (process.argv.includes('--probe-selftest')) { * —— **一个字节都没读 `summary.py`**,它断言的其实是"除了我手列的这三个,其它码都必须红"。 * 即:**注释说"不写死",实现恰恰写死了一份码名单。** * - * 两个方向都实测失真(我按 pi 的构造各做了一次): + * 两个方向都实测过(我按 pi 的构造各做了一次),但**两件事的性质不同**: * · **假红**:加一个**上游退 0 的提示码**(与 `baseline-stale` 同类、完全合法) * ⇒ 报 `上游退非零,下游却不红 ⇒ 两侧口径漂移`。**那个码的上游根本不存在**, * `summary.py` 永远不会打出它 —— ⑤ 在这里**编造了一个上游事实**并据此判红。 + * ⇒ 这是"**判据答错了**":它会**误导人去找一个不存在的问题**。 * · **假绿**:加一个 `blocksGreen: true` 的新码 ⇒ **rc=0,一条 RED 都没有**。 - * 同一句"上游退非零"也是编的,⑤ 没验也验不了 ⇒ 漂移从这个方向完全看不见。 + * ⚠️ 但**这一条不能说成"它也编了 / 它答错了"** —— pi 2026-09-18 更正了它自己 + * 上一封的标注,我照实改:那个方向 ⑤ **一片沉默**(实测:输出里提到该码 **0 次**)。 + * ⇒ 准确说法是"**判据没答**",不是"判据答错了"。区别要紧: + * 编造会让人去找不存在的问题;**沉默会让人以为它答过了**。 + * ★ 我原先在这里写的是"同一句'上游退非零'也是编的" —— + * **那是把沉默说成了编造,我夸大了证据**(与 pi 犯的是同一个错,两人都错在这一条上)。 + * * * ⇒ 修法(照 pi 的建议):把 `(diag, rc)` 抽成**唯一权威**本表,然后 * ① `--exitcode-selftest` **真跑** `summary.py`,逐条断言 `rc === UPSTREAM_RC[diag]` @@ -1890,13 +1897,17 @@ if (process.argv.includes('--verdict-selftest')) { * **一个字节都没读 `summary.py`**。它其实在断言"**除了我手列的这三个,其它码都必须红**": * **注释说"不写死",实现恰恰写死了一份码名单。** * - * 实测两个方向: + * 实测两个方向,但**两件事的性质不同**: * · **假红**:加一个上游退 0 的**提示码**(与 `baseline-stale` 同类、完全合法) * ⇒ 报"上游退非零,下游却不红 ⇒ 两侧口径漂移"。 * 而那个码的上游**根本不存在**(`summary.py` 永远不会打出它)—— - * ⑤ 在这里**编造了一个上游事实**并据此判红。 + * ⑤ 在这里**编造了一个上游事实**并据此判红 ⇒ 这是"**判据答错了**"。 * · **假绿**:加一个 `blocksGreen: true` 的新码 ⇒ **rc=0,一条 RED 都没有**。 - * 同一句"上游退非零"也是编的 ⇒ 漂移从这个方向**完全看不见**。 + * ⚠️ 那是"**判据没答**",**不是**"判据答错了" —— 实测提到该码 **0 次**, + * 那个方向 ⑤ **一片沉默**(并没有编造任何东西)。 + * ★ 我原先写成"同一句'上游退非零'也是编的" ⇒ **把沉默说成了编造、夸大了证据** + * (pi 2026-09-18 更正了它自己同样的标注;这是**我们两人都犯在这条上**的错)。 + * 区别要紧:编造让人去找不存在的问题;**沉默让人以为它答过了**。 * * ⇒ 现在拿**唯一权威** `UPSTREAM_RC`(它的每个值都在 `--exitcode-selftest` 里被**真脚本** * 逐条验过,见那一段的反向覆盖检查),与 `DIAG.blocksGreen` **双向**比对: