给作者一个入口和「继续」:单入口状态机先跑 git 健康检查(作者永不直面 git 报错,不变量 8),再按序判定当前该做什么(spec §10 序 0-6,命中即停),把 v6 的 8 个命令全部内化为状态流转。状态机只管编排,不判业务、不调 AI(AI 动作备好 DTO 交 M4)。
上游法律文本:story-repo-spec §9(中环/外环/例外)、§10(启动序列与状态机)、不变量 8(作者不碰 git)。架构原则 v7-implementation-plan §1.5(状态机只管流程编排)。
启动序列(§10):第 0 步前先跑 git 健康检查——半提交、合并冲突、锁文件、.git 损坏、网盘冲突副本(xxx (1).md),每种配自动修复或人话指引。然后按序判定,命中即停:
| 序 | 条件 | 动作 | 执行体 |
|---|---|---|---|
| 0 | 任一源文件解析失败 | 修复确认(定位到行 + AI 提议修复 + 作者确认;全角冒号/逗号在结构位 = 确定性错误,预修复后只报不问;永不带栈崩) | 检测=脚本,提议=AI(M4) |
| 1 | 无书 / 当前书不存在 | 建书引导(问答生成 book.yaml/总纲/第一卷卷纲 + 指路 AGENTS.md + 登记 books.jsonl) | 问答=AI(M4),脚手架=脚本 |
| 2 | 定稿/大纲有未登记手改 | 提议 fix 补登(fix(设定): …) |
脚本(git diff vs 缓存) |
| 3 | 工作区有未完成流程(含待定稿批次) | 从中断阶段继续 | 脚本(检测工作区状态) |
| 4 | 刚定稿是卷末章 | 卷复盘 | 清账=脚本,对谈=AI(M4) |
| 5 | 章号到体检周期 | 体检 | 条目活跃率/时间线孤儿=脚本,文体指纹=M3+/M4 |
| 6 | 其余 | 起草新章细纲(内环第 1 步) | 全书近况=脚本(M2 已有),拟提案=AI(M4) |
外环/例外流程(§9):
retcon(N): 原因,设定/条目同步,留痕。what-if/…(git=脚本,推演=AI M4)。不变量 8:作者全程不碰 git 命令,不直面 git 报错。
M1/M2 已就绪可复用:M1 读接口(grep-story 给影响分析、reports 给体检/近况)+ .cache 重建器;M2 assembleBookStatus(序 6 近况)、finalizeChapter(git 操作范式 + git.js 封装可扩展)、机检/备料。
现有空壳:v7/src/state-machine/、v7/src/installer/(M0 占位)。
D1 范围与粒度:单任务分期(同 M1/M2)。M3 做满全部脚本面——git 健康检查(5 类异常 + 中文指引)、状态机路由器(序 0-6 命中即停)、7 态的检测逻辑、外环纯脚本流程(影响分析 / 回到第N章 / 吃书 retcon / 手改补登 / 分支试写 git 部分)。AI 态动作(建书问答/修复提议/卷复盘对谈/细纲提案/推演/圆设定)→ 只做「检测 + 备 DTO + 返回需 AI」交 M4;体检文体指纹提取推 M3+(M3 体检只做条目活跃率/时间线孤儿脚本项)。单入口 = 库函数 determineNextState(ctx) + 一个 CLI 命令,SessionStart hook 注入留 M4/M5。分期:git健康 → 路由+7态检测 → 外环脚本流程 → AI 态 DTO 缝。
D2 git 健康检查 = 激进自动修复(B)+ 可恢复安全网:尽量自动修、少打扰作者,但每个改 git 状态的修复前先做可恢复快照(stash / 备份 ref / 文件挪到 工作区/.救援/ 而非删除),修复后给中文小结「修了什么 + 怎么撤」。映射:陈旧锁文件→自动删;网盘副本→自动归档(不删);半提交→自动 stash(可恢复);merge 冲突→先备份再 merge --abort;.git 损坏→例外,无安全自动修,只检测 + 中文指引。激进但零数据丢失。