# A″′ 格预注册：桶三整条线**已被 DS 执行**复核 —— `lab:N54` 第三次命中的**第三种形态**

**跑前落盘。⛔ 事后不改假设、不改判定规则；改了就在报告里逐条标「事后改」并说明理由。**

- 立档时间：2026-08-27
- 起手环境：DS 活源 HEAD = **`8c36e6a1`**（A′′ 格记 `b593c301`）· pin `c1db57b8` 落后 **22**
  （D 格 3 / E 格 19 / A′ 格 20 / A′′ 格 21 ⇒ **每格重取，已兑现**）
- 四个 pin 起手 `dirty = 0`（`339a72bf` / `4a68e02d` / `71ac2711` / `c1db57b8`）
- DS 工作树既存 dirty 两项（`skills/shared-vocab-rules/vocabulary.md`、
  `docs/internal/_generated/backlog-owner-decisions.html`）—— **⛔ 不是本格弄脏的，⛔ 不清**

---

## 1. 被验命题

[`proposals/2026-08-24-archive-triage.md`](../proposals/2026-08-24-archive-triage.md) **§3 第 5 步**逐字：

> 按**新图**再确认桶三剩余各项仍是 0 外部引用 → **分批删**

以及 A″ 格（上个 session）在该步上新加的前置加注逐字：

> ⇒ 本步「分批删」前**必须先测这一条**。

**要验的是第 20 条第四行那一问：这条待做项还该做吗。**
⛔ **不验**「桶三该不该删」（那是 DS 的裁定权），⛔ **不验**「DS 执行得对不对」。

---

## 2. 起手实测（**非假设** —— 写本预注册之前已经看到的，如实登记）

### 2.0 四行块前提核验（AGENTS §2 第 20 条）—— 🔴 **原候选 A 前提不成立**

本格是从**候选 A**（`audit-stale-anchors.mjs:717-718` 硬依赖）起手核前提时撞出来的。四行块结果：

| 行 | 内容 |
|---|---|
| **登记记的** | 报告 §10 第 1 条 + 处方 §3 第 5 步加注逐字：「…… **一道自检硬依赖 `_archive/retrospection` 目录存在**，而该目录属**桶三（真删）**」 |
| **现取的** | ① 逐字代码在，但**行号 `717-718` 是活源口径，pin `c1db57b8` 上是 `:612`**（登记未标 sha）· ② 该文件活源 vs pin `diff` **不同**（⚠️ 不是 A″ 格 `audit-doc-shape.mjs` 那种逐字相同）· ③ 那两行**上一行**逐字是「第 4b 类的 **must-hit 自证**」⇒ 是 lab 自己第一轮立的 §3 铁律 2 的实例，**不是疏忽** |
| **前提还成不成立** | 🔴 **不成立** —— 「该目录属桶三（真删）」与**同一份处方文件 §2 逐字矛盾**：§2 **桶一**写 `_archive/retrospection` **15 份 / 2,449 行有外部入站**、逐字「**本轮不删任何一份**」 |
| **它还该做吗** | 🔴 **DS 已答过**：`.changeset/stale-anchors-b2-boundary-correction.md` 逐字「归档目录下绝大多数文件没有外部入站 ⇒『**删归档 → 本闸红**』对它们**依然不成立**」+「订正里显式标出『**⛔ 别跟着一起删**』」 |

### 2.1 起手读数（逐条登记，⛔ **不算**本格验证结果）

1. **`483e3feb`（2026-08-25）message 逐字**：
   `feat(gate): 执行 lab 的 5 份处方 —— 解闸链 fail-fast + 补两处判据缺口 + `**`归档桶三`**` + D1-D11 提炼`
2. `git merge-base --is-ancestor` 实测：**`483e3feb` 是 `c1db57b8` 的祖先，不是 `71ac2711` 的祖先**
   ⇒ 落在两 pin 之间 ⇒ **C/D/E/A′/A″ 五格从第一格起，pin 里就带着执行结果。**
3. `483e3feb` 全量 = **37 文件 / +1,296 / −4,201**；其中 `docs/_archive/` 下 = **18 文件 / −4,104**。
4. 三 sha 上 `docs/_archive/` 各子目录份数（`find -type f`）：

   | 子目录 | `71ac2711`（处方口径） | `c1db57b8`（五格 pin） | 活源 `8c36e6a1` |
   |---|:-:|:-:|:-:|
   | `_reports` | 16 | **8** | 8 |
   | `_plans` | 9 | **2** | 2 |
   | `_design-kickoffs` | 2 | **0（目录没了）** | 0（目录没了） |
   | `_archive`（归档的归档） | 1 | **0（目录没了）** | 0（目录没了） |
   | `_prompts` | 2 | 2 | 2 |
   | `retrospection` | 53 | 19 | 18 |
   | `superpowers/plans` | 24 | 25 | 25 |

