# S10 缺口总账 · 大白话版（2026-09-17 02:2x）

> **给谁看**：用户本人 + 压缩后的下一个窗口。
> **一句话**：契约文档写得像"已经做完了"，但代码里有些地方**根本没接线**。下面逐条讲人话 + 怎么改。
> **来源**：`docs/internal/ROADMAP-20260917-WEEK.md` §3.5（技术版，带行号）。

---

## 先说好消息：接续（handoff）是好的

你让我"尤其看接续"，我逐环节查了，**8 个环节全部真接线**，而且比文档给人的印象更扎实：

| 你以为可能坏的地方 | 实际情况 |
|---|---|
| 水位满了会不会真写交接笔记？ | ✅ 会写（`index.js:2789`） |
| 四段式格式有没有真的强制？ | ✅ 真强制，两个写入口都过同一道门（`:2302`） |
| 新会话**真的**收得到交接材料吗？ | ✅ 真收到（`:3118` 组装 → `:3144` 投递） |
| 旧会话会不会还在跑（两会话并行）？ | ✅ 已先停旧回合（`:3099` `sc.cancel`）——这正是 PR #37 争论那个点，你自己那套是对的 |
| 新会话在侧栏是无名会话吗？ | ✅ 已命名「接续 #N · 工作区」（`:3129`） |

**顺带一个实测**：我写交接账本时**真被那道四段式门拦了一次**（报"标题不逐字匹配"）。所以这机制是活的，不是纸上的。

**结论：接续不用改。**

---

## 六个真缺口（人话版）

### 缺口 1 ·「锚点」写了，但默认配置下根本不写

**这是什么**：白板卡片要带一个"锚点"标记（`<!-- memory:mem_xxxx -->`），有了它这张卡才能被当一条记忆用。

**问题**：写锚点的代码被一个开关管着——只有把 `boardMode` 设成 `graph`（看板模式）时才写。而**默认值是 `legacy`**（老式文字白板）。

⇒ **装了插件、没手动切模式的人，白板卡片永远没有锚点**，契约里承诺的"白板即语料"从头就没启动。

**证据**：默认值 `index.js:219`；锚点写入被门控 `:1988`（PLAN）、`:2032`（账本）、`:2076`（索引）。

**怎么改**（我建议这个）：**把锚点写入跟看板模式解耦**。
理由：锚点是**"记录格式"**，看板是**"显示样式"**——不该绑在一起。就像"文章要不要编号"不该取决于"你是横排还是竖排看"。
不必改默认值（那会牵动老用户）。

---

### 缺口 2 · 白板内容"每轮都喂给 AI"，但**搜不到**

**这是什么**：记忆有两条路进 AI：① 每轮自动喂一点（注入）② 你主动搜（`memory_recall`）。

**问题**：白板只通了第 ①条，第 ②条**从来没接**。
- 注入 ✅：`index.js:4701` 把白板列为五个来源之一
- 检索 ❌：`pushL0` 的四个来源、`semSources` 的四个来源（`:5505-5508`、`:5704-5707`）**都只有日志/反思/笔记/用户记忆，没有白板**

⇒ **结果**：你在白板上写的目标、判据、结论，AI 每轮都能"看到"；但你哪天问"我之前在白板上记过啥"，**搜不出来**。

**怎么改**：在 `pushL0` 和 `semSources` 各**补一行白板来源**（`p.planPath` 这个变量已经存在，现成的）。这是六个缺口里**最小、最值**的一改。

---

### 缺口 3 ·「索引自动生成」——只有文档，没代码

**这是什么**：契约说要把白板内容自动生成一个"目录索引"（每行 = 链接 + 一句话 + 层级），方便 AI 导航。

**问题**：`indexMd` / `renderIndex` / `buildIndexMd` / `index.md` **全仓 0 命中**。**纯口号。**

**怎么改**：两条路选一条 ——
(a) 补实现（工作量中等）；(b) **在契约文档里如实标"未实现"**，降级成待办。
**送审前至少要选 (b)**，否则就是"文档说有、代码没有"。

---

### 缺口 4 ·「lint 检查」——同样只有文档，没代码

**这是什么**：契约说要有 4 类自动检查：孤立条目 / 陈旧 / 提到却没有独立页 / 缺交叉引用（外加"矛盾检测"要手动点）。

**问题**：`lint` 全仓只出现 11 次，而且**没有任何一个是函数定义**。剩下 4 处是**注释在说"这个留着给 lint 用"**——lint 本体不存在。

**怎么改**：同缺口 3，补实现或**如实标注未实现**。这两条（3、4）是同一性质：**契约级空头承诺**。

---

### 缺口 5 · 账本"不用保护"——注释和代码互相矛盾

**这是什么**：有一条"保护门"专门防止重写时**丢掉用户手写的段落**。

**问题**：代码里对"交接账本"这个目标**直接放行**（`index.js:2313` `return { ok: true }`），
而**三处注释都写着这道门"无条件生效"**（`:2062`、`:2308`、`:332`）。

**影响**：目前**实际危害小**（账本是每次都新建文件，不涉及"覆盖旧文件"，本来就没有丢卡的场景）。
但**注释骗人**这件事本身是缺陷 —— 万一以后改成"账本可覆盖"，这里就是个静默漏洞。

**怎么改**：改注释说清"账本不适用"（最省），或真把保护门补上。

---

### 缺口 6 · 一堆写了但没人用的函数

**问题**：四个模块里合计 **40 个导出函数，在 `index.js` 里从来没被调用过**：
`wb-contract-pre.js` 12 个、`wb-sidecar-pre.js` 16 个、`ledger-criteria-pre.js` 7 个、`memory-mutation-pre.js` 5 个。

**注意**：**不能断言都是死代码** —— 有些可能被前端 `client.js` 或测试用。需要逐个复核。

**怎么改**：复核一遍，真没用的删掉（降低维护面）。**低优先级，可以放最后。**

---

## 建议的动手顺序

| 顺序 | 缺口 | 难度 | 理由 |
|---|---|---|---|
| **1** | 缺口 2（白板进检索） | ★ 很低 | 补两行，变量现成，收益最大 |
| **2** | 缺口 1（锚点解耦） | ★★ 低 | 把 `if (boardMode==='graph')` 这层壳拿掉即可，但要跑回归 |
| **3** | 缺口 5（注释矛盾） | ★ 很低 | 改注释，或补门 |
| **4** | 缺口 3 / 4（索引派生 / lint） | ★★★ 中高 | **二选一：补实现，或文档标注"未实现"**。送审前至少标注 |
| **5** | 缺口 6（死导出复核） | ★★ 低 | 收尾清理 |

**P0 = 缺口 1 + 缺口 2**（用户已定：现在就改完）。

---

## 为什么这些会漏

一句话：**这个仓库的契约文档（`WB-FORMAT-CONVENTION.md`、`RAG-KARPATHY-PROGRAM.md`）写得太像"已完成的功能说明"**，
里面有大量**设计目标**混在**现状描述**里。写 README 或做验收时，**照抄契约就会把"计划"说成"已有"**。

**纪律（已固化为项目笔记）**：引用契约文档的结论前，**必须 grep 真实调用链** —— 有调用点才算已实现。
