# 预注册：M 格 —— 复核 `ce3fd7e7` 新判的 **13 段 gated** 的【自陈质量】

> 落盘时间：2026-08-27 18:3x · lab HEAD 起手 `c9e0227`（clean，单 remote `origin`，与 `origin/master` 同 sha）
> 🔴 **DS HEAD 起手 `1c108de8`** —— ⛔ **不是交接单写的 `ce3fd7e7`**：第 10 次交接**又漂了**（L 格那次零漂是唯一一次）。
>   ⚠️ 但**本次漂没有命中判定面**（见 §4 锚 A0）—— ⇒ 第 29 条推论五补一个**反向数据点**：
>   「漂了」与「判定面动了」是两件事，**每次都得逐次 diff 才知道是哪种**；
>   ⛔ 不许由「漂了」推「读数作废」，也⛔ 不许由「起手没漂」推「不用查」。
> 入口：用户在本 session 起手五候选里**挑定候选 5**（⛔ 不是 lab 自己开的格，§8 单向纪律）
> ⚠️ **本轮候选编号 ≠ §28.10 / §28.11 / §28.12 的候选编号**（§18.7 同族，K / L 两格均已实证撞过）
> 被验对象：**DS 侧**（`ce3fd7e7` 新写的 **14 行 `covers-acceptance` 自陈** + 闸的 S4 判据）
> 立格依据：`docs/round2-status.md` §28.12 收尾表逐字登记的 **L3-v5 / L3-v7b 两行「面变大」**
> ⚠️ **编号用 `M1–M5`，⛔ 不用 `L*` / `K*` / `J*`** —— 同名会撞面（第 26 条推论二 / 第 27 条推论二同族）

---

## 0. 一句话命题

🔴 **起手勘察已确立一条把本格价值顶起来的事实**（⛔ 它不是假设，是 `git diff --name-only` 的穷举读数）：

`60d644a0 → ce3fd7e7` 改了 **17 个文件**，其中落在闸 `SCAN_FILES` 7 份规则真源上的是 **0 个**。
⇒ 那 **13 段**从 `unclassified` 变成 `gated`，**规则原文一个字节都没改**、核查项一条都没增减；
唯一发生的事情是**有人往 11 个闸的头注释里新写了 14 行 `// covers-acceptance: <id> [N]`**。

⇒ **命题**：棘轮 `83 → 70` 那 **13 段兑现量，全部由这 14 行注释承载**。
除了「注释是这么写的」以外，**闸没有任何独立于自陈的证据**能支持这 13 段真的被覆盖。
那么 —— **这 14 行自陈本身，有没有质量问题？闸的 S4 兜不兜得住它写错？**

⚠️ **本格价值不在推翻这 13 段** —— 判「14 行全对、S4 兜得住」同样是结论
（那就把 §28.11 的「兑现即锁定」从**机制成立**升到**本批兑现已核**）。
⛔ 真正不可接受的是：**§28.12 已据 `70` 下了「BASELINE 跟着降 ⇒ 补上棘轮半个缺口」这个正面结论，
而 `70` 的成立完全依赖这 14 行注释，至今没有任何人验过它们。** —— 结论又一次比基数走得远（与 L 格 `83` 同型）。

---

## 1. 口径（⛔ 全部跑前写死）

### 1.1 判定面与时点（🔴 每栏写死 sha，⛔ 不许用「现行」）

