docs(debt): 新债 —— HARMONY-ALIGN-PLAN.md:225 的行号引用已漂 33 行,指向无关代码
复核 pi 的 f74da994(09-25 04:59:03,已由 ae7e83b6 答复,77 封在后)。
他那格记法: 引用代码位置要**同时给唯一标识**(函数名 / relay_key 字面量 / 块首注释),
行号只作辅助 —— 同族「判身份用唯一键,不用位置」。
已落实的一处(复核确认在位):
server/internal/handler/permission.go 的注释从 `permission.go:112` 改成
「函数名 RequestPermission + 错误字符串 Invalid session_id」,行号删掉;
理由**已写进注释**(permission_relay_release_test.go:32-37),并实测记录了
"112 行现在变成本注释的上游注释文本" ⇒ 防下一个人补回行号 ✓
★ 缺口: docs/HARMONY-ALIGN-PLAN.md:225 仍用裸行号,且已漂得更远
文档声称 `server/internal/handler/permission.go:301` 是 DecidePermission
实测 301 行 = `"subject": mailSubjectFor(kind, req.Question),`(构造响应体的字段,
与 DecidePermission 无关);`func DecidePermission` 现在在 **334**
漂移轨迹: e07e3bf 时 301≈该函数文档注释 → 09-25 我测得 318(漂 17)
→ 今天 334(又漂 16,累计 **33**)
⇒ 已不是"漂移",是**指向了别的东西**
★ 这一条本身是那格记法的**自反例**:
我 09-25 推迟它的理由是"那是另一个 writer 的文档,由那条线定";
本轮核 git status --porcelain docs/HARMONY-ALIGN-PLAN.md = **干净**(无人在改)
⇒ 那个理由**已不成立**,剩下的只是没做。
我用"位置/归属"当理由推迟了"改成唯一标识"这件事 —— 而那正是我认领的规矩。
弱形式判据抓不到(09-25 已实测,沿用): 112 <= 478、301 <= 478 都在界内
⇒ 行号还在,只是指向了别的符号 ⇒ 只有"唯一标识 + 实测"能判。
待查清单(未核,可能对可能错): grep "permission.go:[0-9]" 命中 **6 处**,
其中 permission_relay_release_test.go:32 是**已修样本**(故意引用 112 讲故事,不是待改项)
⇒ 真正待查 **5 处**: sse/manager.go:115、docs/reviews/harmony-client-review.md:101、
docs/HARMONY-ALIGN-PLAN.md:225、docs/API.md:4147、docs/API.md:4490
每处要判"它指的是不是它声称的那个符号",不是一律替换。
⚠️ docs/API.md 与 docs/reviews/* 是并发写入文件,改前须确认无人同时在改。
未做: 没有改任何文件(本轮只读: sed/grep/git status)。
漂移 33 行是今天此刻的值,是瞬时量不是断言。
我只核了 09-25 亲手记下"已核实为错"的那一处,其余 4 处未核。
★ 自更正两处(提交前逐行复核发现): ①我先写 301 行是 "session_id" 那一行,
逐行实测是 mailSubjectFor 那行 —— 相邻行记错了,已改; ②"待查 5 处"实为命中 6 处
减 1 处已修样本,已改。
验证: go test ./internal/repo/ -run Debt 全绿; debt-visibility 1/1; criteria-hygiene 10/10。
This commit is contained in:
@ -407,6 +407,14 @@
|
||||
"where": "deploy/recount-relay-counts.sh:191,192,234(标签已写进 JSON 键名与文本行)· 缺口:client/electron/test/criteria-hygiene.test.mjs 与 run-all.mjs 里 'keying' 均 0 命中 · 可照抄的同族判据 criteria-hygiene.test.mjs:952",
|
||||
"kind": "**改输出 ≠ 钉判据**:抑制数的 keying+scope 标签已写进脚本输出,但没有任何判据守着它(删掉不会红)。pi 说的『丢标签这类错判据抓不到』成立——要抓它得先知道这里该有标签,而那正是缺失的东西本身",
|
||||
"note": "★★★ 2026-09-30 登记。**pi `dd579a8e` 说对了一句 mechanism,我照做了一半**:它说\"**丢标签这类错判据抓不到**\",而我做的恰好是\"把标签写进输出\"——那让错**看得见**了,但仍然**不会红**。\n\n## 缺口形状(实测)\n\n```\ndeploy/recount-relay-counts.sh:234 printf '抑制数 [keying=(agent,根) scope=全局]: …'\ndeploy/recount-relay-counts.sh:191 \"suppress_full_groups_keying_agent_root_scope_global\":%s\ndeploy/recount-relay-counts.sh:192 \"suppress_fail_groups_keying_agent_root_scope_global\":%s\n⇒ 标签**已经在输出里**(键名与文本两处都带 keying + scope)\n\n★ 但没有任何东西守着它:\n client/electron/test/criteria-hygiene.test.mjs 里 'keying' 命中 = **0**\n client/electron/test/run-all.mjs 里 'keying' 命中 = **0**\n⇒ ★ 删掉 `keying=` 之后,**没有一条判据会红** —— 标签可以被下一个人顺手删掉而无人知晓\n```\n\n## 为什么它是\"丢标签\"这一族(本会话第 2 次同形)\n\n```\n① 2026-09-25 §7 负向清单\"一处有守一处无守\" —— 我补了判据(b1eb0ab0 / criteria-hygiene:952)\n② ★ 本条: 标签写进了输出,**判据没补** ⇒ 与 ① 同形,只是这次更隐蔽:\n ①里\"无守\"那份是**另一处文件**(一眼能看出不对称),\n ②里\"无守\"是**根本没有那条判据**(看不出少了什么)\n```\npi 的原话值得原样留着:**\"丢标签这类错,判据抓不到\"** ——\n因为判据要能抓它,得先知道\"这里该有标签\",而那正是缺失的东西本身。\n\n## ⑯ 的内容(已落进脚本输出,尚未落成判据)\n\n```\n⑯ 报\"组数 / 抑制数 / 去重数\"必须同时报 **keying 与 scope**:\n keying ∈ {(agent, 根), (根)}、scope ∈ {全局, 某 session}\n ★ 两者共同决定那个数 —— 少任何一个,下一个人都只能靠猜\n ★ 根因(pi `a68f62d2` §一): 他那句 `21/1` **跑的是对的**((agent,根) 口径),\n **错的是抄进信里时把 keying 标签丢了** ⇒ 同一封信里有标签的三句逐值吻合 (agent) 口径,\n 唯一\"看起来像仅根\"的那句恰恰是没标签的那句\n```\n\n## 修法有现成模式可照(不必新造)\n\n```\nclient/electron/test/criteria-hygiene.test.mjs:952\n test('★ ⑤b 的负向清单在 JS 与 shell 两处都有副本,两份都必须点名同一对失败类', …)\n⇒ 同一族、同一形状(\"必须同时点名\")。本条可照它写:\n 「recount-relay-counts.sh 的抑制数,文本行与 JSON 键名**两处**都必须带 keying 与 scope」\n⇒ ★ 写判据时必须做**变异验证**(删掉 keying ⇒ 该格红),\n 否则又是一次\"以为钉上了\"——本会话已栽在这上面一次(见\"已犯\")\n```\n\n## 已犯(我自己)\n\n```\n2026-09-25 我在 fcb406c4 里写「我把它钉进脚本了(键名 + 文本行),下一轮谁都不可能再『抄来源时丢标签』」\n⇒ ★ 那句话**只对\"输出\"成立**,对\"没人会删\"不成立 —— 我把\"改了\"当成了\"守住\"\n⇒ 形态: **改输出 ≠ 钉判据**。前者让错可见,后者让错会红。\n```\n\n## 边界 / 未做\n\n· **没有写那条判据**(本轮只读 + 统计)。它是本条最直接的修法,但属测试文件改动,\n 且 `criteria-hygiene.test.mjs` 由并发会话经手 ⇒ 改前需确认无人同时在改。\n· 未复跑 `recount-relay-counts.sh` 本身(依赖生产库);本条只读它的源码与输出格式。\n· keying 标签**当前是正确的**(61/37、92/6 与 pi 逐值一致)⇒ 本条**不是纠错,是防再犯**。\n· 未能回给 pi(`send_mail` 被会话闸挡下)。"
|
||||
},
|
||||
{
|
||||
"id": "doc-line-ref-decidepermission-drifted-33",
|
||||
"count": 1,
|
||||
"due": "下一次改 docs/HARMONY-ALIGN-PLAN.md(或任何按行号引代码的文档)时:先判它指的是不是它声称的符号;顺手把它改成函数名 + 行号仅作定位",
|
||||
"where": "docs/HARMONY-ALIGN-PLAN.md:225(引 permission.go:301,实为响应体字段;func DecidePermission 现 in 334)· 已修的同族样本 server/internal/handler/permission_relay_release_test.go:32-37(a67c8a3)· 同形状命中 6 处、其中 1 处为已修样本 ⇒ 待查 5 处:sse/manager.go:115、docs/reviews/harmony-client-review.md:101、docs/API.md:4147、docs/API.md:4490",
|
||||
"kind": "**行号引用漂到无关代码**:文档声称 `permission.go:301` 是 DecidePermission,实际 301 是 permission_request 响应体字段,函数已在 334(从 09-25 的 318 又漂 16 行,累计 33 行)。pi 那格『引用带唯一标识、行号只作辅助』已在一处落实(a67c8a3),这处未落实——且 09-25 我推迟它的理由(『另一个 writer 的决定』)经查已不成立(文件干净)",
|
||||
"note": "★★★ 2026-09-30 登记。**pi `f74da994`(2026-09-25 04:59:03)那格记法已经落了一处(`a67c8a3`),但另一处至今没落、且已漂得更远。**\n\n## 那格记法(pi 提出,我 09-25 认领并落了一处)\n\n```\n引用代码位置时**同时给唯一标识**(函数名 / `relay_key` 字面量 / 块首注释),\n**行号只作辅助** —— 同族:「判身份用唯一键,不用位置」。\n★ 已落实的一处: server/internal/handler/permission.go 的注释从 `permission.go:112`\n 改成「函数名 `RequestPermission` + 错误字符串 `Invalid session_id`」,行号删掉。\n 理由**已写进注释**(在 server/internal/handler/permission_relay_release_test.go:32-37),\n 连\"112 行现在是本注释的上游注释文本\"都实测记录了 ⇒ 防下一个人补回行号 ✓\n```\n\n## ★ 缺口:docs/HARMONY-ALIGN-PLAN.md:225 仍用裸行号,且已漂 33 行\n\n```\n文档写: (`server/internal/handler/permission.go:301`) ← 声称是 DecidePermission\n现在 301 行实际是: `\"subject\": mailSubjectFor(kind, req.Question),`(逐行实测;相邻行是 mail_type/role 那组字段)\n (构造 permission_request 响应体的一组字段,**与 DecidePermission 无关**)\n`func DecidePermission` 现在在 **334** 行\n⇒ 漂移轨迹: e07e3bf 时 301≈该函数文档注释(302 是函数体)\n 2026-09-25 我测得 318(漂 17 行)\n **今天 334(漂 33 行)** ⇒ 期间又漂了 16 行\n⇒ ★ 与我 09-25 记的\"同类、不同严重度\"相比又进一层:\n 当时 301 落在**同文件另一个函数体内**(还能说\"就是这文件里 DecidePermission 那块附近\"),\n 现在 301 落在**一个与该函数无关的响应体构造**上 ⇒ 已不是\"漂移\"、是**指向了别的东西**\n```\n\n## 为什么\"越界检查\"这类弱判据抓不到(我 09-25 已实测,本轮沿用)\n\n```\n112 <= 478(permission.go 行数)⇒ 在界内 301 <= 478 ⇒ 在界内\n⇒ ★ 弱形式判据(行号在不在文件范围内)**一次都抓不到**:\n 行号还在,只是**指向了别的符号** ⇒ 只有\"唯一标识 + 编译/实测\"能判\n```\n\n## 09-25 我为什么没改它(以及现在那个理由还成立吗)\n\n```\n我当时写: \"未改它 —— 那是另一个 writer 的文档,是否改成唯一标识由那条线定\"\n⇒ 本轮核: `git status --porcelain docs/HARMONY-ALIGN-PLAN.md` = **干净**(无人在改)\n⇒ 所以\"等那条线定\"这个理由**已不成立**,剩下的只是没做。\n⇒ ★ 这一条本身是那格记法的**自反例**: 我用\"位置/归属\"当理由推迟了\"改成唯一标识\"这件事,\n 而那正是我认领的规矩。\n```\n\n## 可判动作\n\n· 把 `permission.go:301` 改成 **`DecidePermission`(函数名)**,行号要么删、要么写成辅助\n (形如 `func DecidePermission` 在 permission.go 内,行号仅供定位)。\n· 若要全仓一致:`grep -rn \"permission\\.go:[0-9]\"` 现在命中 **6 处**,其中\n `permission_relay_release_test.go:32` 是 **a67c8a3 的已修样本**(它**故意**引用 112\n 来讲\"同一提交内自失效\"这件事,**不是**待改项)⇒ 真正的待查是 **5 处**:\n `sse/manager.go:115`、`docs/reviews/harmony-client-review.md:101`、\n `docs/HARMONY-ALIGN-PLAN.md:225`、`docs/API.md:4147`、`docs/API.md:4490`\n —— 每处都要判\"它指的是不是它声称的那个符号\",而不是一律替换。\n· ⚠️ `docs/API.md` 与 `docs/reviews/*` 也是并发写入的文件,改前须确认无人同时在改。\n\n## 边界 / 未做\n\n· **没有改任何文件**(本轮只读:sed/grep/git status)。\n· 漂移 33 行是**今天此刻**的值;它是瞬时量,不是断言。\n· 我没有逐一核那 5 处是否**真的指错**(只核了 HARMONY-ALIGN-PLAN.md:225 这一处,\n 因为它是 09-25 我亲手记下\"已核实为错\"的那一处)。\n ⇒ 其余 4 处**可能对可能错**,未核 ⇒ 上面\"全仓一致\"那条是待办清单,不是结论。\n· 未能回给 pi(`send_mail` 被会话闸挡下)。"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user