{
  "subjectSha": "6ac56de2",
  "modelId": "claude-opus-5",
  "promptTemplateVersion": "jt-v1",
  "rung": "R3",
  "templateHash": "41cea3565a31aa46548f34c9100f1ac645614081ef2e2015196186c932db9882",
  "docHash": "075f98b785e3a1828ab0c130cd713d797e259abee258eb00b6fa12062153fcc4",
  "sampleId": "observe/oneshot-plan",
  "iteration": 3,
  "appendCost": 4,
  "unitsToModify": [
    "✅ 执行状态（2026-08-31 收尾回填）",
    "File Structure",
    "Self-Review（写完计划后自查，已执行）",
    "🔴 预注册（Task 1 里写死进源码，先 commit 再跑）"
  ],
  "wallMs": 48581,
  "exitCode": 0,
  "raw": "**新条目的粒度：一个新 Task（本计划组织的重复单元就是 `## Task N` 块，每块自带 Files / Steps / 代码）。**\n\n追加 `## Task 6` 本身是纯追加，但为让它完整生效，必须改的已有部分：\n\n1. **`## ✅ 执行状态（2026-08-31 收尾回填）`** —— 该表按 Task 一行横切（Task 1 / 2 / 2′ / 3 / 4 / 5），新 Task 必须加一行；表头上方那句「**全部 Task 已执行完毕**」也随之失真需改。\n2. **`## File Structure`** —— 全计划唯一的 Create/Modify 文件清单，按「文件」而非按 Task 组织；新 Task 触碰的文件必须补进这里（且 `metrics/f4-denominator-branches.mjs` 已标注为「**唯一新文件**」，新增文件时该措辞要改）。\n3. **`## Self-Review（写完计划后自查，已执行）`** —— 第 1 项「Spec 覆盖」是 spec→Task 编号的映射并已结论「✅ 无缺口」；第 3 项「类型一致性」逐条列出跨 Task 的字段名与 `STATES` 出现位置（「Task 1 Step 3/4 与 Task 2 Step 3/5/6」）。新 Task 必须写进这两项。\n\n条件性（仅当新 Task 带常量/读数期望值时）：\n\n4. **`## 🔴 预注册（Task 1 里写死进源码，先 commit 再跑）`** —— 全计划只有这一处集中放预注册常量，且内含按 Task 编号的分派句「探针撞出的两条，必须进 **Task 2 与 Task 4**」。\n\n另两条事实：\n\n- 若新 Task 是**插入**（而非追加到末尾，如已有的 `2′`），则其后所有 Task 编号以及上述三处对编号的引用需同步改。\n- 若「新条目」取更细粒度 = **Task 2 里新增一条控制**，则须改：`Task 2 Step 8` 的 commit message（写死「**9 条控制**」）、`Task 3` 各步命令的期望说明（按控制 id 点名）、以及执行状态表 Task 2 行的「13 条控制 + 1 条 skip」计数。\n\n```json\n{\"unitsToModify\": [\"✅ 执行状态（2026-08-31 收尾回填）\", \"File Structure\", \"Self-Review（写完计划后自查，已执行）\", \"🔴 预注册（Task 1 里写死进源码，先 commit 再跑）\"], \"appendCost\": 4}\n```"
}