| 面 | 定义（写死） | 时点 | 起手实测 |
|---|---|---|---|
| **GATE″** | `scripts/audit-acceptance-gate-coverage.mjs` | @`1c108de8` | **416** 行 · `ACC_RE` 逐字未改 · `BASELINE_UNCLASSIFIED = 70`（`:127`） |
| **GATE′** | 同上（对比栏，= L 格主裁定时点） | @`60d644a0` | **414** 行 |
| **DECL″** | `scripts/*.mjs` 头 **60 行**内的 `covers-acceptance:` 自陈 | @`1c108de8` | 🔴 **20 条 / 11 文件**，**全部带 `[N]`，NULL = 0 条** |
| **DECL′** | 同上（对比栏） | @`60d644a0` | **6 条 / 4 文件** |
| **G13** | `classify()` 判 `gated` 的段集合 @`1c108de8` **减去** @`60d644a0` 的同集合 | 差集 | 🔴 **新增 13 段 · 移出 0 段** ⇒ 单向 |
| **CLAIM14** | 指向 `G13` 的自陈条 | @`1c108de8` | **14 条**（2 段各带 2 条：`mockup-conventions.md#Acceptance~9`） |
| **SEC118** | `parseAcceptanceSections()` 的输出全集 | 两 sha 均 | **118 段**（⛔ 两 sha 相同 —— 真源未改） |
| **ALLOW** | `figma-data/audit-allowlist/acceptance-not-machine-checkable.json` | @`1c108de8` | **14 条 entry / 30 段**（⛔ 两 sha 相同，L2 结论沿用） |

🔴 **主裁定时点 = `1c108de8`**（= DS 现行 HEAD）。
⚠️ **收尾必须再重取一次 DS HEAD**（第 29 条推论五：`起手 X → 止 Y` 两栏**只有收尾真取了才能填**）；
若漂且 diff 命中上表任一面 ⇒ **重跑该面并对 diff**。

### 1.2 判定单元（⛔ 处数 ≠ 行数 ≠ 出现次数 ≠ 条目数 ≠ 段数 ≠ 被覆盖数）

- **1 条自陈** = 1 行匹配 `COVERS_RE` 的注释 ⇒ 起手 **20**（⛔ 不是 20 段：`G13` 是 **13 段 / 14 条**）
- **1 段 gated** = `classify()` 判 `gated` 的段 ⇒ 起手 **18**（13 新 + 5 旧）
- **1 个核查项**（闸口径）= `countCheckItems()` 的输出 = 顶层 `- ` 行按 `·` 切出的份数
- **Σ（闸口径）** = 段内**顶层列表项**核查项之和，**列表撞到第一个顶层散文行即止**
- **Σ（语义口径，lab 侧）** = 见 §1.3 M1，**独立于闸的枚举器**重数（第 29 条硬要求）
- **1 条自陈质量缺陷** = 一个具体的**书写/口径**问题，且**给得出它在 `1c108de8` 上的实测处数**
  ⛔ 「理论上可能写错」不计；必须落到这个 tree 上的真实读数

### 1.3 五档各自的判据（⛔ 跑前写死）

#### M1 · Σ 的**分母复核**（第 29 条正面对撞）

闸的 S4 拿 `actual = Σ(闸口径)` 去比 `[N]`。**`Σ` 本身来自一条模式匹配**（`ITEM_RE` + 段边界规则）
⇒ 按第 29 条，**必须用更宽的模式独立再数一遍**，差额**逐处定案**。

- 宽口径 `Σ_wide` 至少放宽四处，**每处单独出一栏读数**（⛔ 不许合并成一个总数）：
  - **W1** 不在「顶层散文行」处截断，拖到**下一个 heading / 下一个 Acceptance** 才止
  - **W2** 收**缩进的** `- [ ]` / `- ` 子项（闸的 `ITEM_RE` 用 `^- ` 锚定，缩进行被 `/^\s/ continue` 跳过）
  - **W3** 收**表格行**（`| … |`）形态的核查项
  - **W4** `·` 之外再认 `、` / `；` / `,` 这类并列分隔（⚠️ **W4 预期高假阳**，只报候选、⛔ 不定案）
- **逐段定案**：`Σ_wide − Σ` 的每一处差额，回读原文判**三态**：
  🟢 **闸对**（差额是假阳，如 fence 内 / 做法层注记） · 🔴 **闸漏**（差额是真核查项） · 🟠 **不可判**（需裁规则内容，§8 ⇒ 落 owner）
- ⛔ **分桶后必须抽查兜底桶**（第 29 条推论一）：把差额分桶后，「其它」桶**逐行抽查**，⛔ 不许当噪声丢掉

