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` 若动目录)。