# Q1 落地路径第 2 步 · 第一批（3 段）预注册

> owner 2026-09-04 已把 59 段全量预分类（Q1 小节），51 段判 `gate`。本文件钉住**第一批 3 段**的判据。
> ⛔ 判据先写死再动手。

---

## 0 🔴 先登记一个**队列自己的缺陷**：那份「逐段裁定」没有落盘

队列 Q1 小节逐字写着 51 段「**每条都写出了会让它判红的具体输入**」，
落地路径表把它们分成「**3B 那 14 段**」与「**3A 那 37 段**」。
**亲验（2026-09-07）：那份逐段清单在两个仓里都不存在。**

```
lab 仓 grep '3A\b' docs/*.md        ⇒ 只命中 decision-queue.md 自己那一行
lab 仓 grep -rn 'M-CARDINALITY'     ⇒ 只命中 decision-queue.md 那一行 + 一份 run 产物
```

⇒ 仓里留下的只有**聚合数**（37 / 14）和**一个被点名的段**（`#M-CARDINALITY`）。
「3A / 3B」这两个标签的定义、以及 51 段各自归哪一堆、各自的红输入是什么，**全部随上一轮的
上下文压缩丢了** ⇒ 本轮只能**重新导出**。

⚠️ 这与本仓已登记的病同族：复盘写「结论已回流到 X」是**自述不是事实**
（`metrics/retrospection-s2-claims.mjs` 存在的理由）。这次是同一形态的自指版本：
**队列自己声称完成的工作产物没有落盘**，于是「已判」不可复核。
⇒ 本批同时交付一份**落盘的**逐段裁定，⛔ 别再只把它留在对话里。

🔴 **2026-09-08 更正：上面这句承诺没有兑现。** 本文件原写的落点
`docs/2026-09-07-q1-unclassified-51-classification.md` **从未存在**（单跑 `ls` ⇒ No such file）
⇒ 这是同一个病的**第二次**发作：声称交付了落盘物，而落盘物只存在于承诺里。
真正落盘的是 **[`docs/2026-09-08-q1-unclassified-48-classification.md`](2026-09-08-q1-unclassified-48-classification.md)**
（池子从 51 收到 48 是因为 Q1-a/Q1-b 已落地）。

**顺带更正落地路径表的算术**：那张表写 `51 → 39 → 2`，是池子还是 **53** 时写的
（53−14=39、39−37=2，地板 2 = Q1-a/Q1-b）。而 Q1-a/Q1-b 已于 2026-09-07 落地 ⇒ 池子已是 51
⇒ 现在是 **51 − 14 = 37 → −37 = 0**。⛔ 别照那张表的 39 / 2 对账。

---

## 1 本批范围：design-process 的 3 段（⛔ 刻意只做形态完全相同的这一批）

亲验读数（`audit-acceptance-gate-coverage.mjs --list`）：51 段分布 =
`mockup-conventions 34 · design-process 12 · domain-tvu 5`。

本批取 design-process 里**与已 gated 的 `#M-LIFECYCLE-CRUD` 判据形态完全相同**的 3 段
—— 即「规则 Acceptance 首条自己用引号圈了一个必须落盘的段名」：

| 段 | Acceptance 首条（逐字） | 判据短语（逐字取自引号内） | Σ |
|---|---|---|---:|
| `#M-PRD-EG` | `Phase 0 mapping table 上方加 "**PRD examples scoped**" 段，逐条列出…` | `PRD examples scoped` | 2 |
| `#M-CARDINALITY` | `Phase 0 mapping doc 必含 "Cardinality self-check" 段，5 问 5 答` | `Cardinality self-check` | 2 |
| `#M-IA-FIRST` | `Phase 0 mapping doc 顶部必含 "IA 树" + "Selection model" 两段` | `IA 树` + `Selection model`（两个都要） | 2 |

**对照已 gated 的那条**：`CRUD` 的判据在 `scripts/audit-handoff-deliverable-sections.mjs`
`SECTIONS` 里逐字是 `{ id: 'CRUD', phrase: 'CRUD self-check', … }`
⇒ **本批是照抄一个已被 owner 认可的范式，⛔ 不发明新形态。**

⛔ **每段只有首条是判据** —— 三段的第二条（`命中"例如"直接 ask user` / `命中"问不清"立即 ask` /
`与用户 alignment 后才创建 first frame`）都是**行为**不是产物，本闸判不了。
这与该闸头注释逐字写的「每段只有**首条**是本闸的判据」「`[N]` 是变更探测的锚、不是覆盖度声明」一致。

