# 预注册：J 格 —— 补掉 I 格自己登记的**两档未覆盖**（次判定面逐条裁定 + 跨行分布命题）

> 落盘时间：2026-08-27 15:5x · lab HEAD 起手 `5883444`（clean，单 remote `origin`）
> 入口：用户在本 session 起手四候选里**挑定候选 3**（⛔ 不是 lab 自己开的格）
> 被验对象：**lab 自己**（`reports/*.md` 的次判定面 × `docs/round2-status.md` 的跨行形态）
> 立格依据：§28.9「⛔ 28.9 未覆盖」第 **1、2** 条 —— I 格**自己写下的**两个口子
> ⚠️ **编号用 `J1–J8`，⛔ 不用 `H1–H8`** —— I 格已占用 H 编号，同名会撞面（第 26 条推论二同族）

---

## 0. 一句话命题

I 格（§28.9）在 P = `docs/round2-status.md` 上跑完了 18 条语义命题的回改三态，
但**自己登记了两档没跑**：

1. ⛔ **次判定面 S = `reports/` 26 份（34 行候选）只登记基数、未逐条裁定**
2. ⛔ **跨行分布的命题**（主语与谓语不在同一行）单行 AND-grep 结构性抓不到
   ⇒ I 格 H5 那「31% 召回缺口」之外**还有一档未知缺口**

🔴 **本格命题**：这两档里**有没有 I 格漏掉的真命题**？
—— 若有，I 格的 `N₁ = 18` 与「一次筛召回率」都是**低估**，须给修正值；
若没有，则 I 格「只登记基数」的决定被**证成立**（⛔ 这也是结论，不是失败）。

⚠️ **本格价值不在「多数出几条」，在给 I 格那两个自认的口子一个可判读的读数** ——
⛔ 「未覆盖」挂着不动，和「跑完发现是 0」是两件事，后者才关得掉。

---

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

### 1.1 判定面与时点（🔴 自指污染 ⇒ 必须双栏，§28.9 已实证）

| 面 | 定义（写死） | 时点 | 起手实测基数 |
|---|---|---|---|
| **S₃₄** | `git ls-files 'reports/*.md'` 两级筛候选行 | @`01b6589`〔I 格交付前〕 | **34 行** / 15 份命中 / 26 份总 |
| **S₄₈** | 同上判据 | @`5883444`〔现行〕 | **48 行** / 16 份命中 / 27 份总 |
| **X** | P = `docs/round2-status.md` 的 k 行窗口跨行候选 | @`01b6589` | k=2 **18 对** · k=3 **33 对** |

🔴 **主裁定面 = S₃₄**（= I 格逐字登记的那一面，⛔ 为可比性必须取同一时点）。
**增量 `48 − 34 = +14` 行 / `+1` 份 = 100% 来自 I 格自己那份报告**
（`reports/2026-08-27-round2-writeback-gap.md`，实测 `grep -c` = 14）⇒ 单独作**自指档**登记，⛔ 不混入主裁定。

### 1.2 判定单元（⛔ 处数 ≠ 行数 ≠ 出现次数）

沿用 I 格 §1.2 **逐字同一口径**（⛔ 不改判据，否则与 I 格读数不可比）：
**1 处 = 一个「〔对方主语〕已完成〔某动作〕」的语义命题**，无论占几行、复述几次。

- **主语集（写死，9 项）**：`DS` · `owner` · `Owner` · `对方` · `DS session` · `DS 侧` · `R1` · `R2` · `R3`
- **谓语集（写死）**：逐字抄 `docs/round2-writeback-gap-plan.md` §1.2 @`12e67ef`，⛔ 一字不改
- **机械筛只产候选行**，每条由我**逐条裁定**再归并成「处」

### 1.3 跨行判据（本格新增，⛔ 与 I 格判据是**互补**关系不是包含关系）