5. lab 侧 `proposals/` 实为 **7 份**，而 message 说「执行 lab 的 **5 份**处方」⇒ **数不相等，差 2**。
6. 按第 21 条推论一把裁定词 grep 跑完：`重开条件` 在 DS 侧命中**远超 A″ 格所说的 3 个**
   （DS 有整套「被否决策要写重开条件」纪律）；顺带撞出**编号裁定体系 `Ruling-N`**
   （`pr-checks.yml:260/263` 引 `Ruling-11` / `Ruling-1`；真源疑在
   `docs/internal/retrospection/2026-08-21-criteria-that-never-fire.md`）——
   **A″ 格的措辞组合没覆盖到这一族。⚠️ 按措辞 grep，⛔ 不保证穷尽。**

---

## 3. 预注册假设与判定规则

> **每一档下面都写了两问的答案**（§2.21 推论三）：
> ①【这一档绑了几个判定 —— 命题的哪部分被判了、哪部分没被判】
> ②【这个读数的取值域，我的定义覆盖全了吗】

### H1 —— 执行完整度：`483e3feb` 删的那批，与处方桶三清单**是不是同一批**

**判定面定义（口径写死）**：
`del` = `git show --diff-filter=D --name-only --format="" 483e3feb -- docs/_archive/` 的输出集合。
`plan` = 处方 §2 桶三表列出的对象，**除**两项：`docs/internal/STATUS-CHANGELOG.md`（已裁 hold，A″ 格）
与 `docs/internal/_generated/*.md`（表内逐字「**移出而非删**」，不属真删）。

🔴 **每个子目录一档，⛔ 不合并成一个「桶三执行完整度」判定**（A′ 格 H2 焊接的教训）。
🔴 **每档必须比对文件名集合，⛔ 不能只比份数** —— 份数相等而文件名不同也是「不是同一批」。

| 档 | 子目录 | 处方登记 | 读数 |
|---|---|---|---|
| **H1a** | `_archive/_plans` | 7 份 / 2,419 行 | `a` 份 · 名集 `A` |
| **H1b** | `_archive/_reports` | 8 份 / 1,171 行 | `b` 份 · 名集 `B` |
| **H1c** | `_archive/_design-kickoffs` | 2 份 / 210 行 | `c` 份 / `c_l` 行 · 名集 `C` |
| **H1d** | `_archive/_archive/` | 1 份 / 322 行 | `d` 份 · 名集 `D` |

① **每档只绑一个判定**：「这个子目录的删除集与处方登记集是否同一批」。
   **纯可实测事实**（文件名 + 份数 + 行数），⛔ 不含任何应然判断 ⇒ 无需再拆。
② **取值域覆盖**（对 `a`/`b`/`c`/`d` 每一个都适用，⛔ 别只写「= 就成立」）：

| 取值 | 判定 |
|---|---|
| **0** | 该项**完全未执行** ⇒ 处方该步对**这一项**仍成立 |
| **0 < x < 登记数** | **部分执行** ⇒ 剩余项仍成立，须列出剩了哪几份 |
| **= 登记数，且名集逐份相同** | **完全执行且同一批** ⇒ 该项待做已消灭 |
| **= 登记数，但名集有出入** | 🔴 **份数巧合** ⇒ 按「部分执行 + 删了清单外的」两条分别记 |
| **> 登记数** | 🔴 **超出清单** ⇒ 多删的那几份**不在 lab 处方授权范围内**，须单列（⛔ lab 不裁 DS 该不该多删） |
| **目录整个不存在（无法取 `find`）** | 归入上面对应档，但**必须额外证「是删的不是移的」**（全仓 `git ls-files` 搜同名） |

⚠️ **`c`/`c_l` 起手已见 3 份 / 529 行 vs 登记 2 份 / 210 行 ⇒ 预期落「> 登记数」档。
那个差 ⛔ 不抹平，本格必须解释它是什么**（§2.19 推论四：静态数与实测数不同值时那个差就是线索）。

### H2 —— 归属：这次删除**是不是**「执行 lab 处方」这个动作

`m` = DS 侧可指认「本次删除起因 = lab 处方」的**独立真源处数**
（判定面：`483e3feb` 的 commit message · 该 commit 引入的 `.changeset/*` · 该 commit 对
`docs/internal/STATUS-CHANGELOG.md` 的 diff · 被改脚本的头注释）。

① **本档只判【可实测事实】**：「有几处独立真源把这次删除归因到 lab 处方」。
   🔴 **⛔ 不设「DS 该不该按 lab 处方执行」这一档** —— 那是应然判断，lab ⛔ 不裁（第 21 条新判据）。