#### M2 · `[N]` 锚的**鉴别力**（🔴 已有一个起手读数指向缺陷）

`N` 的定位（DS 自己写死在 tracker 里）：「从**覆盖度声明**变成**变更探测的锚**」。
⇒ 判据 = **这个锚在两种扰动下能不能报警**：

- **扰动 A（改内容）**：往段里**加/删一条核查项** ⇒ Σ 变 ⇒ S4 应红
- **扰动 B（改指向，= L3-v5 那条）**：`~N` 序号位移使 `target` 落到**另一段** ⇒ 若新段 Σ 恰等于 `[N]` ⇒ **S4 静默**

🔴 **起手已测得的 Σ 分布（全 118 段，⛔ 这是全档，非抽样）**：

| Σ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
| 段数 | 7 | 2 | 14 | **55** | 21 | 9 | 3 | 4 | 2 | 1 |

（合计 118 ✅）⇒ **Σ=3 占 55/118 = 46.6%**，而 **20 条自陈里有 5 条写 `[3]`**。
⇒ **预登记假设 H2**：`[3]` 这档锚在扰动 B 下**碰撞率 ≈ 46.6%**，接近「掷硬币」。
⚠️ ⛔ **不许只报碰撞率就收工**（第 29 条推论三）—— 必须给出**它在哪些锚上有鉴别力、哪些上没有**，
并判**闸有没有机制区分二者**。没有 ⇒ 那才是要报的缺陷。

#### M3 · 那 **4 条 `[0]`**（用户点名项）

起手实测：`[0]` 共 **4 条**，落在 **3 段**上 ——
`mockup-conventions.md#Acceptance~9`（`:1993`，**2 条**） · `#C5`（`:431`） · `#M-DISCIPLINE.SYNC`（`:3111`）。

- **M3a**：这 3 段是不是真的**零核查项**？⇒ 跑 M1 的 `Σ_wide`，若 `Σ_wide > 0` ⇒ **`[0]` 是假声明**
- **M3b**：`[0]` 到底是**退化锚**还是**最灵敏的锚**？
  🔴 **预登记：我起手的直觉是「`[0]` 最弱」，但 Σ 分布说 `Σ=0` 只占 7/118 = 5.9% ＜ `[3]` 的 46.6%
  ⇒ 单看碰撞率，`[0]` 反而比 `[3]` 强。⛔ 本档必须真跑注入，不许照抄 §28.12 那句「同样兜不住改指向」。**
  （§28.12 原话是在 **v5 改指向**语境下说的，⛔ 不能外推成「`[0]` 在所有扰动下都无效」——
  这正是第 29 条推论三：一处对不等于处处对，一处错也不等于处处错。）
- **M3c**：`[0]` 段被 gated 的**语义**是什么 —— 「这段有 0 个核查项，而某个闸覆盖了这 0 个」？
  ⇒ 判**这句声明是否可证伪**。不可证伪 ⇒ 它在棘轮里贡献了 3 段兑现量却**零信息**（⛔ 这是可判的，非规则内容）

#### M4 · v7b 的**实害升级**（用户点名项）

§28.12 判过：段边界收窄在 `domain-tvu.md#M17` 上**正确**、在 `AGENTS.md#Jira` 上**错误**，共 **6 段 / 17 条**少收。
`ce3fd7e7` 之后，其中 `#M23.14`（`[5]`）与 `#M-INTEGRITY`（`[6]`）**已 gated 且带 `[N]`**
⇒ 少收从「只影响计数」升级为**直接进 S4 的 Σ**。

- **M4a**：逐字取这两段被边界收窄**截掉的尾部**，判截掉的是**真核查项**还是**做法层注记**（三态，同 M1）
- **M4b**：若是真核查项 ⇒ **`[5]`/`[6]` 本身就是低报的数** ⇒ 注入实证：**往被截掉的尾部加一条核查项**，
  预期 **S4 恒不红**（因为闸根本看不见那片区域）⇒ 那 `[N]` 对**段尾是结构性盲区**
