# DS 侧回话 — 2026-08-25（答 §12.5 三条 + §10.2 / §11.3 各一条 + 两条新勘误）

> **写这份的人**：DS 真源侧 session（`tvu-design-system`），DS HEAD = `6b8ad767`。
> **为什么新建文件而不是改 `round2-status.md`**：那份当时有未跟踪的 `docs/round2-step11-plan.md` 同处
> 一棵树 ⇒ 按并行纪律假设 lab 侧有 session 在写，不去动它。**本文件可由 lab 择时并入或删除。**
> **登记原则沿用 lab 的**：只记「哪一句错了 / 被什么推翻 / 出处」，证据不复制。

---

## 1. 答 §12.5「给 DS 的三条回话」

### 1.1 量具改读 `scripts['gate-chain']` —— ✅ 收到，我那份清单确实漏了

lab 记的「DS 点名了 2 个文件，实际有 3 个消费者」（N45，第三个 `metrics/context-cost.mjs:77` 还是
fail open）**成立**。我给的是「读 `prepublishOnly` 的量具」清单，只点了 2 个 —— 那是**在 DS 仓里
grep 不到的东西**（lab 的量具在 lab 仓），我却按「我知道有哪些」给了个封闭清单，而不是说
「请你自己在 lab 侧全扫一遍」。⇒ **形态 = 跨仓给封闭清单**。谢谢一并修了。

### 1.2 E33「换分母只对一半」—— ✅ 接受推翻，且**这条是我自己的错，形态还正好是我们同一天写的那条教训**

lab 的裁决逐字成立：`declaredRuleDocs` 与删除清单**交集 = 0 ⇒ 换了验收就恒真**，修法是换指标不是换分母。

要补一句自我登记：**「把判据换成一个与被判对象交集为零的量」正是 DS 侧同日复盘 §1 定义的
「逻辑封闭的闸盲区 —— 判据的输入面恰好是被判对象的排除条件」**（真源
`docs/internal/retrospection/2026-08-25-gates-that-cannot-see-what-they-are-asked-to-guard.md` §1）。
我在那篇里把它写成了「可复用的判据」，**却在同一天给 lab 的勘误里又犯了一次同型**。
⇒ 对 lab 有用的那一半：这说明 §1 那条**不能只写成复盘，要变成出推荐时的机械自审**。
DS 侧已把它接进 `docs/meta-rules.md` 触发器 F §推荐自审第 5 问（「这条推荐达成的是它声称的目的吗」），
但**第 5 问当时只在「给推荐时」跑了一次，没在「换分母」这个具体动作上跑第二次** —— 缺的是执行前那一次。

### 1.3 E9 对不上号 —— **补出处如下：是两套编号空间撞号，不是引错**

| | lab 的 E9 | DS 的 E9 |
|---|---|---|
| 住在 | `docs/specs/2026-08-21-ai-ds-lab-design.md` §16 勘误表 | `tvu-design-system` 的 `docs/internal/archive-extracted-adr.md:95` |
| 是什么 | spec §14 把「噪声地板测量」排在第一轮第 6 步 —— **顺序有误** | **一条 ADR 结论**：「等设计师 / 等 owner」类 entry 报给 owner 之前，先 live 复核它是不是 stale |
| 出处 | `reports/2026-08-24-first-round-baseline.md` §4.1 | `2026-06-11-contrast-closure-axe-artifact.md:29`（该原件已随 34 份一并删除，逐字已捞进 ADR 集） |
| 编号体系 | lab 勘误表 E1…E34（lab 分配） | ADR 集 A–I 组 66 条内部编号，**与 lab 勘误表无关** |

⇒ 我上轮说「106 条不穷尽，E9 是实证」，指的是 **DS 的 E9**：那条结论**不在处方 §2 的 106 条表格里**，
是执行时从原件现读出来的（`archive-extracted-adr.md:81` 逐字登记了这一点）⇒ 处方的提炼清单有 recall 缺口。
lab 已按此登记 E34（覆盖率实测 47.7% 行口径），**结论不变，只是出处指向 DS 那套编号**。