② 取值域：`m = 0`（**无任何点名** ⇒ 只能报「同批但归因未证」，⛔ 不许推因果）·
   `m = 1`（只 message ⇒ 单点证据，如实标）· `m ≥ 2`（多真源互证）。
   ⚠️ **`m = 0` 时判定面可能本就为空** ⇒ 先按 `lab:N48` 证判定面非空（那四个面确实被读到了）。

### H3 —— 「**5 份**处方」是哪 5 份，哪 2 份没执行

`s` = 由 `483e3feb` 的 37 个改动文件**可指认对应**的 lab 处方份数（lab 侧 `proposals/` 共 **7** 份）。

① 本档只判【可实测事实】：「可指认的对应份数」。⛔ **不判「DS 数错了」**——
   DS 的「5」按它自己的口径可能是对的（同 A″ 格 §6.3「⛔ lab 不说 DS 数错了」）。
② 取值域：`s < 5` / `s = 5` / `s > 5` **三档都必须写**。
   🔴 **⛔ 别默认 DS 说 5 就是 5**（A″ 格 H3a「差 1」复原不出的教训）。
   `s ≠ 5` 时只交出「两读数不同值」这个事实 + 逐份对应表，⛔ **不推因果**。
   ⚠️ 附加取值维度：**「可指认」的判据必须先写死**——本格取
   「该 commit 改动了处方正文点名的具体文件 / 脚本 / 判据」，⛔ 不取「主题看起来像」。

### H4 —— lab 登记面知情度（`lab:N54` 家族的固定项）

- `p` = lab 全仓把桶三处置状态登记成「**待删 / 未删 / 待执行 / 分批删 / 未覆盖**」的**处数**
- `q` = 其中**知情它已被 `483e3feb` 执行**的处数

**判定面（口径写死在命令里，⛔ 不靠事后过滤 —— A″ 格两次撑爆输出的教训）**：
`grep -rn` 于 lab 仓，`--exclude-dir=.git --exclude-dir=node_modules --exclude-dir=runs
--exclude=*.jsonl`，且 🔴 **`--exclude` 本格自己的两个产物**：
`docs/round2-bucket3-executed-plan.md`（本文件）与本格报告 `reports/2026-08-27-*.md`。
（A″ 格 H6 `q = 14 → 0` 的自污染教训：**量 lab 自己的登记面时判定面必须排除本格自己的产物**。）

① 本档只判【可实测事实】：处数。⛔ 不判「lab 登记面该怎么修」。
② 取值域：
   - `p = 0` ⇒ 🔴 **判定面为空，先按 `lab:N48` 证判定面非空再下任何结论**（⛔ 不许报「无缺陷」）
   - `p > 0, q = 0` ⇒ **零处知情**（A′ 格 9/0、A″ 格 13/0 的同形态，第三次）
   - `p > 0, 0 < q < p` ⇒ **部分知情**，须列出知情的是哪几处
   - `q = p` ⇒ 全部知情 ⇒ 本格**无登记面缺陷可交**
   - ⚠️ 🔴 **读数出现「每个文件恰好 N 次」这类不自然整齐 ⇒ 先当假阳查**（A″ 格「截断 16 次」教训）
   - ⚠️ **`p` 必须标口径名**：本格 `p` 取「**处数**」（grep 命中行数），
     ⛔ 不等于「份数」也不等于「出现次数」（A″ 格同一问得 78/78/103 三个数的教训）

### H5 —— 那道 must-hit 是不是一条「**死判据**」（原候选 A 的窄化残留）

`audit-stale-anchors.mjs`（活源 `:718` / pin `:612`）的 must-hit 守的是 `_archive/retrospection`，
而该目录属**桶一**（处方 §2 逐字「本轮不删任何一份」）。

- `t` = 在 pin `c1db57b8` 上**按处方桶三清单全删后**，该 must-hit 是否触发（EXIT）
- `t_ctl` = **阳性对照**：删掉 `_archive/retrospection` 整目录后是否触发

① 🔴 **本档只判【可实测事实】**：「按处方执行会不会触发它」。
   ⛔ **不判「该不该改那道 must-hit」/「该不该保留它」** —— 应然，lab ⛔ 不裁。
   （这正是 A″ 格 H1b 焊接的同型陷阱：技术强制 vs 规范应然，**本格预先拆开**。）