- **M4c**：给**对照臂** —— 同一段**顶层区域**加一条 ⇒ 预期 S4 红。⛔ 两臂都要有，恒红/恒绿 = 零信息

#### M5 · **两端声明的一致性**（机械可判，⛔ 不裁规则内容）

DS 自己写死的分类判据（tracker 逐字）：「**两端各有声明才判 `gated`**：① 规则原文点名了闸 ② 闸头注释也声明它 enforce」。
⇒ lab 可**独立机检 ①**，且 ①②**必须指向同一个闸**：

- **M5a**：`G13` 的 13 段原文里被点名的闸名 **vs** 该段 `covers-acceptance` 那条自陈所在的闸文件 ⇒ **是否同一个**
- **M5b**：被点名的闸**是否真实存在**（`scripts/*.mjs` + `package.json` 的 npm key 两路各查一遍）
- **M5c**：13 段里有几段**原文根本没点名任何闸**（⇒ ① 不成立，DS 自己的判据被违反）
- ⛔ **不判**「这段规则该不该由那个闸管」（= 规则内容，§8）—— 只判**两端写的是不是同一个东西**

---

## 2. 假设与分档（🔴 跑前写死，⛔ 事后不许改档）

| # | 预登记假设 | 判成立的读数 | 判不成立的读数 |
|:-:|---|---|---|
| **H1** | `Σ(闸口径)` **低报**至少 1 段（M1） | 存在 ≥1 段 `Σ_wide > Σ` 且差额定案为「真核查项」 | 13 段全部 `Σ_wide == Σ`，或全部差额定案为假阳 |
| **H2** | `[3]` 档锚**鉴别力接近掷硬币**（M2） | 扰动 B 下 `[3]` 的实测碰撞段数 ≈ 55/118 量级 | 实测碰撞远低于此（⇒ 位移不是均匀落点，需改判据） |
| **H3** | `[0]` **不是**最弱锚（M3b，🔴 与 §28.12 表述相反的方向） | `[0]` 在扰动 A 下红、且碰撞率 < `[3]` | `[0]` 在扰动 A 下也不红 ⇒ 真退化 |
| **H4** | `#M23.14` / `#M-INTEGRITY` 的 `[N]` **对段尾恒盲**（M4b） | 尾部注入 ⇒ `REAL_EXIT=0`；顶层注入 ⇒ `REAL_EXIT=1` | 两臂同色 ⇒ 读数作废，先查探针（第四种 0） |
| **H5** | 13 段里 ①② 两端**至少 1 段对不上**（M5） | ≥1 段点名闸 ≠ 自陈闸，或原文零点名 | 13 段全部两端一致 ⇒ DS 判据执行到位（**这是正面结论，照报**） |

⛔ **五条假设全不成立也要照报** —— 那就是「14 行自陈质量合格」，直接把 §28.12 的正面结论坐实。

---

## 3. 对照臂（第 25 条硬要求，⛔ 恒红 / 恒绿 = 零信息）

| 档 | 对照臂设计 | 恒红 / 恒绿的判定 |
|:-:|---|---|
| **M1** | `Σ_wide` 必须在**已知该等于 Σ 的段**上等于 Σ ⇒ 取 5 段**旧 gated**（L 格已逐段核过）当阴性对照 | 若 `Σ_wide` 在旧 5 段上也全部 > Σ ⇒ 宽口径过宽，⛔ 读数作废 |
| **M2** | 扰动 A（该红）与扰动 B（可能不红）**两臂并排**，每条自陈各跑一遍 | 若扰动 A 也不红 ⇒ 先查探针是否落在目标段（第 29 条推论二） |
| **M3** | `[0]` 段做扰动 A ⇒ **应红**；另取一段 `Σ=0` 但**未 gated** 的段做同样注入 ⇒ **应不红**（无自陈无 S4） | 两者同色 ⇒ 注入没落到目标面上 |
| **M4** | M4b（尾部，应不红） vs M4c（顶层，应红），**同一段内**两臂 | 同色 ⇒ ⛔ 读数作废，回读原文结构再定位（L 格 v5 连错三次的教训） |
| **M5** | 判据须能在**已知该红**的输入上变红 ⇒ 造一条「自陈闸名故意写错」的输入验敏感 | 造错也判「一致」⇒ 恒绿，⛔ 读数作废 |

