体检从"最小占位"升级为 spec §9 完整定义:三个零 token 统计算法落地(跨章高频意象、句式体检、文体指纹+基线漂移),填充 fingerprints 表激活 report-style-drift,高频意象接通备料"反复读清单"占位,并为 M6 停止条件"体检不过线"提供结构化数据面。
对应实施计划 0.3 §2「M5.5 体检」(docs/architecture/v7-implementation-plan.md:157),上游依据:v7-prd.md §4 #9(桥段循环)/#11(AI 味)/#2(时间线,缺锚点检查部分)、story-repo-spec 0.10 §3(体检周期/文体基线)/§8 第 5 步(机检统计项)/§9(体检定义)/§10 序 5、cache-design-2026-06-26.md §1.5(fingerprints 表)。
里程碑定位:M6 硬前置——M6 停止条件"体检不过线"依赖本任务的数据面;本任务不做阈值判定。
v7/src/state-machine/index.js:61-65 按 maxChapter - lastCheck >= 体检周期 判定进入 health-check 态(needsAI=false);runHealthCheck(v7/src/health-check/index.js)已产 工作区/体检报告.md(全书近况 + 悬了太久 + 条目活跃率 + 连续弱钩),体检章号写 meta last_health_check_chapter(跨重建保留,丢失重测无害)。报告"文体指纹 / 高频意象 / 句式体检"节是占位(index.js:48-49"随 M5.5 落地")。v7/src/cache/schema.js:80-93,SCHEMA_VERSION 2):PK (chapter_range_start, chapter_range_end)、is_baseline、5 个常用特征列 + fingerprint_data JSON;无时间戳(指纹是确定性派生物,删缓存重算结果必须一致,cache-design §1.5 不变量)。rebuilder.js:49 重建时留空,何时算哪段由调用方决定。v7/src/commands/report-style-drift.js):读表对比基线 vs 最近章段已实现(表空友好报错),但只输出 3 项 delta,缺句长方差 delta;特征提取函数不存在(M1 明确 defer:06-27-m1-format-core/prd.md:266)。v7/src/prep/index.js:97「反复读清单(暂空,跨章高频意象统计随 M5.5 体检补)」。06-27-m2-writing-flow/prd.md:46)把"跨章高频意象统计、句式体检"推到体检里程碑,机检框架预留扩展点(v7/src/mechanical-check/index.js 顺序 check 函数,issues 带 blocking 字段;先例:新专名/信息差走非阻断候选)。体检周期: 50、文体基线起/止(默认 1-30),BookConfigReader 已读(spec 0.10 §3)。story_time 列,TimelineReader 已有。health-check 命令(v7/src/commands/health-check.js)走 run 契约;宿主经 next 序 5 → health-check 已可跑通。文体基线起/止)+ 当前周期章段;重建器保持留空(注释同步更新)report-style-drift 补齐:输出增加句长方差 delta;体检报告"文体指纹"节含基线 vs 最近的漂移对比与人话说明(回拉或更新基线由作者决定,脚本只提示改 book.yaml 的方法,不自动改)story_time 空);或时间线文件中无该章对应行。统一进体检报告"缺时间锚点"节(全齐报"无")runHealthCheck 集成上述统计,替换占位节;返回值增加结构化 data(各项指标与清单),作为 M6 阈值判定的对接面(本任务不判"过线/不过线")工作区/体检报告.md 不入档;last_health_check_chapter 逻辑不变test/health-check/index.test.js 报告节用例;前半"机检报出"在 test/mechanical-check/check.test.js「高频意象命中」用例,meta 种子 = 体检产物,链路由体检测试证明 meta 确实写入)fingerprints 表含基线 + 当前周期两行;report-style-drift 输出含句长方差在内的 delta;删 .cache 全量重建后再次体检,指纹逐字段一致(确定性)prepare-chapter 产出的写作材料"反复读清单"含 top-N 高频意象及次数;未体检时输出人话占位next 不再报体检;既有全量测试绿(374/374,Windows 本机);CI 双平台绿随 P4.4 push 后回填 run 号:(待)runHealthCheck 返回结构化 data(指纹漂移/高频意象/句式/悬了太久等),测试断言形状稳定(无——scope 与术语均已收敛,技术口径见 design.md)