`crossline.sh <tree-ish> <path> <k>`：主语行集 × 谓语行集做 k 行滑动窗口 AND，
**并扣掉单行已命中的行**（`both`）⇒ 输出的每一对都是**单行 AND-grep 结构性抓不到**的。

⚠️ **`k` 的语义写死**：窗口跨度 `d ∈ [1, k)`。k=2 = 仅相邻行；k=3 = 相邻 + 隔一行。**k=3 ⊇ k=2**。
🔴 **本格承诺 k=3 全量 33 对逐条裁定**（⛔ 不留「只登记基数」的残档 —— 那正是 I 格留下本格的原因）。

### 1.4 🔴 起手前置自查撞出的**两条判据 bug**（⛔ 必须登记，否则 18/33 不可信）

| # | bug | 症状 | 虚高倍数 | 修法 |
|:-:|---|---|:-:|---|
| 1 | `comm -12` 要**字典序**，我喂了 `sort -n` | `both` 恒得 **0**（与 I 格 29 行矛盾） | — | 改 `awk 'NR==FNR{a[$1];next}($1 in a)'` |
| 2 | awk **引用即创建** —— 写 `p[j]` 会凭空建出 key `j` | 第二个 `for(i in p)` 遍历到幽灵 key，输出 `1344=>1345`〔1344 是**空行**〕 | k=2 **79→18**（4.4×）· k=3 **175→33**（5.3×） | 全改 `(j in p)` / `(i in b)` |

✅ **两条修完后的交叉验证**：`both` 回到 **29**，与 I 格「一次筛 29 行候选」**逐位相同**
⇒ 这是我的计数器与 I 格对齐的程序化证据（§18.7，⛔ 不是「我说一致」）。
⚠️ bug 1 的症状（恒 0）本该被 `lab:N48`「判据返回 0 先证判定面非空」拦住 —— 本格实测**它确实拦住了**。

---

## 2. 假设与取值域（跑前写死；⛔ 取值域是笛卡尔积，不是单臂值域 —— 第 25 条推论一）

### J1 · S 面基数
S₃₄ 的 34 行候选归并后的语义命题数 `N_S` = ?
**取值域**：`N_S` ∈ {0 · 1–5 · 6–10 · 11–15 · 16–20 · >20}
⚠️ 若 `N_S = 0` ⇒ 先证判定面非空（`lab:N48`；34 行已实测非空），⛔ 不许直接写「无缺口」。

### J2 · 🔴 本格核心一：S 面命题 vs I 格 P 面 18 条
`N_S` 每条归入二档之一：
- **复述档** = 该命题在 I 格 P 面 18 条里**已有对应**（`reports/` 只是它的镜像）
- **新命题档** = P 面 18 条里**没有** ⇒ **I 格真漏掉的那一档**

**取值域**：新命题数 ∈ {0 · 1–2 · 3–5 · 6–10 · >10}
**判读规则（跑前写死，⛔ 不许事后改）**：
- `= 0` ⇒ I 格「只登记基数」**无信息损失**，其决定被证成立 ⇒ §28.9 未覆盖第 1 条**可关闭**
- `≥ 1` ⇒ I 格 `N₁ = 18` 是**低估**，须在 §28.9 就地给修正值

### J3 · 新命题（若 J2 ≥ 1）的回改三态
沿用 I 格 H3 口径，在 T = `proposals/` **全 9 份**上跑完（⛔ 无 `head`/`-m`，第 25 条推论二）：
**a** 已回改 · **b** 未回改（正文零处提及）· **c** 半回改（提了但原推荐没改掉）
**取值域**：各 ∈ {0 · 1 · 2 · 3 · 4 · 5 · >5}
⚠️ 若 J2 = 0 ⇒ 本档**无对象**，如实写「不适用」，⛔ 不许硬凑数。