🔴 **注入类实证的统一前置（第 29 条推论二，⛔ 不许跳过）**：
每次注入**先打印探针自己的 `id` / 行号 / 所属段**，证明**探针真的落在目标面上**，才允许读结果。
⛔ 「结果为 0」在没有这一步之前**不算读数**。

---

## 4. 交叉验证锚

🟢 **锚 A0 已对上（起手前置自查，第 27 条推论一）—— 🔴 本格立了 8 个新锚，全部逐字取自被验方自己的文字**
（第 29 条推论五：**装置原锚绑定特定时点对，换区间必另立锚**；`runs/acceptance-gate-recheck/run.mjs` 的
3 个锚写死 `f15c8500→60d644a0`、`runs/gate-residual/l3-criteria.mjs` 的锚写死 `118/5/30/83` ⇒ **两者对本格都已失效，⛔ 不复用**）。

锚源 = DS `docs/internal/STATUS-CHANGELOG.md`@`1c108de8` 逐字：
`扫描面 7 份 · Acceptance 段 118 · 闸自陈 20 条 · 豁免 14 条 · gated 18 · not-machine-checkable 30 · unclassified 70（BASELINE 70）`
+ `ce3fd7e7` commit subject 逐字：`再判 13 段 gated（83→70）`

| 锚 | DS 自陈 | lab 独立复现 @`1c108de8` | |
|:-:|---|---|:-:|
| **N1** | 扫描面 7 份 | 7 | 🟢 |
| **N2** | Acceptance 段 118 | 118 | 🟢 |
| **N3** | 闸自陈 20 条 | 20 | 🟢 |
| **N4** | 豁免 14 条 | 14 | 🟢 |
| **N5** | gated 18 | 18 | 🟢 |
| **N6** | not-machine-checkable 30 | 30 | 🟢 |
| **N7** | unclassified 70 = BASELINE 70 | 70 / 70 | 🟢 |
| **N8** | 再判 **13** 段 gated | 差集 **+13 / −0** | 🟢 |

⇒ **8 锚全绿，新读数可用。** 附带：S4 `mismatches = 0` · `dangling = 0` · `stale = 0` · `contradictory = 0`
（⇒ 闸自己在 `1c108de8` 上**全绿** —— 本格要问的正是**这个绿有多少含金量**）。

🟢 **锚 A0′ —— 本次交接漂移【未命中判定面】的穷举证据**：
`git diff --stat ce3fd7e7 1c108de8` 全仓**只有 4 个文件**（`docs/STATUS.md` · `docs/internal/STATUS-CHANGELOG.md` ·
`docs/internal/retrospection/2026-08-27-e-restatement-that-redefines-a-term.md`（新增） ·
`.../design-spec-canonical-alignment-tracker.md`），且：
`SCAN_FILES` 7 份与这 4 个**零交集** · `scripts/*.mjs` **零改动** · `ACC_RE` / `BASELINE` 逐字未改 ·
闸文件行数 `416 → 416`。⇒ **§28.6–§28.12 全部结论在 `1c108de8` 上原样有效。**
⚠️ 这条用的是 `git diff` 的**全量文件清单**（穷举），⛔ 不是模式匹配 —— 分母本身不需要再证。

---

## 5. ⛔ 边界（§8 单向纪律，跑前声明）

1. ⛔ **不改 DS 一个字节** —— 全程在 `git archive` 导出的 tree 副本上操作，⛔ 不碰 DS 工作树
2. ⛔ **不跑 DS 的 CLI / `vitest` / `pnpm build` / `pnpm release`**（与 §28.6–§28.12 各格一致，保持可比）
   ⇒ 装置一律 **import 闸导出的纯函数 + lab 侧实现变体判据**（= L 格 `l3-criteria.mjs` 的体例）
