自动模式落地为"控制上移到大纲层"的连写流程:批内每章走完写章八阶段的 1-6 步后不定稿,草稿/审稿单/预登记数据攒进 工作区/待定稿/;写后续章的材料从"定稿 + 待定稿批次"叠加组装(支持批次内依赖);停止条件命中即停转人工;作者批量过审稿单后逐章按序原子定稿。定稿永远需要作者敲定——没有任何不经作者确认写入定稿区的路径(PRD §2.3 宪法级)。
对应实施计划 §M6(docs/architecture/v7-implementation-plan.md:168),上游依据:v7-prd.md §2.3(旅程三)/§4 #14(控制点滑杆)/#15(连写质量漂移)、story-repo-spec 0.11 §8.1(自动模式整节)/§7(工作区)/§10 序 3(含待定稿批次)、M5.5 交付的 runHealthCheck 结构化 data 与 style-stats("体检不过线"数据面)。
里程碑定位:M5 F1 后主循环全程 CLI 已通,M5.5 体检数据面已备——M6 是最后一块核心功能拼图(其后 M7 导出/migrate → beta)。
detectors.js:129 待定稿目录非空 → resume「待定稿批次续跑」;但批次结构、明细 dto、续跑指引都是空的。thread-declarations.js:7 注释称"条目文件由定稿创建",但 finalizeChapter 的 threadUpdates 只能 update/appendHistory 既有文件——手动模式「埋下 伏笔-X」定稿后条目文件不存在,下一章「推进 伏笔-X」被机检阻断。既有测试从未串"埋下→定稿→推进"接力所以没炸。M6 批内依赖(AC2)踩在此缝上,作为 P1.0 先修:payload 增 threadCreates:[{id, frontMatter, body, 短题?}](文件格式沿卷复盘伏笔条目先例),手动/批次两模式共用。finalizeChapter(ctx, payload)(v7/src/finalize/index.js)吃 {frontMatter, body, summary, threadUpdates, characterUpdates, rosterUpserts, timelineRows, secretWrites, commitLines, workspaceFiles},原子 commit + 缓存刷新。spec §8.1"预登记数据……定稿时原样转正"可字面实现:暂存的就是 payload。prep/index.js(八组件)、审稿输入 review/index.js assembleReviewInput(相关条目/名册/时间线/信息差/近况)、机检 mechanical-check/index.js(threads 表查条目声明——staged 新开条目会被误判"不存在"阻断,必须叠加)。三者的数据源=缓存(定稿派生)+源文件。.cache 只派生自定稿源文件,任何时刻可删重建(backend/database 规范 §2/§2.5)。staged 数据不得进缓存表(会破坏"删缓存重建一致")。runHealthCheck 只算定稿正文;fingerprints/meta imagery_top 是确定性派生物。批次判定不得把 staged 草稿写进这两处。自动确认细纲: false、连写批次大小: 8(BookConfigReader 有默认值);连续弱钩上限: 3。spec §8.1"连续 3 章(可配)无条目变动"的"可配"尚无键。大纲/卷纲/第NN卷.md(OutlineReader.readVolumeOutline);建书产第一卷卷纲,卷复盘产下卷卷纲。"绝不让模型裸奔编纲"。next --json 单入口 + F1 缝命令,JSON 走 --file);SKILL.md 单源渲染三平台壳,drift check 进 CI。NNNN-标题.md(ChapterWriter,标题净化 Windows 非法字符)。待定稿目录名沿用同规则。.gitignore 含 工作区/),未入 git——丢弃=删工作区批次目录;goto-chapter(M3)管的是已定稿回退,两者不混。工作区/待定稿/NNNN-标题/ 每章一目录:草稿.md(front matter+正文终稿)、定稿包.json(完整 finalize payload)、审稿单.md(该章两审产物,批量审稿时给作者看)工作区/待定稿/批次.json 批次元数据:起章、各章 {章号, 标题, 状态}(状态 ∈ 待审收/打回/受影响)、连续无条目变动计数;机器域 JSONstage-chapter <章号> --payload=<json> 暂存一章:校验(章号连续、payload 完整性同 finalize 前置校验)→ 落批次目录(草稿/定稿包从 payload 生成,审稿单从 工作区/审稿.md 搬入)→ 清本章工作区单章文件(细纲/材料/草稿/审稿)→ 返回停止条件判定next 序 3 能报批次明细(几章已暂存、各章状态、从哪继续)imagery_top 永不含 staged 数据连写批次大小收卷: 是 同样终止批次(后续归序 4 卷复盘)连写无条目变动上限,book.yaml 新键,默认 3)连续弱钩上限、缺「书内时间」、句式 vs 基线指纹超容差(复用机检 30%/50% 口径);判据纯函数化供批内批末复用stage-chapter 返回与 batch-status 都输出「继续 / 停(原因)」;判定零 token 纯脚本batch-status [--json]:批次明细(各章状态、审稿单要点、停止判定、批次质检结论)——作者批量过稿的呈报数据面batch-reject <章号>:打回第 K 章 → K 状态=打回,K+1..N 全部标记=受影响(工件保留);重写 K(重走写章 1-6 步 + stage-chapter 覆盖)、受影响章重审(重跑两审 + save-review 后经 stage 通道更新回待审收)finalize-batch:全部章状态=待审收才可执行;按章号升序逐章 finalizeChapter(每章独立原子 commit,中途失败停在该章、已入档的保留——"原子性按章保留");全部成功后清批次目录;打回章的旧预登记数据不得出现在任何 commit(批内污染不出批次)batch-discard:整批丢弃——删待定稿目录与批次元数据,定稿零变化,next 回到序 6自动确认细纲 开 → 期望产物注明"提案直接生效不问作者";连写由作者一句话开启,宿主按批次流走 stage-chapter。两开关全关 = 现行为零变化finalize-batch → 三个 ch(N) commit 按序、条目/时间线/摘要入档与手动模式逐字段一致、批次目录清空 → next 报下一章(test/staging/finalize-batch.test.js AC1)test/staging/overlay.test.js 三面用例)finalize-batch 拒绝执行并人话说明 → 重写第 2 章重 stage、受影响章重审回待审收 → finalize-batch 成功;打回章的旧预登记内容不出现在任何 commit(test/staging/finalize-batch.test.js AC3,grep 全部 commit)test/staging/index.test.js 停止条件 4 例 + 质检 3 例)自动确认细纲×连写四组合——全关时既有全量测试零改动仍绿(407 绿,router.test.js 未动);单开细纲自动确认序 6 dto 有标志;连写走批次通道(序 3 批次明细);全开端到端即 AC1(test/state-machine/auto-mode.test.js)batch-discard 后定稿零变化、工作区干净、next 回序 6(test/staging/finalize-batch.test.js AC6).cache 全量重建,备料/审稿输入/机检叠加输出不变(test/staging/overlay.test.js);fingerprints 与 meta imagery_top 全程无 staged 数据(finalize-batch.test.js AC1 内断言)连续弱钩上限 与机检容差常量;新键仅 连写无条目变动上限——spec 原文明说"可配")finalizeChapter——"原样转正"字面实现,无第二套入档路径(宪法级"定稿永远经作者敲定"由 finalize-batch 的作者触发保证)。goto-chapter 保留给已定稿回退,职责不混。threadCreates:新开条目的入档通道缺失是 M2 起的真缺口(见 Background),修在 finalizeChapter(手动/批次共用、同一原子边界与回滚集合),不在 staging 层单修——"事实变更只经定稿流程入 git"不开第二条路。spec §8 第 8 步与 SKILL 定稿包字段随 3.3 回填。(无——若实施中发现 spec §8.1 与代码既有约定冲突,先回本节记录再动代码)