⛔ **`**PRD examples scoped**` 的星号不进判据** —— 规则只用引号圈了短语、没规定强调形态；
要求 `**` 就是发明格式（同该闸头注释逐字封的「升格成 `^#{1,6}\s+.*Reference probe` 就是发明格式」）。

---

## 2 落地要动两处，第二处是本批的**真代价**

亲验：本闸 `--all` 的扫描面在 DS 仓命中 **1 份**，就是
`templates/consumer-product/docs/handoffs/_handoff.template.md`，它含 `CRUD self-check`、
**不含**本批三段任何一个短语。

⇒ 只加判据 ⇒ 模板当场红 ⇒ **全仓提交被拦**。
⛔ **正解不是放宽判据，是把三段加进模板** —— 那正是队列已登记的
「给 handoff 族上闸，在 DS 仓守的是**模板不回退**那一层」。

⚠️ **这不是新的摩擦取舍**（⛔ 不进 C 档）：三条规则的 Acceptance **本来就写着「必含」**，
闸只是让一个既有要求变得可见；且消费仓不装 githooks（owner 2026-08-31 拍定）
⇒ 边际代价 = 模板多 4 个待填段。修法唯一 ⇒ A/B 档。

---

## 3 判据（⛔ 跑之前写死；每条要两侧）

### P1 · 三段各自会红并**单独**点名
拿一份缺该段的 handoff 文本喂 `findMissingSections`：
- 缺 `PRD examples scoped` ⇒ 恰好 1 条 missing，`id` 为 `PRD-EG`
- 缺 `Cardinality self-check` ⇒ 恰好 1 条，`id` 为 `CARDINALITY`
- 缺 `Selection model`（`IA 树` 在）⇒ 恰好 1 条，`id` 逐字为 `IA-FIRST:Selection model`
  （⛔ 不连坐 —— 照 M35 那条已有的「缺哪行点名哪行」语义）
- 缺 `IA 树`（`Selection model` 在）⇒ 恰好 1 条，`id` 为 `IA-FIRST`

### P2 · 不误报
- 三段都在的文本 ⇒ **0 条**
- 段名写在 ``` 围栏里 ⇒ 仍算缺（`stripFences` 既有语义，⛔ 本批不许改它）
- 大小写不敏感（既有语义）

### P3 · 模板补段后闸转绿，且**真的是靠模板补段转绿的**
`node scripts/audit-handoff-deliverable-sections.mjs --all` ⇒ **EXIT=0** 且 `交付物 1 份`。
**造故障**：从模板里删掉 `Cardinality self-check` 那段 ⇒ **EXIT≠0** 且逐字点名该段
⇒ 证明绿不是因为判据没接上。

### P4 · 棘轮从 51 收到 48，且 BASELINE 只许收到现取值
`node scripts/audit-acceptance-gate-coverage.mjs` ⇒ EXIT=0，
`unclassified` **51 → 48**，`gated` **32 → 35**，`BASELINE_UNCLASSIFIED` 同步收到 **48**。
⛔ 不许把 BASELINE 留在 51（那样这批兑现量没被锁住，别人把自陈删回去闸照样绿 —— S2 的原话）。

### P5 · `[N]` 对账
三行自陈都写 `[2]`（Σ 由闸自己算出，见 §1 表）。**造故障**：把一行写成 `[3]`
⇒ `[S4]` 必须逐字印出「逐字有 2 个、自陈 3 个」。

### P6 · 该闸既有两份测试零回归
`tests/audit-handoff-deliverable-sections.test.ts` + `…-cli.test.ts` ⇒ 全绿；
若因 `SECTIONS` 变长而失败，**先看它断言的是什么**：
⛔ 如果它断言「SECTIONS 恰好 4 条」，那是**要改测试**（本批确实加了）；
⛔ 如果它断言的是判据行为，那就是我改错了 —— ⛔ 不许为了让测试绿而改判据。

### P7 · 全量回归
`pnpm test` ⇒ 零新增失败（基线 3221 passed）。

### P8 · 还原后零残留
每次造故障后 `cmp` / `git diff` ⇒ 逐字一致。

---

## 4 ⛔ 本批不能说的话

- ⛔ 不许说「handoff 族已上闸」—— 本批只关了 3 段里各自的**首条**，且 DS 仓的分母是
  **1 份模板**。真 handoff 全在消费仓、那边不装 githooks ⇒ 守住的是**模板不回退**。
- ⛔ 不许说「Q1 第 2 步做完了」—— 本批 3 段，第 2 步是 14 段。
- ⛔ 不许说「51 段的逐段裁定已恢复」—— 本批交付的清单覆盖 design-process + domain-tvu
  那 17 段的重导出；mockup-conventions 那 34 段仍待逐段读。