② 取值域：
   - `t = 触发` ⇒ 处方该步的前置加注**成立**
   - `t = 不触发` **且** `t_ctl = 触发` ⇒ 🔴 **加注前提不成立，且它是一条按处方永远走不到的判据**
     ⇒ 正好命中 DS 自己 `criteria-that-never-fire.md` 那个 pattern（⛔ 只交事实，不裁）
   - `t = 不触发` **且** `t_ctl = 不触发` ⇒ 🔴 **装置死了，判据返回空集不可采信**
     ⇒ 按 `lab:N48` 先证判定面非空，⛔ 不许报「不触发」
   - ⚠️ 🔴 **判定面可能本就为空**：桶三清单各项在 `c1db57b8` 上**已被删完**（§2.1 第 4 条）
     ⇒ 「再删一次」无对象。**此时必须改在 `71ac2711` 上做**（那里桶三目标齐全），
     并如实标「两 pin 的闸代码是否逐字相同」——⛔ 不同就不许把结论外推。

### H6 —— 基线：闸在 pin 上**本来**绿不绿

`g` = 在 pin `c1db57b8` 上**不做任何改动**跑 `node scripts/audit-stale-anchors.mjs` 的 EXIT。

① 只判可实测事实。② 取值域 `0` / `1` / 其它非零（含 128 ⇒ 前置塌）。
🔴 **必须先取 `g` 再取 `t`** —— 否则 `t` 无法归因（A′ 格「基线自己就现形过 ⇒ ⛔ 别当成自己注入的故障」的教训）。

---

## 4. 🔴 逐值指点表（跑前把每个读数的**所有**可能取值指到档）

| 读数 | 可能取值 | 落哪一档 |
|---|---|---|
| `a` / `b` / `d` | 0 · <登记 · =登记且名集同 · =登记但名集异 · >登记 · 目录不存在 | H1 六档表，逐档已写 |
| `c` / `c_l` | 同上（**起手预期落「>登记」**） | 同上 + **必须解释那个差** |
| `m` | 0 · 1 · ≥2 | H2 三档（`0` 先证判定面非空） |
| `s` | <5 · =5 · >5 | H3 三档（≠5 只报事实，⛔ 不推因果） |
| `p` | 0 · >0 | H4（`0` ⇒ 先证判定面非空） |
| `q` | 0 · 0<q<p · =p | H4 三档 |
| `t` | 触发 · 不触发 | H5 三档（含对照塌那一档） |
| `t_ctl` | 触发 · 不触发 | H5（不触发 ⇒ 装置死，读数作废） |
| `g` | 0 · 1 · 其它非零 | H6 三档 |

**⛔ 跑完后逐条对账：有没有落到本表指不到的地方。有 ⇒ 就是空档，如实登记。**

---

## 5. ⛔ 本格明确不做（预先划界）

1. ⛔ **不裁**桶三该不该删、DS 该不该按 lab 处方执行、多删的那几份该不该多删。
2. ⛔ **不裁**那道 must-hit 该不该改 / 该不该保留。
3. ⛔ **不催 DS**、⛔ 不代做第三个裁定块（`audit-doc-shape.mjs:29-40`，日期型重开条件 2026-09-01 到期，owner = DS）。
4. ⛔ **不重核**已定死项：A″ 格四条理由 · 三条重开条件 · 分母订正 · `declaredShareOfDocs = 0.1123`（token 比）。
5. ⛔ **不跑** `pnpm build` / `pnpm release`（含 `--dry-run`）/ `metrics/context-cost.mjs`。
6. ⛔ **不碰** pin 工作树、⛔ 不碰 DS 工作树、⛔ 不改 `provenance.pinnedSha`。
   隔离实测一律 `git archive` 导出到 `mktemp -d`，跑完 `rm -rf`。
7. ⛔ **不开** 候选 G（Grep 返回序机制，已判测不动）· ⛔ 不再投入 F（H3a 差 1）。
8. 本格**预期 0 个新 run · 0 个新量具 · 不用 golden set**（故不跑 freeze）。
   若中途需要 golden set ⇒ **先跑** `node metrics/golden-set-freeze.mjs --pin ~/.ai-ds-lab/pins/tvu-ds-c1db57b8`。

---

## 6. 收尾必交

1. **与本预注册逐条对账**：14 个读数逐个落档，**有没有空档**；⛔ 不事后改假设。
2. **逐档两问的兑现情况**：哪一档事后发现绑了两个判定 / 取值域没覆盖全（A′ 格 1 处、A″ 格 2 处，本格是第三次自查）。
3. **判断反转逐条交出**（A″ 格 3 次）。
4. **登记面缺陷**：lab 自己的 vs DS 的，分开记。
5. **收尾自证**：重取 DS HEAD + pin 落后数；判定面逐项扫完整落后窗口，证**无一项结论依赖过期读数**。
6. **交付前程序化自核**（A′ 格立、A″ 格连中同类错误 —— 都是引错行号）
   ⚠️ **自核脚本自己的期望值也要核，⛔ 别把它的红直接当结论。**
7. 四个 pin 收尾 `dirty = 0` 复证 · 临时目录已清理。
