prd.md 5.9 KB

M3 状态机单入口 + git 隐身全套

Goal

给作者一个入口和「继续」:单入口状态机先跑 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(状态机只管流程编排)。

Background(已确认事实,来自 spec §9/§10 + M1/M2 成果)

启动序列(§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):

  • 影响分析(纯脚本):grep 正文+条目履历+时间线,列「哪些章建立在这个事实上」,分已发布/未发布两清单。
  • 回到第 N 章(人话命令):git 回滚包装,执行前展示影响范围 + 作者确认。
  • 吃书 retcon:改定稿,commit retcon(N): 原因,设定/条目同步,留痕。
  • 手改检测:即序 2。
  • 分支试写:AI 代开 git 分支 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 占位)。

Requirements(待 brainstorm 收敛,先列骨架)

  • R1 git 健康检查:检测半提交/冲突/锁/损坏/网盘副本,各配自动修复或中文指引,永不抛 git 原始报错
  • R2 状态机单入口:按 §10 序 0-6 命中即停判定,返回「当前态 + 该做什么」;状态机不判业务、不调 AI
  • R3 各态检测逻辑(脚本部分):解析失败(0)、无书(1)、未登记手改(2)、工作区未完成(3)、卷末章(4)、体检周期(5)、其余(6)
  • R4 外环纯脚本流程:影响分析、回到第 N 章、吃书 retcon、(分支试写 git 部分)
  • R5 AI 态 DTO 缝:AI 动作(建书问答/修复提议/卷复盘对谈/细纲提案/推演)备好上下文 DTO,返回「需 AI」结果交 M4

Acceptance Criteria(来自 §10 M3 出口,待细化)

  • 7 个态各有端到端测试(构造命中各序的仓库样本,断言状态机判定正确)
  • git 异常样本库逐个演练(半提交/冲突/锁/损坏/网盘副本),作者可见输出零英文堆栈
  • 影响分析/回到第 N 章/吃书 纯脚本流程有测试
  • 不破坏 M1/M2 不变量(删缓存可重建、定稿原子)

Out of Scope

  • ❌ AI 态的真实动作(建书问答/修复提议/卷复盘对谈/细纲提案/分支推演/圆设定)→ M4(M3 只备 DTO + 返回「需 AI」)
  • ❌ 体检的文体指纹提取 → M3+/M4(M3 体检只做条目活跃率/时间线孤儿等脚本项)
  • ❌ 自动模式连写/批次/污染传播 → M6
  • ❌ SessionStart hook 注入实现 → M4/M5(M3 提供状态机入口等价路径)

决策记录(brainstorm)

  • 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 损坏→例外,无安全自动修,只检测 + 中文指引。激进但零数据丢失。

Open Questions(brainstorm 待答)

  • 无(DTO 形态、手改检测机制、影响分析「已发布」边界等技术细节于 design.md 决,按 M1/M2 风格)。