3. ⛔ **不在四个 pin 上跑 `pnpm build`**（`lab:E48`）· ⛔ 不改 `provenance.pinnedSha`（`lab:E46`）
4. ⛔ **不重跑** `metrics/context-cost.mjs`；用 golden set 前必跑 `metrics/golden-set-freeze.mjs --pin …c1db57b8`
5. ⛔ **不裁规则内容** —— ⛔ 不判「这 13 段该不该有闸」「那个闸该不该管这条规则」「`[N]` 该取几」；
   M1 / M4a 的差额若需语义裁定 ⇒ 一律落 **🟠 不可判 · 落 owner**，⛔ 不代拍
6. ⛔ **不重开 K1 / K3 / L 格交回的三个 owner 决策点** —— 原样不动，⛔ 不找第五条通道
7. ⛔ **lab 不代执行方勾验收**（本 session 候选 2 的边界问题原样保留，本格不碰）
8. ⛔ **不改 `runs/acceptance-gate-recheck/run.mjs` 与 `runs/gate-residual/*.mjs` 的原锚** ——
   它们绑定各自时点对、**在本格区间上本就该报作废**；本格另立 `runs/gated-claim-quality/` 新装置

---

## 6. 预登记的未覆盖（跑前先写，🔴 且必须写明**降级损失的是哪个量**，第 27 条）

1. ⛔ **`Σ_wide` 的 W4（`、`/`；`/`,` 并列）只报候选、不定案** ⇒ 损失**并列型核查项的计数精度**；⛔ 不影响 W1–W3 的定案
2. ⛔ **只复核 `G13` 这 13 段 + 5 段旧 gated 作对照** ⇒ 损失**其余 100 段的自陈面**（那 100 段本就无自陈，⛔ 不宣称「自陈已全面复核」）
3. ⛔ **仍不复核闸的测试文件**（`tests/audit-acceptance-gate-coverage-cli.test.ts`，`ce3fd7e7` 改了它 6 行）
   ⇒ 损失**回归钉正确性面**（= 本 session 候选 4 的一档，本格不点）
4. ⛔ **不 live 核 Figma** ⇒ 损失被点名的那些 mockup 闸「在真实 Figma 上是否真能执行」的**实证面**（lab 够不到）
5. ⛔ **M5 只判「两端指向是否同一个」，不判「闸是否真的 enforce 了那条规则」** ⇒ 损失**覆盖真实性面**（需读 11 个闸的实现，且判定含规则语义，§8）
6. ⛔ **L 格自留六档除 v7b 那两段外原样保留**（b 档 35 段 · v6 一处 `·` · L3 其余面 · L4 第三个数）
7. ⛔ **本 session 候选 1 / 2 / 3 / 4 全未碰**；§28.10 / §28.11 / §28.12 其余未覆盖条**原样保留**
8. ⛔ **K1 / K3 / L 格三个 owner 决策点 · F104 两件 · 两个 hold · `audit-doc-shape.mjs` 日期型重开条件（2026-09-01，owner = DS）** —— 原样保留

---

## 7. 产出与回改（跑前写死落点）

- **报告**：`reports/2026-08-27-round2-gated-claim-quality.md`
- **装置**：`runs/gated-claim-quality/m1-m5.mjs`（用法 `DS_TREE=<导出目录> node …`，8 个新锚内建 fail-closed）
- **回改**（第 25/26 条：判出的每条「对方已做/已裁/已证伪」必须回改到**对方会读的那份文件**，且先看有没有栏位承载）：
  - `docs/round2-status.md` 新增 §28.13 + 回改 §28.12 收尾表里 L3-v5 / L3-v7b 两行
  - `proposals/2026-08-27-designqa-gate-gap.md` —— **先看有没有栏位承载**；无则新增节，原文留痕
  - `AGENTS.md` 第 29 条 —— 仅在判出**新纪律**时加推论，⛔ 不为凑数加
- **收尾硬动作**：重取 DS HEAD 填「止」栏（第 29 条推论五）+ 报「至少 N 处」并给精确率/召回率（推论六）