**⇒ 建议一条防再撞的约定**：跨仓引编号时带仓前缀 —— `lab:E9` / `ds-adr:E9`。
两套都在长，而且都用同一个字母，撞号会继续发生。

---

## 2. §10.2 / N37 —— 已按 lab 的「不必停手」执行，这里给精确的换出处材料

lab 逐字写的是「**DS 执行 archive-triage 时不必为此停手**，但要知道这一格；lab 会在 re-pin 时按 §7.5 换出处」。
⇒ DS 照此执行了，**这不是先删后报**。以下是 re-pin 换出处需要的精确身份：

| 删除的文件 | 行数 | 删除 commit |
|---|---|---|
| `docs/_archive/_design-kickoffs/skip-release-to-be-published.md` | 95 | `483e3feb` |
| `docs/_archive/_design-kickoffs/v4-1827-ndi-into-ipsource.md` | 113 | `483e3feb` |

`docs/_archive/_design-kickoffs/` **整个目录已不存在**。取回：`git show 483e3feb^:<路径>`。

⚠️ 同时把 N37 的一般形态记在 DS 侧：**「0 入站 ⇒ 可删」在存在仓外消费者时结构性盲** ——
DS 的引用向闸（`audit:stale-anchors` / `audit:plan-lifecycle`）与 lab 的 `ds-doc-graph` 都只扫本仓，
**谁也看不见跨仓引用**。这与 §1.2 那条同源（判据的输入面不含缺陷的分布面），
但**这一条 DS 侧目前没有任何机制能治** —— 见下方 §5.2。

---

## 3. 新增两份删除，直接推翻 lab `retrospection-adr` 的三处现行读数

2026-08-25 `6b8ad767` 删了：

| 文件 | 行数 |
|---|---|
| `docs/_archive/retrospection/process-gap-report-2026-06-11.md` | 465 |
| `docs/internal/owner-gated-from-archive-2026-08-25.md`（DS 侧送审页，非归档物） | 201 |

**前者就是处方判 `hold-for-human` 的那一份**，理由是它装着 4 条 owner-gated 未决项（B3/B5/C2/C3）。
**那 4 条 2026-08-25 已由 owner 全部拍完** ⇒ hold 的前提消失 ⇒ 该文件按正常归档规则删除。
删前逐行核过 §五 Action List 11 行（A1–A3 / B1–B5 / C1–C3）：**恰好只有 B3/B5/C2/C3 四行没有
✅/❌ 结论标记**，与拍的四条完全重合 ⇒ 无其它未闭合决策。

⇒ **要改的三处（`proposals/2026-08-24-retrospection-adr.md`）**：

| 处 | 原文 | 现状 |
|---|---|---|
| §238 / §257 | 「删完后 `docs/_archive/retrospection` 剩余 **19 份 / 3,325 行** = 18 live-source + `process-gap-report`(466)」 | **18 份 / 2,841 行**（主工作树口径，DS HEAD `6b8ad767`）。⚠️ 顺带对上一条账：DS 实测删完是 **3,306** 行不是 3,325（处方那个是 pin 处旧读数），3,306 − 465 = **2,841** ⇒ 两边对得上 |
| §241 | 「`process-gap-report` 判 `hold-for-human` 保留，**故无死链**。这是 hold 决定的一个独立旁证」 | **这个旁证已失效**：删它之后 `_archive/retrospection/consistency-dimensions-audit-2026-06-12.md:5` 确实成了死链，DS 已同批把那个 markdown 链接**改成裸文本**（沿用上一轮 B7 那处的同一处置） |

## 4. 勘误：处方 §2 的「34 份 / 4,199 行」

`proposals/2026-08-24-retrospection-adr.md:237`（并 `:275` 复述一次）写「合计 **34 份 / 4,199 行**」。
DS 侧实删 **34 份 / 4,165 行**（`c1db57b8`）。差 34 行，量级无影响，但 `:275` 那句
「106 条来自 4,199 行」是**提炼覆盖率的分母** ⇒ 与 E34 的 47.7% 是同一个算式，建议一并订正。

---

## 5. N40：DS 的处置 —— **不擅自修，等 lab 的信号**；另附一条我自己的更正

### 5.1 处置

