执行序:A 格式对齐 → B 状态机判定 → C 缺料补齐 → D 收口审计。每阶段末跑全量测试并 commit(回滚点)。验证一律
cd v7 && node --test(Windows 本机即双平台之一,CI 补另一平台)。
grep -rn "大纲.*第.*卷\|卷摘要\|谁知道\|读者知道" v7/src v7/test 列全牵连点(含 book-status.js 是否有卷纲/卷规模耦合)大纲/卷纲/第NN卷.md:
OutlineReader.readVolumeOutline / listVolumes(目录与正则)persist.js persistCreateBook(大纲/卷纲/第01卷.md)与 persistVolumeReviewtest/fixtures/sample-book/大纲/第01卷.md 移入 卷纲/第NN卷.md:persistVolumeReview(及 SummaryWriter 若涉卷摘要)、persist 测试断言知情人/读者已知:rebuilder.scanSecrets、SecretWriter(含 JSDoc)、fixtures 信息差-001、SecretReader/SecretWriter/read-secret/mechanical-check 测试schema.js 的版本/重建触发机制(ensureReady 对 schema 不匹配的行为);不支持版本检测则先补schema.js:chapters 加 is_volume_end INTEGER DEFAULT 0;新增 meta(key TEXT PRIMARY KEY, value TEXT);版本 +1rebuilder.scanChapters:收卷 === '是' || === true → 1state-machine/index.js 序 4:改读最新章 is_volume_end;DTO 卷 取该章 volume_numdto.js 序 6 期望产物:补"提案可含收卷提议(依据卷纲进度与卷规模参考值)"book-status.js:当前卷改 MAX(volume_num)(若现为章号除法)maxChapter - last_health_check >= 体检周期(meta 表读)src/health-check/index.js(汇总 悬了太久/条目活跃率/连续弱钩 → 工作区/体检报告.md;文体小节占位"随 M5.5";写 meta)+ src/commands/health-check.js + bin --help 补行detectParseFailures 补 book.yaml / 文风铁律 / 名册 / 时间线(缺失跳过规则见 design §2.3);测试注入四类损坏样本(AC4),并断言 book.yaml 损坏时不再走默认值路径hasUnfinishedWork 计入 细纲.md、本章写作材料.md;测试 AC5(仅细纲 → 序 3 且文件未被改写)util/ 新增 front matter 条目变动解析([{type, verb, id}]),机检与 review 共用checkThreadDeclarations(design §2.4 三规则,severity=high/blocking=true);测试 AC6 三类用例rebuilder 补 secrets.short_title 短题解析;SecretReader.listUnrevealed 扩返回 + readContentFirstLine;prep 输出行按 design §2.5 模板;测试 AC7 前半ThreadLedgerReader);roles/事实审查.md 输入清单行更新;跑 build-host-shells --check + validator;测试 AC7 后半grep -rn "谁知道\|读者知道" v7/ 零命中(references 题材模板里的"知情人"文案不属此列);卷纲扁平路径零命中node --test;删 .cache 全量重建用例;drift check;package validatorgit push 前看 CI 双平台矩阵结果;PRD 验收项逐条勾选cd v7 && node --test # 全量
node --test test/state-machine/ test/cache/ # 判定与缓存
node scripts/build-host-shells.mjs --check # drift check