# M2 写章流程脚本面（零 AI 全通）

## Goal

实现八阶段写章流程里「执行体 = 脚本」的部分，使一章能**全程脚本、零 AI 调用**地从细纲走到定稿：备料 → 机检 → 原子定稿。为 M4（AI 写稿/两审）和 M3（状态机编排）提供确定性的脚本地基。

> 上游法律文本：story-repo-spec §7（工作区/细纲）、§8（八阶段流程）、§8.1（自动模式，本任务不实现）。架构原则见 v7-implementation-plan §1.5（脚本只做能数的，AI 不碰文件，状态机不判业务）。

## Background（已确认事实，来自 spec §7/§8 + M1 成果）

**八阶段中属于 M2（脚本执行体）的步骤**：1 的脚本部分 / 3 / 5 / 8（第 2/7 步是作者，第 1 拟提案/4 写稿/6 两审是 AI=M4）。

- **§8 步骤表**：① 起草细纲（脚本读全书近况 + AI 拟提案）② 作者确认 ③ **备料（脚本）** ④ 写稿（AI）⑤ **机检（脚本，零 token）** ⑥ 两审（AI×2）⑦ 作者审稿 ⑧ **定稿（脚本，原子）**
- **工作区**（§7）：默认整体 gitignored（定稿前可丢失），但**实现不得假设工作区未被 git 跟踪**。`工作区/细纲.md` 四段固定（全书近况/本章提案/本章要写到的事/备选）。
- **定稿一次 commit 含**（§8）：草稿→`定稿/正文/`（front matter 写章档案 + 条目变动）；`设定/` 变更（位置/状态/境界/持有/信息差/名册/时间线追加）；三类条目文件更新（front matter + 履历追加）；`摘要/章摘要/`；工作区清空。commit message 约定 `ch(152): 标题` + `条目:`/`设定:` 行（ASCII 前缀是机器协议）。
- **机检可计数项**（§8 第 5 步，9 类）：字数、禁词/禁句式、复读检测、跨章高频意象统计、句式体检（句长方差/段落长度分布/高频句式开头）、新专名比对名册、front matter 格式完整性、条目文件是否变动（只查形式不判内容）、信息差关键词命中（**只出候选清单，不拦截**）。不过关直接打回第 4 步。

**M1 已就绪可复用**：41 精准读取接口 + Storage Adapter 读端口；`run(args,options,ctx)` 命令契约；`.cache` 重建器；解析/防呆序列化库。**Writer 端口仍是占位**（ChapterWriter/ThreadLedgerWriter 抛「M2 实现」）。

**现有空壳模块**（M0 占位，待 M2 填真）：`v7/src/prep/`、`v7/src/mechanical-check/`、`v7/src/finalize/`。

## Requirements（待 brainstorm 收敛，先列骨架）

- R1 全书近况组装：复用 M1 报表（悬了太久/连续弱钩/全书统计/卷进度）产出结构化近况
- R2 备料 prepareChapterMaterials：组装 `工作区/本章写作材料.md`（默认精准片段）
- R3 机检 mechanicalCheck：可计数项检查，产结构化结果（不过关项 + 候选清单），打回判定
- R4 定稿 finalizeChapter：原子 commit（多文件写入 + 工作区清空），断电安全；含 Writer 端口真实现
- R5 写出防呆与容错：所有写入走 M1 防呆序列化 + 保留未知字段（不变量 9）

## Acceptance Criteria（来自 §8 M2 出口，待细化）

- [ ] 用手工伪造的草稿与细纲，一章从细纲走到定稿全程脚本可跑、**零 AI 调用**
- [ ] 定稿中断注入测试（断电模拟）后**工作区原样保留**（要么完成要么原样回退）
- [ ] 定稿后 `.cache` 删光可全量重建出一致结果（不破坏 M1 不变量 2）

## Out of Scope

- ❌ 第 1 步 AI 拟提案、第 4 步 AI 写稿、第 6 步两审（M4）
- ❌ 第 2/7 步作者交互编排、状态机单入口（M3）
- ❌ §8.1 自动模式（连写/批次/叠加视图/污染传播）（M6）
- ❌ 增量更新缓存（定稿后只写变化行）——M2 先全量重建，增量是 M6 优化

## 决策记录（brainstorm）

- **D1 交付粒度**：单任务分期（同 M1），不拆父子。内部分期：全书近况+备料 → 机检 → 定稿+Writers，每期一 commit。理由：三块是紧依赖链（出口要三者集成跑通一章），M1 已证明单任务分期可控。
- **D2 机检 MVP 深度**：做 7 个确定性可计数项——字数、禁词/禁句式、本章内复读（简单 n-gram）、新专名比对名册、front matter 格式完整性、条目文件变动（只查形式）、信息差关键词候选。**统计项（跨章高频意象统计、句式体检）推到 M3+ 体检**（与 M1 已 defer 的文体指纹提取重叠，避免重复造轮子）；M2 机检框架预留扩展点。

- **D3 定稿原子性**（design §4）：git commit 为原子单元；写工作树→git add→commit→**最后**清工作区；commit 前中断则 `git restore` 丢半成品、工作区原样，不存在半章入档。
- **D4 Writer 端口**（design §3）：延续 M1 小端口——Chapter/ThreadLedger 做真 + 新增 Entity/Timeline/Secret/Summary 共 6 端口；原子性在 finalize 编排，不在 Writer 层。