### J4 · 危害分级（只对 `b` + `c`）
沿用 I 格 H4 三档：🔴 重（处方仍推荐已被证伪的路 ⇒ DS 白干）· 🟡 中（已做完的事仍列待做 ⇒ 重复劳动）· 🟢 轻（登记面噪声）
**取值域**：各档 ∈ {0 · 1 · 2 · 3 · >3}
🔴 **第 26 条推论三硬要求**：报缺口时**必须并排报 `a` 那一栏**，⛔ 单栏读数不携带判别力。

### J5 · 🔴 本格核心二：跨行档裁定
k=3 全量 **33 对**逐条裁定 ⇒ 真跨行语义命题数 `Y`（⛔ 33 是候选对数，不是处数）
**取值域**：`Y` ∈ {0 · 1–3 · 4–8 · 9–15 · >15}
并分报：`Y` 里**已被 I 格 18 条覆盖**的（换个面又抓到同一条）vs **I 格完全没有**的。

### J6 · I 格 H5「31% 召回缺口」的修正
I 格 H5：一次筛 **29** → 二次筛 **38**（+9 = 31% 缺口），⛔ 且已声明跨行档在 38 之外。
本格 ⇒ 总候选 = `38 + Y_new`（`Y_new` = J5 里 I 格完全没有的那部分）
一次筛真实召回率 = `29 / (38 + Y_new)`
**取值域**：修正后召回率 ∈ {>75% · 60–75% · 45–60% · <45%}

### J7 · 🔴 对照臂（第 25 条**硬要求** —— 四格必须对角，⛔ 恒红/恒绿 = 零信息）

探针写死：
- **探针 T1（真跨行）** = P@`01b6589` 的 `615=>617`（谓语「已失效」在 `:615`、主语「DS」在 `:617`）
- **反探针 T2（真单行）** = P@`01b6589` 的 `both` 集任一行（29 行里取**最小行号**那条，⛔ 跑时写死）
- **反探针 T3（真空面）** = 一份 tracked `.md`，主语集实测**零命中**（跑时选定并写死路径）

| 臂 | 判据 | 探针 | **必须**报 |
|:-:|---|---|:-:|
| 1 | 单行 AND-grep（I 格判据） | T1 | 🔴 抓不到 |
| 2 | k=3 窗口（本格判据） | T1 | 🟢 抓到 |
| 3 | k=3 窗口 | T3 | 🔴 0（**防恒绿**） |
| 4 | 单行 AND-grep | T2 | 🟢 抓到（**防恒红**） |

⇒ 期望矩阵 = 对角 `(红 🟢)(绿 🔴)`。**任一格不符 ⇒ 判据无判别力，J5 读数作废。**

### J8 · 基线两栏 + 自指双栏 + bug 登记
- 起手 → 止**两栏**（第 25 条推论四）：lab / DS HEAD · DS dirty · 四 pin dirty
- S 面读数**必须双栏**（34@`01b6589` / 48@`5883444`），⛔ 不许只报一个值
- §1.4 两条判据 bug **必须进报告与 §28.10**，⛔ 不许只留在过程里
- ⚠️ DS 侧起手：`b0008df7` / dirty=0 / 四 pin 全 dirty=0（**已实测**）
  🔴 **DS session 仍在改 DS 仓 ⇒ 收尾必须重取**（「格内也会漂」已 6 次实证）

---

## 3. ⛔ 硬禁（照抄 + 本格新增）

1. 🔴 §8 单向纪律：只审查 + 出处方，⛔ **不改 DS 一个字节**，⛔ 不裁设计规则的内容
2. ⛔ 引行号必标 sha，且 **sha 贴着行号写**（第 26 条推论二）；⛔ 引函数内行号写明锚的是哪一行
3. ⛔ 不在四个 pin 上跑 `pnpm build`（`lab:E48`）· ⛔ 不改 `provenance.pinnedSha`（`lab:E46`）
   ⛔ 不跑 `pnpm release` · ⛔ 不重跑 `metrics/context-cost.mjs`
