musepi-trim-cot-leakage · git:20260823.0df9512 · 2026-08-23 · sha256 b271ba08a06d1e46
musepi-trim-cot-leakage git:20260823.0df9512A
Immutable. This exact content is served forever at /api/v1/blob/b271ba08a06d1e46.
--- name: musepi-trim-cot-leakage description: 清理"思维链泄漏"类文案——死设计会话引用((决策 N)、审计码、草稿 §N、T4/P-I 阶段标签)、PR/栈视角("这个 PR 加了…")、变更叙述("以前/不再/旧版/这版")、评审对白("评审中否了…")、控制流叙述、含糊推迟("大概够用/应该够了")、夹带的工作语言残留。触发:审阅/清理注释、JSDoc、docs、AGENTS.md、CHANGELOG、i18n 文案里读起来像推理过程泄露的文字。 --- # 清理思维链泄漏 **思维链泄漏**是视角停留在写作会话、而不是仓库现状的文案:引用了只有那次会话才看 得见的产物,叙述"变更"而不是"状态",或在对一个早已离开的评审者辩解。修复从来不是 只删——一段文字带有事实分句时,把每个事实改写成在 HEAD 上成立的说法,再删掉周围的 转写;一个事实分句都不带的(审计码、控制流叙述)直接整段删。**必读背景:** `skill://musepi-prose-standard` 持有本 skill 套用的完整命题规则。这是指导,不是脚本。 ## 唯一检验 对每个可疑段落问:**一个只读 HEAD(仓库现状 + git 历史)的读者,能否解开每个引用、 验证每个论断?** 不能 → 把存活的实情改写成仓库视角的说法,删掉其余。能 → 不是泄漏, 无论多像历史——但"可解析"只过本 skill 的杠:在现状面上(README、docs、JSDoc)可 解析的变更故事仍是变更叙述,按分类 3 归位。 ## 分类 1. **死设计会话引用** —— `(决策 7)`、`(审计 C2)`、`设计 §4.7`、`方案 §1.4`、阶段标签 (`T4`、`W3`、`P-I`)、"设计台账"、"(B 裁定)"。该决策有已提交的归属者就按名和路径 引用,否则删掉引用并把事实分句改写成独立成立。 2. **PR/栈视角** —— "这个栈里后面的 PR"、"本 PR 新增"、"上一个 commit"。写已落地的 机制或扩展点;未竟工作移到 `TODO` 标记或 issue。 3. **变更叙述与版本戳** —— "以前/不再/旧的 X"、"这版/v1/今天/现在"(与过去对比)。 写当前行为;已修复的回归写成现在时反事实("没有 X 就会发生 Y"),绝不写成仓库 历史("以前会 Y")。 4. **评审对白** —— "评审中否了:"、"评审者确认了"、草稿序号("本 note 的 v5")、 轮次归属。把存活的决定与理由写成普通事实,删掉谁在何时说的。 5. **向评审者自辩** —— "这转换是安全的——它只是…"、"这是对的因为…"。一条注释自证 其正确,是在跟评审者说话,不是在跟维护者说话。写出让代码安全的那个不变量,或 代码已自明就整条删。 6. **复述与推导转写** —— 控制流叙述("先 X 再 Y")、测试走查、显然分支的证明。 删;只留非显然的契约或不变量。 7. **含糊与计划残留** —— "暂时大概没问题"、"应该够了"、没有标记的推迟。提升为 `TODO`/`FIXME` 或写成实际边界;删掉含糊本身。 8. **写作语言残留** —— 中英混排里的工作语言碎片(`端`、`设计稿`、`---- 私有 ----` 分隔符)。翻译或删除。 ## 什么不算泄漏(保留) - **issue 引用** —— `#1234`、`TODO(name):`、`issue #N owns the follow-up` 在 HEAD 上可解析,任何面都保留,包括 README。 - **已合并 PR 引用** —— 在 CHANGELOG 和 postmortem 里是佐证(CHANGELOG 本来就是 变更史)。`docs/` 现状文不引 PR 号。 - **抑制理由** —— biome/oxlint-disable 的 reason、coverage-ignore 理由、空 catch 的解释是必需文案:修正假理由,绝不删。 - **现在时反事实回归钉** —— "没有 X,Y 就发生"、"naive 的 X 会…"。 - **实测边界** —— `(实测: 512 层嵌套 ≈ 0.15s)`;"实测"这个词是有载重的。 - **运行时新旧对象** —— "旧连接排空后新连接才接受"是运行期生命周期,不是变更历史。 - **仓库外的按设计引用** —— RFC 9110 §10.1.5、Figma 框名;§-禁令针对未提交的内部 草稿,不针对外部标准或自有 §-编号的已提交文档。 - **项目语态与体裁形式** —— "我们"作为项目语态。 ## 工作流 1. **范围**:先要求明确 scope,不推断全仓;`musepi-prose-standard` 定义排除项—— 不动 `vendor/`、`node_modules/`、录制产物/快照(录制输出保留原声)。 2. **先只读审计**:跑 [recall batteries](references/recall-batteries.md)(带 `--hidden` 搜 `.omp/`、`.agents/`、docs),再对每个命中做语义判断。batteries 是探针不是定义, 所以还要不带模式通读范围内最密的文案(模块 JSDoc、README、docs、prompt .md)。 3. **按归属者修**:生成的目录 → 改生成器再重生成(`models.json` 改 `scripts/generate-models.ts` 后 `bun run gen:models`);i18n 域文件 → zh/en 同步改; 模型可见字符串 → 措辞即行为,走 snapshot 支撑的变更而不是悄悄改写。 4. **删之前**列命题(`skill://musepi-prose-standard`),并查过度修正陷阱 ([examples](references/examples.md)):把义务改成背书、把假设说成已发布功能、 删掉真事实、丢掉来源——都是要防的。 5. **验证**:重跑 batteries,期望只剩正当保留;确认每个留下的引用在 HEAD 可解析; 对触碰的面跑相关门禁(`bun check`、相关测试、`bun run gen:models` 若动目录)。