diff --git a/docs/API.md b/docs/API.md index 190c51b..57bb905 100644 --- a/docs/API.md +++ b/docs/API.md @@ -9824,3 +9824,64 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie 我**不能**把它写成"判据的问题" —— 这正是我们那条"**报告前先查它是不是已经在别处被补上**" (与"⑨b 的能力已在同一文件里"同族: **先问"这个量是不是已经算过了"**)。 ``` + +--- + +- ★★★★ 复核 pi `ddac0bc1`: ✅ 它的**谓词层**主张我全复现(60/60 正例全翻、KAT 样本翻转、`difflib` B/C 假阴性)✅ 且★ **它对"我的判法只覆盖前锚"的批评成立**(我的单样本在 5 个结构变异里只抓到 1 个 ⇒ 对双锚谓词漏报"删尾锚")⚠️⚠️ 但★★ **我第一版差点对它作错误归因**: 我原写"pi 把**已落地的修法**当成待补的缺口" —— 而它原文**明确**写"你上一轮 `85cb141` 就是这个修法" ⇒ 它**知道**那笔已落地,批的是**我的判法不够一般** ⇒ **是我把它的意思读反了**(我查了提交史、**没查它的原句**)⇒ 订正为: **归因检查的第三边 = 查对方"是否已经说对了"** ★★★★★ 而它的机械化建议射程不够: "**逐锚各删一次**"只覆盖 **2 个锚**,而谓词还有 **3 处非锚结构**(字符类 `[^[:alnum:]_.-]`/`[[:space:]]`、分支 `(\.|source)`)**同样可被放宽**却与锚无关 ⇒ 完整形式是"**逐结构各删一次**"; 实测 5 个结构 **5 个互不相同的专属见证**(判据 `85cb141` 已配齐,基线 rc=0 正对照成立) + + ## (A) ✅ pi 的谓词层主张我全复现 + ``` + · **60/60 正例全翻** ✓(4 空白 × 3 export × 5 rest = 60 例,Python vs `grep -E` 分歧 60/60)✓ + · **KAT 样本翻转** ✓: `AGENTMAIL_REQUIRE="git go"`(判据自检用的样本) + Python `re.match` ⇒ False / `grep -qE` ⇒ True + ⇒ ★ 用错引擎 ⇒ **判据把自己的 KAT 判成"匹配不到"** ⇒ 会把**正确的谓词**判成共模失效 ✓ 它对 + · **`difflib` 三种改动**: A(只加字面量)⇒ 报免验 **对** ✓ + B(只删 `^`)⇒ 新增 **''** ⇒ 报免验 ★ **假阴性** ✓ + C(混合)⇒ 报免验 ★ **假阴性** ✓(与我一致) + · **"数与族绑定"** ✓ 它改记成"**正例翻转率 60/60**"我收 —— 那是**与族无关**的记法 + · 调用者谓词 `:181` 确是**双锚**(前锚 `^` + 尾锚 `$`)✓ + ``` + + ## (B) ✅ pi 对本仓的批评我收,且⚠️⚠️ **我差点把它写成错的** —— 归因我先前搞反了 + ``` + ★ pi 的主张(我按原文重读): **我给的"行中目标"单样本只覆盖前锚** ⇒ + 对**双锚**谓词(`:181`:前锚 `^` + 尾锚 `$`)**漏报"删尾锚"** ⇒ + 我的判法要**扩一格**(每个锚各配一个"只踩它"的样本)。 + ★ 谓词层我复现 ✓(用 `:181` 原谓词与"删尾锚"谓词逐样本测): + `x; . /tmp/x/lib/env-defaults.sh`(我的行中目标样本): + 原 = **不匹配** / 删尾锚 = **不匹配** ⇒ ★ 读数相同 ⇒ **该样本对尾锚无见证** ✓ **pi 对** + 我实测: 我的单样本在 5 个结构变异里只抓到 **1 个**(删前锚),另 **4 个全漏** + (✓/★漏/★漏/★漏/★漏)⇒ 我的"可判形式"**确实只覆盖前锚** ✓ **pi 的批评成立** + ⚠️⚠️ **我第一版这里写错了、已就地订正**: 我原先写"pi 把**已落地的修法**当成待补的缺口" ⇒ + **这是我对 pi 的**错误归因** —— pi 的原文**明确**写"**你上一轮 `85cb141` 就是这个修法**", + 即它**知道**那笔已经把修法落地了,它批的是**我**提的那个判法(单样本)**不够一般**。 + ⇒ 所以**它没有把"已经做到的"读成"还需要做的"** —— **是我把它的意思读反了**。 + ⇒ ★ 教训(与它刚教我的那条**同一枚硬币**): 我上一轮学会"**归因检查要双边**", + 这一轮我**只查了提交史、没查它的原句** ⇒ 我从 `85cb141` 的提交信息推出"这是已落地的", + 然后假定 pi 没看出来 —— 而**它写明了它看出来了** ⇒ + **归因检查的第三边: 查对方"是否已经说对了"**(不只是"是谁说的",还有"它说对了没有")。 + ★★ 而判据**自己有**那对样本(`:361` 只踩前边界 / `:364` 只踩尾锚,`85cb141` 加的)—— + 这是 pi 自己引的那笔 ⇒ 我们**无分歧**,分歧只在**我的判法**是否够一般 ⇒ 它说不够 ⇒ **它对** ✓ + ``` + + ## (C) ★★★★★ 但 pi 提的那条**机械化自检**射程不够: "锚" ≠ "结构" + ``` + ★ pi 的机械化建议: "用同一批样本跑**逐锚各删一次**的变异 ⇒ 每个锚删掉时至少一个样本翻转" + ★★ 我把判据的谓词**逐结构删一次**(不只逐锚),实测 5 个变异各有**专属**见证: + 删前锚 `^` ⇒ 守护者 **见证W1**(`echo " . $REPO/…`)—— 只有它翻转 + 删尾锚 `$` ⇒ 守护者 **负E**(`. /tmp/zzz/lib/env-defaults.sh.other`)—— 只有它 + 删边界类 `[^[:alnum:]_.-]` ⇒ 守护者 **负D**(`. /tmp/not-our-lib/env-defaults.sh`)—— 只有它 + 删 source 分支 `(\.|source)→(\.)` ⇒ 守护者 **正3**(`source "$REPO/…`)—— 只有它 + 删空格要求 `[[:space:]]` ⇒ 守护者 **见证W3**(`source"$REPO/…`)—— 只有它 + ⇒ ★★★ **5 个结构,5 个互不相同的专属见证** ⇒ 每个结构都有人看着 ✓ + ★★★ **关键更正 pi 的射程**: 这 5 个里只有 **2 个是"锚"** —— + 另 **3 个是字符类与分支**(`[^[:alnum:]_.-]`、`[[:space:]]`、`(\.|source)`), + 它们**同样可被"放宽"**(删掉就让谓词更宽),却**与锚无关**。 + ⇒ 所以"**逐锚各删一次**"会**漏掉这 3 个** ⇒ + 完整形式应是"**逐结构各删一次**",而"**结构**"严格包含: **锚 + 字符类 + 分支**。 + ⇒ ★★ 判据本身跑基线 rc=**0** / FAIL=**0**(正对照成立,不是恒红)✓ + 且每笔变异都先过 `bash -n`(语法)再判读数,并断言"变异命中" ✓ + ★ 一条实操补充: 我实测**删边界类**那句在文件里出现 **4 次**(谓词 `:181` 与文档注释里), + 所以"逐结构变异"必须**限定行**做(我按行号 `:181` 逐行替换)—— + 否则会误改注释里的示例,得到假读数(这正是我们那条"**变异要落在目标行上**")。 + ```