4. ⛔ 不催「等别人的」那批（缺陷 A/A′/B 执行 · F104 两件 · 两个 hold · `audit-doc-shape.mjs` 日期型重开）
5. ⛔ 回改处方 / status 时**原文留痕不删**（§2.11）—— 只加订正块
6. ⛔ 判「没有 / 零处」必须把 grep 跑完，⛔ 不许加 `head`/`-m`（第 25 条推论二）
7. ⛔ 窄口径（regex 锚行首）的 0 **不能**自动读成宽口径（纯字符串）的 0（§28.9 已订正过一次）
8. ⚠️ 本格**不触 golden set** ⇒ 不需跑 `golden-set-freeze.mjs`；若中途要用，**先跑再用**
9. ⚠️ zsh 下 `git show $sha:path` **必须加引号**（`:s` 历史修饰符会吃掉一段路径）
10. ⚠️ 本机**无 `timeout` / `gtimeout`**

---

## 4. 交付形态

1. **报告** `reports/2026-08-27-round2-writeback-residual.md`：J1–J8 逐条读数 + 67 条逐条裁定表 + J7 四格矩阵
2. **装置归档** `runs/writeback-secondary-surface/`：`screen.sh` + `crossline.sh` + stdout 快照
   （⛔ 判据写死在脚本里，⛔ 不靠正文描述复现）
3. 🔴 **回改 §28.9 的「未覆盖」栏**（第 26 条推论三 + 推论一）：
   第 1、2 条**就地标注本格读数**（关闭 / 或给修正值），⛔ 不许只在 §28.10 另写一份
   ⚠️ 并按**推论一**回 §28.9 文件头核总述句（`N₁ = 18` 若被修正，⇒ 分项与总述必须同步）
4. **`docs/round2-status.md` §28.10** 登记：起手→止两栏 · J1–J8 落档 · J7 矩阵 · 未覆盖项
5. 若 J2/J5 判出「对方已做 / 已裁 / 已证伪」的**新**命题 ⇒ 按第 25 条推论三 + 第 26 条
   回改到 `proposals/` 对应处方的**「执行状态」栏**（I 格已建栏位，⛔ 本格直接用，不再另建）
6. 若撞出新形态 ⇒ 进 `AGENTS.md`（编号续 `lab:N60`）

---

## 5. ⛔ 跑前就登记的未覆盖项（如实，⛔ 不事后补）

1. ⛔ **k ≥ 4 的跨行形态**（隔两行以上）不覆盖 —— 本格判据 k=3 封顶
   ⇒ **本格结论只对 k ≤ 3 成立**，⛔ 不许写成「跨行档已跑完」
2. ⛔ **S₄₈ 的 +14 自指行不逐条裁定** —— 只作自指档登记（它们是本格交付物的镜像，⛔ 无独立信息）
3. ⛔ **主语/谓语集之外的措辞**仍是盲区 —— 本格**沿用** I 格谓语集以保可比性，
   ⇒ ⛔ 不承诺修掉 I 格 H5 的措辞召回缺口，只修**跨行**那一维
4. ⛔ **「DS 有没有真的读过某份处方」不可亲验** —— 两句话不可互相冒充（§28.9 未覆盖第 3 条**原样保留**）
5. ⛔ **不复核候选 1**（`bf0df7d5` 是否 owner 亲裁 · 形态 (ii) 半个缺口 · 「④ 全覆盖」自称）—— 用户未点，§8
6. ⛔ **不跑第 7 / 7b 步验收清单**（候选 4）· ⛔ **不碰 G 格原未覆盖四项**（候选 2）—— 用户挑的是候选 3
7. ⛔ **G 格原未覆盖四项 · F104 两件待 owner · 两个 hold · `audit-doc-shape.mjs` 日期型重开条件
   （2026-09-01 到期，owner = DS）** —— 原样保留
8. ⛔ **live Figma 上「同宽不等高 + label 不同」的真实发生率** —— lab 够不到
