{
  "subjectSha": "6ac56de2",
  "modelId": "claude-opus-5",
  "promptTemplateVersion": "jt-v1",
  "rung": "R3",
  "templateHash": "41cea3565a31aa46548f34c9100f1ac645614081ef2e2015196186c932db9882",
  "docHash": "075f98b785e3a1828ab0c130cd713d797e259abee258eb00b6fa12062153fcc4",
  "sampleId": "observe/oneshot-plan",
  "iteration": 2,
  "appendCost": 5,
  "unitsToModify": [
    "✅ 执行状态（2026-08-31 收尾回填）表格",
    "Architecture 段",
    "File Structure",
    "🔴 预注册（PREREG 常量块及其三段说明）",
    "Self-Review（1 Spec 覆盖 / 2 占位扫描 / 3 类型一致性）"
  ],
  "wallMs": 51024,
  "exitCode": 0,
  "raw": "按这份计划自己组织的单位——**Task**（Task 1…5，含计划外插入的 Task 2′）——要加一个新 Task，必须改动的已有部分：\n\n**1. `## ✅ 执行状态（2026-08-31 收尾回填）` 的表格**\n每个 Task 一行（Task / 状态 / 实际产出 · 偏差）。新 Task 不加行，这张表就与 Task 列表不一致，且表头那句「**全部 Task 已执行完毕**」也随之失真。\n\n**2. `**Architecture:**` 段**\n现文写死「新增 `metrics/f4-denominator-branches.mjs`」为唯一新文件、并写死了做法（复用 `build()` + `parseAcceptanceSections`、双 pin 跑、`--compare` 比 id 集合）。新 Task 若引入新文件或新数据路径，需在此改写。\n\n**3. `## File Structure`**\n按 Create / Modify 逐条列出全部文件。新 Task 的产物与被改文件必须并入这份清单（现清单是全计划共用的一处，不是每个 Task 各自带一份）。\n\n**4. `## 🔴 预注册（Task 1 里写死进源码，先 commit 再跑）`**\n`PREREG` 是单一共享常量块 + 其下「为什么只预注册第一项」「⚠️ 留痕」「🔴 探针撞出的两条」三段说明。新 Task 若带任何期望值/阈值，要改这个块及其说明（文档自身记录的先例：Task 2′ 就是「阈值预注册后另行 commit」）。\n\n**5. `## Self-Review（写完计划后自查，已执行）`**\n三项都是对**全计划**的断言，新 Task 加入后都要重算：\n- 第 1 项「Spec 覆盖」——spec 条目 → Task 编号的映射表，末尾断言「✅ 无缺口」；\n- 第 2 项「占位扫描」——断言每个代码步骤都给了可直接粘的实现；\n- 第 3 项「类型一致性」——逐字点名 `STATES` / `zerosByState[s].zeros` / `zeroIds[s]` / `branches.A[s].pct` 在「Task 1 Step 3/4 与 Task 2 Step 3/5/6」中一致，含 Task 编号的具体引用。\n\n另有两处**取决于新 Task 类型**的连带改动（不是所有新 Task 都触发）：\n- 若新 Task 增加一条控制：Task 2 的控制 id 用连号 `must-hit-0…must-not-hit-4…must-hit-8`，且 Task 2 Step 8 的 commit message 写死「**9 条**控制」；\n- 若新 Task 产出新结论：Task 5 Step 1 写死了登记项编号 `N81`（Step 2 的 `N81.1` 已被占用）。\n\n```json\n{\"unitsToModify\": [\"✅ 执行状态（2026-08-31 收尾回填）表格\", \"Architecture 段\", \"File Structure\", \"🔴 预注册（PREREG 常量块及其三段说明）\", \"Self-Review（1 Spec 覆盖 / 2 占位扫描 / 3 类型一致性）\"], \"appendCost\": 5}\n```"
}