Filed by the domain:spec PM seat (session_01LvwGppdonww4zGLWZo5rho), 2026-09-17T14:4xZ, from the card #15937 / PR #18676 round. Handed back rather than folded in: it is a different defect class from that card's, so the bounded in-place-fix exemption does not open. ⛔ No severity asserted, no domain routing — that is triage's.
The finding
packages/spec/src/contracts/ai-service.ts:627, in ToolExecutionContext.userMessageText's docblock, reads:
* Populated by whichever layer owns the agent route (cloud, post-ADR-0025).
AGENTS.md Prime Directive 13, verbatim: an ADR 「lives in the repository whose code it governs」, and cloud decisions are cited 「as cloud ADR-NNNN — never as a bare number, which scripts/check-adr-anchors.mjs resolves against this registry (the two number independently)」.
The citation is in an explicitly cloud context ((cloud, post-ADR-0025)) but spells the number bare.
Measured, on origin/main = 30be2ac0bb
| 读数 |
结果 |
| 该行存在 |
✅ packages/spec/src/contracts/ai-service.ts:627,逐字如上 |
| 本仓自己的 ADR-0025 |
✅ docs/adr/0025-plugin-package-distribution.md —— 插件打包分发,与 agent route 无关 |
cloud ADR- 拼法在本仓是既有惯例(LIT 对照) |
✅ 命中多处,含 packages/cli/CHANGELOG.md、packages/client/src/index.ts、packages/client/src/environments-delete-two-step.test.ts |
⇒ 读者顺着这条引用走,会落到一篇真实存在但讲的是另一回事的文档上。这比引用一个不存在的号更坏:不存在的号会让人停下,存在的号会让人以为自己读对了。
⚠️ 今天不红,这正是它值得立卡的原因
scripts/check-adr-anchors.mjs 只读 scripts/adr-anchors/ 下的条目,不读源码 docblock,且没有任何条目点名此文件。所以没有任何门禁会报它 —— 它只会静静地把读者引错。
相邻两行现在拼法不一致,这是已知的、有意的
同一 interface 里,PR #18676 新增的 confirmedBlueprintIdentity 成员按规范拼作 cloud ADR-0025,而它正上方的 userMessageText 仍是裸号。那次 PR 的正文已写明此事,以免复审者读成笔误。⇒ 修这条的人会让相邻两行重新一致,⛔ 不要把其中任何一行改成另一行的拼法之前先读 Prime Directive 13:正确的方向是 cloud ADR-0025,⛔ 不是把新成员改回裸号。
接卡人应当先自己证伪的两条
- 本仓 ADR-0025 是否真的与 agent route 无关 —— 本席读的是文件名与其标题,⛔ 没有通读全文。若它其实两者都讲,本条的严重度下降。
- cloud 侧是否真有一个 ADR-0025 —— 本席无法测:
cloud 仓不在本会话的仓范围内。所以「裸号指向了 cloud 的哪一篇」这一半是 NOT MEASURED;已测的是「裸号在本仓解析到哪一篇」。⛔ 不要把前者当已知写进修复说明。
同类面可能不止这一处
本席只测了这一个文件。packages/spec/src/contracts/ 乃至更广的 packages/** 里是否还有别的裸号 cloud 引用,未测。接卡人值得先跑一次全仓扫描再决定这是一处修补还是一次清扫。
Generated by Claude Code
Filed by the
domain:specPM seat (session_01LvwGppdonww4zGLWZo5rho), 2026-09-17T14:4xZ, from the card #15937 / PR #18676 round. Handed back rather than folded in: it is a different defect class from that card's, so the bounded in-place-fix exemption does not open. ⛔ No severity asserted, no domain routing — that is triage's.The finding
packages/spec/src/contracts/ai-service.ts:627, inToolExecutionContext.userMessageText's docblock, reads:AGENTS.mdPrime Directive 13, verbatim: an ADR 「lives in the repository whose code it governs」, and cloud decisions are cited 「ascloud ADR-NNNN— never as a bare number, whichscripts/check-adr-anchors.mjsresolves against this registry (the two number independently)」.The citation is in an explicitly cloud context (
(cloud, post-ADR-0025)) but spells the number bare.Measured, on
origin/main=30be2ac0bbpackages/spec/src/contracts/ai-service.ts:627,逐字如上docs/adr/0025-plugin-package-distribution.md—— 插件打包分发,与 agent route 无关cloud ADR-拼法在本仓是既有惯例(LIT 对照)packages/cli/CHANGELOG.md、packages/client/src/index.ts、packages/client/src/environments-delete-two-step.test.ts⇒ 读者顺着这条引用走,会落到一篇真实存在但讲的是另一回事的文档上。这比引用一个不存在的号更坏:不存在的号会让人停下,存在的号会让人以为自己读对了。
scripts/check-adr-anchors.mjs只读scripts/adr-anchors/下的条目,不读源码 docblock,且没有任何条目点名此文件。所以没有任何门禁会报它 —— 它只会静静地把读者引错。相邻两行现在拼法不一致,这是已知的、有意的
同一 interface 里,PR #18676 新增的
confirmedBlueprintIdentity成员按规范拼作cloud ADR-0025,而它正上方的userMessageText仍是裸号。那次 PR 的正文已写明此事,以免复审者读成笔误。⇒ 修这条的人会让相邻两行重新一致,⛔ 不要把其中任何一行改成另一行的拼法之前先读 Prime Directive 13:正确的方向是cloud ADR-0025,⛔ 不是把新成员改回裸号。接卡人应当先自己证伪的两条
cloud仓不在本会话的仓范围内。所以「裸号指向了 cloud 的哪一篇」这一半是 NOT MEASURED;已测的是「裸号在本仓解析到哪一篇」。⛔ 不要把前者当已知写进修复说明。同类面可能不止这一处
本席只测了这一个文件。
packages/spec/src/contracts/乃至更广的packages/**里是否还有别的裸号 cloud 引用,未测。接卡人值得先跑一次全仓扫描再决定这是一处修补还是一次清扫。Generated by Claude Code