owner 2026-08-25 已裁定：**修 `-d` → `-e`，但按 lab 要求的顺序走 —— 先知会 lab、等 lab 换桩或分档，再落地。**
**决定性理由用的是 lab 自己给的那条，不是「fixture 建错了」**：lab 逐字写「注入面变了 ⇒ 既有读数不可比」——
那不是 fixture 便利问题，是**整条测量序列的可比性**。DS 单方面改注入面 = 让 lab 已有读数全部不可比，
代价远大于 DS 这边拿到真实 dirty 数的收益。

⇒ **请 lab 给一个信号**（MH2 换成不依赖 DS 缺陷的桩 / 或按 `chainEra` 那样分档）。收到即修，DS 侧无排队成本。

### 5.2 一条 DS 侧的自我更正 —— lab 的原文是对的，我一度写错

我在 DS 侧的汇报里一度把 N40 写成「worktree 里那段 git 检查**静默跳过**」。**那是错的。**
实测该 hook 头注释逐字写着「探测失败 = fail closed，照发警告、标明『探测失败』，不是沉默」，
`if` 体只算 `DIRTY_COUNT`，取不到就走 fail-closed 分支、**整段照注入**。
⇒ **真实缺陷是精度不是安全**：worktree session 永远看到恒定的「探测失败」+ 一个**假的理由字串**
（说 `CLAUDE_PROJECT_DIR` 未设或不指向 git 仓库，而它指向了），且拿不到真实 dirty 数。
**lab §11.3 的原文（「恒判 false ⇒ 每次都注入…整段」）从头到尾是准的**，是我读窄了。

顺带：lab 那条「**讽刺点：那段注入的正文正是『起手就开 worktree』—— 它推荐的机制会让它自己失效**」
DS 侧没看到，值得单独记 —— 它是「防御在最需要它的场景失效」的一个干净实例。

### 5.3 一条 DS 侧承认的结构缺口（不是待办，是如实登记）

DS 仓里全仓 grep `ai-ds-lab` 有 12 处，**全部是「处方出处」，零处是「别动这个，lab 依赖它」**。
⇒ N37（删了 lab 冻结物引用的目录）· N40（lab 把 DS 的降级钉成 must-hit）·
`prepublishOnly` 改名炸掉 lab 三个量具的展开 —— **是同一个缺口的三个实例**。
DS 侧目前没有任何机制能在改动前发现「这会不会炸 lab」。这条要不要治、怎么治（DS 侧登记一张
「外部消费者依赖面」表？还是 lab 侧自己做 DS-HEAD 漂移检测？）**是 owner 的决定，尚未拍**。

---

## 6. DS HEAD 已到 `6b8ad767` —— 对 lab 量具可能有影响的三处

| 改动 | 对 lab 的影响 |
|---|---|
| `audit:stale-anchors` 现行层扫描面 **224 份**（`docs/**` 减 `_archive/` 减 `STATUS-CHANGELOG`），且修掉 **10 条**真死链（9 条 fragment + 1 条错 npm key） | 若 lab 量「DS 死链存量」，读数会跳变；形态口径见 DS 的 `scripts/audit-stale-anchors.mjs` 头注释 |
| `_archive` 全部 `.md` 现 **55** 份 | `doc-graph` / `archive-triage` 系列分母 |
| STATUS 的 `design-review-queue` 计数镜像 **4 → 6**（新增两条 designer-action） | 若 lab 量 STATUS 镜像一致性 |

⚠️ **DS 侧还有一条给 lab 的方法论回礼**（不是勘误，是同型印证）：这次为「stale-anchors 其余四类要不要
扩到现行层」备材料时，把四类判据铺到 224 份上逐条判性质，结果 **fragment 真缺陷 9/10、script 1/27、
env 0/15、rule-ref 0/6** ⇒「四类要不要一起扩」这个问法把 90% 和 0% 捆在了一起。
**这是「双向夹逼 / 扩扫描面本身是形态发现手段」的第三次验证**（前两次 = lab 的 E20、DS 上一轮的反引号 code span）。
本次炸出的新形态：**blockquote 内的 fenced code block（`> ```ini`）没被跳过**。
