Ver Fonte

docs(v7): spec 回填——story-repo 0.10(决策33/34) + 多宿主 v3.6(§7.1 registry 实态字段)

序2/序4 执行责任落点钉死(relink fix(手改) / 脚本 vol(NN) commit);
§11 增改源流程自刷缓存公约;registry 示例补 detect_bin/install_dir 等
validator 强制字段,照抄示例不再被打回;基线引用刷新(0.10/PRD 1.1)。
lingfengQAQ há 10 horas atrás
pai
commit
6a519f0dfd

+ 15 - 7
docs/architecture/multi-agent-adaptation-spec-2026-06-05.md

@@ -1,8 +1,8 @@
 # Webnovel Writer 多宿主与多智能体适配 Spec
 
-> 日期:2026-06-05(v3 修订:2026-06-11;v3.1:同日,hook 语义 deny → ask,依据 #113;v3.2:2026-06-12,按 PRD 1.0 §10.2 修订——安装器重写为工作目录布局、AGENTS.md 公约数层、SessionStart 注入、模板条件块、放弃插件市场;v3.3:2026-06-26,RFC 后续决策——两审模式、审稿清单定义;v3.4:2026-06-27,RFC 深度核验——事实审查增 D3 未登记伏笔检测 category;v3.5:2026-07-02,设计边界回顾——§6.1 目录图角色清单同步两审实态)
-> 状态:草案 v3.5
-> 基线:**v7 story repo**(`story-repo-spec-2026-06-10.md` 0.8)+ **PRD**(`v7-prd.md` 1.0,产品法律文本,冲突时以 PRD 为准)。v2 的基线是 v6.1.0 Python runtime,该架构已被 v7 推翻;本版继承 v2 的元层纪律,重写全部基座层。
+> 日期:2026-06-05(v3 修订:2026-06-11;v3.1:同日,hook 语义 deny → ask,依据 #113;v3.2:2026-06-12,按 PRD 1.0 §10.2 修订——安装器重写为工作目录布局、AGENTS.md 公约数层、SessionStart 注入、模板条件块、放弃插件市场;v3.3:2026-06-26,RFC 后续决策——两审模式、审稿清单定义;v3.4:2026-06-27,RFC 深度核验——事实审查增 D3 未登记伏笔检测 category;v3.5:2026-07-02,设计边界回顾——§6.1 目录图角色清单同步两审实态;v3.6:2026-07-03,M1-M5 review S-2——§7.1 registry 示例补 M5 实态字段 detect_bin/install_dir 等,照抄示例不再被 validator 打回
+> 状态:草案 v3.6
+> 基线:**v7 story repo**(`story-repo-spec-2026-06-10.md` 0.10)+ **PRD**(`v7-prd.md` 1.1,产品法律文本,冲突时以 PRD 为准)。v2 的基线是 v6.1.0 Python runtime,该架构已被 v7 推翻;本版继承 v2 的元层纪律,重写全部基座层。
 > 来源:v2(基于 PR #110 review 重写)+ 2026-06 多平台调研核验 + Trellis 多宿主机制调研(2026-06-11)+ PRD 1.0 + RFC 后续决策(2026-06-26)+ RFC 深度核验(2026-06-27)
 > 定位:把 v7 的格式层(story repo)原封不动地暴露给多个 agent 宿主——格式平台无关,本 spec 只管入口怎么落、角色怎么生成、安装怎么零门槛、支持等级怎么诚实。
 
@@ -236,15 +236,23 @@ node scripts/build-host-shells.mjs --check     # drift check,CI 必跑
 {
   "schema_version": "webnovel-host-registry/v2",
   "hosts": {
-    "claude-code": { "tier": 1, "verified": "亲测", "smoke": "node scripts/smoke.mjs --host claude-code" },
-    "codex":       { "tier": 1, "verified": "亲测", "smoke": "node scripts/smoke.mjs --host codex" },
-    "gemini-cli":  { "tier": 2, "verified": "社区反馈" },
-    "cursor":      { "tier": 2, "verified": "社区反馈" },
+    "claude-code": { "tier": 1, "verified": "亲测", "agentCapable": true, "hasHooks": true,
+                     "detect_bin": "claude", "install_dir": ".claude",
+                     "smoke": "node scripts/smoke.mjs --host claude-code" },
+    "codex":       { "tier": 1, "verified": "亲测", "agentCapable": true, "hasHooks": false,
+                     "detect_bin": "codex", "install_dir": ".codex",
+                     "smoke": "node scripts/smoke.mjs --host codex" },
+    "gemini-cli":  { "tier": 2, "verified": "社区反馈", "agentCapable": true, "hasHooks": false,
+                     "detect_bin": "gemini", "install_dir": ".gemini" },
+    "cursor":      { "tier": 2, "verified": "社区反馈", "agentCapable": true, "hasHooks": false,
+                     "detect_bin": "cursor-agent", "install_dir": ".cursor" },
     "_default":    { "tier": 3, "verified": "标准 SKILL.md 理论可用" }
   }
 }
 ```
 
+除 `_default` 外每个宿主必填 `detect_bin`(安装器 PATH 探测名)与 `install_dir`(平台壳落点,validator 强制);`agentCapable`(两审能否走独立 subagent)与 `hasHooks`(有无 SessionStart 注入)驱动模板条件块(§6.2)。
+
 - **一级**(Claude Code + Codex):维护者亲测,发布前必须过 smoke。
 - **二级**(Gemini CLI / Cursor):社区反馈确认,README 如实标注。
 - **三级**:凡支持标准 SKILL.md 的宿主理论可用,不单独承诺。

+ 19 - 6
docs/architecture/story-repo-spec-2026-06-10.md

@@ -1,6 +1,10 @@
-# Story Repo 格式规格(v7 草案 0.9
+# Story Repo 格式规格(v7 草案 0.10
 
-> 状态:0.9。相对 0.8 的变更(2026-07-02 设计边界回顾,作者逐项确认,决策 27-32 见 §14):
+> 状态:0.10。相对 0.9 的变更(2026-07-03 M1-M5 全量 review,决策 33-34 见 §14):
+> - 序 2/序 4 执行责任落点钉死:手改补登由脚本 `relink` 命令 `fix(手改): 说明` 入档,卷复盘产物由脚本 commit `vol(NN): 复盘与下卷规划`(§9/§10)
+> - §11 增「改源流程自刷缓存」公约:定稿/回退/吃书/卷复盘/修复回写完成后由该流程刷新缓存
+>
+> 0.9 相对 0.8 的变更(2026-07-02 设计边界回顾,作者逐项确认,决策 27-32 见 §14):
 > - 收卷声明制:§4.1 增「收卷」字段、§7 细纲可提议收卷、§10 序 4 改按声明判定,`卷规模` 退为提示参考
 > - §10 序 0 钉死"源文件"清单;序 3 细纲计入未完成流程并补续跑映射表
 > - §3 book.yaml 增「体检周期」;§11 表清单补 entity_aliases(六表)
@@ -440,12 +444,12 @@ ch(152): 北境的雪
 
 ## 9. 中环、外环与例外流程
 
-- **卷复盘** `vol(05): 复盘与下卷规划`:三类条目清账(本卷开/收/悬了太久清单)→ `摘要/卷摘要/` → 翻一遍灵感池 → 与作者对谈产出 `大纲/卷纲/第06卷.md` → 顺手做伏笔机会扫描(模型提 3-5 个"本卷可埋、N 卷后响"候选,必须引用总纲的具体远期节点,作者勾选后生成条目文件)。
+- **卷复盘** `vol(05): 复盘与下卷规划`:三类条目清账(本卷开/收/悬了太久清单)→ `摘要/卷摘要/` → 翻一遍灵感池 → 与作者对谈产出 `大纲/卷纲/第06卷.md` → 顺手做伏笔机会扫描(模型提 3-5 个"本卷可埋、N 卷后响"候选,必须引用总纲的具体远期节点,作者勾选后生成条目文件)。**执行体**:复盘产物由脚本落盘并 commit(`vol(NN)` 前缀)+ 刷新缓存——与定稿同为脚本责任,否则产物滞留未提交区误触序 2。
 - **体检**(手动模式每 50 章;连写中每批次一次):文体指纹 vs 基线区间的漂移报告 + 条目活跃率与悬了太久清单 + 时间线孤儿 → 报告进工作区,不入档;作者决定回拉或更新基线。
 - **吃书**(作者界面叫吃书,commit 前缀仍 retcon):`retcon(87): 修正大长老境界设定`——显式流程,允许改定稿,要求 commit message 写明原因,设定/条目同步,留痕可查。
 - **影响分析**(脚本):改设定/吃书前,grep 正文+条目履历+时间线,列出"哪些章建立在这个事实上",分已发布/未发布两清单。未发布 → 直接改或吃书;**已发布 → 顺势圆**(生成向后兼容错误的圆设定方案——"已发布不可改"是网文铁律,顺势圆是主路径)。
 - **"回到第 N 章"**(人话命令):git 回滚的包装,自动模式跑废了一键回到批次起点或任意已定稿章。执行前展示影响范围,作者确认。
-- **手改检测**:每次启动发现定稿/大纲有未登记的手改 → 细纲前问一句"补登吗",确认后 `fix(设定): …` 入档。**系统适应作者,不报错。**
+- **手改检测**:每次启动发现定稿/大纲有未登记的手改 → 细纲前问一句"补登吗",确认后由脚本 `relink` 命令 `fix(手改): 一句话说明` 入档并刷新缓存(作者不碰 git;检测与补登的文件范围同源)。**系统适应作者,不报错。**
 - **分支试写**:作者想试另一条线 → AI 代为开 git 分支(如 `what-if/林晚黑化`),各推演 3 章纲要,读完合并或丢弃——作者全程不碰 git 命令(不变量 8)。
 
 ## 10. 启动序列与状态机(单入口)
@@ -458,9 +462,9 @@ ch(152): 北境的雪
 |----|------|--------|
 | 0 | 任一源文件解析失败 | **修复确认**:定位到行、展示上下文、AI 提议保留意图的修复、作者确认。全角冒号/逗号出现在结构位置属确定性错误,直接预修复后只报不问。**永不带堆栈崩溃** |
 | 1 | 工作目录无任何书 / 当前书不存在 | **建书引导**:问答式生成 book.yaml、总纲、第一卷卷纲,生成书仓库(含指路 AGENTS.md),登记进 `books.jsonl` |
-| 2 | 定稿/大纲有未登记手改 | 提议 fix 补登 |
+| 2 | 定稿/大纲有未登记手改 | 提议 fix 补登:出示变更清单问"补登吗",确认后脚本 `relink` 入档(`fix(手改): 说明`)并刷新缓存 |
 | 3 | 工作区有未完成流程(细纲/材料/草稿/审稿,含待定稿批次) | 按续跑映射表从中断的阶段继续(见下) |
-| 4 | 最新定稿章声明了收卷(front matter `收卷: 是`,§4.1/§7) | 卷复盘 |
+| 4 | 最新定稿章声明了收卷(front matter `收卷: 是`,§4.1/§7) | 卷复盘(产物由脚本 commit `vol(NN)` 并刷新缓存,见 §9) |
 | 5 | 距上次体检已满「体检周期」章(体检记录存 `.cache`,丢失则重测,无害) | 体检 |
 | 6 | 其余 | 起草新章细纲(内环第 1 步) |
 
@@ -482,6 +486,8 @@ v6 的 8 个命令全部内化为以上状态。作者只需要一个入口和"
 
 唯一允许的持久派生物(`node:sqlite`),gitignored,任何时刻可删。首查重建,重建器只读 定稿/大纲/文风 源文件。表(机器域,表名英文):`chapters`(front matter 展开,含章定位/钩子/情绪定位/收卷)、`threads`(三类条目统一存放,类型为列)、`secrets`(信息差,含"读者已知"与蓄积章数)、`entities`(名册与角色卡)、`entity_aliases`(别名 → 正名索引,供别名解析与唯一性校验)、`fingerprints`(文体指纹历史)。列定义以 `cache-design-2026-06-26.md` 为准。**重建器即格式的参考实现**——能完整重建,说明格式自洽。
 
+**改源流程自刷缓存**(决策 34):「缺失/损坏才重建」的正确前提是所有改源的路径自己负责刷新。定稿、回到第 N 章、吃书、卷复盘、修复回写、手改补登完成后由该流程立即重建缓存;刷新失败不阻断已完成的入档,但必须作废旧缓存(防陈旧章号/条目驱动后续判定),下次命令自动重建。
+
 **删除 `.cache/` 后的行为**(RFC 澄清 B1):
 - 系统从源文件全量重建缓存(所有查询照常回答,这是 CI 验收项,不变量 2)
 - 首次查询会触发冷重建(可能需数秒,视书籍体量),或临时降级为全文件扫描并给出提示
@@ -537,6 +543,13 @@ v6 的 8 个命令全部内化为以上状态。作者只需要一个入口和"
 
 ## 14. 决策记录
 
+### 0.9 → 0.10(依据:2026-07-03 M1-M5 全量 review,行为级探针复现)
+
+| # | 变更 | 落点 | 来源 |
+|---|------|------|------|
+| 33 | 序 2/序 4 执行责任落点:手改补登 = 脚本 `relink` 命令 `fix(手改): 说明`(前缀从示意的 `fix(设定)` 正名;此前只有检测无执行通道,作者确认补登后系统无事可做);卷复盘产物 = 脚本 commit `vol(NN): 复盘与下卷规划`(此前只落盘不提交,走完误触序 2) | §9、§10 | review P1-1/P1-3(两轮 review 均在"执行体归属"上抓到漏洞,钉死) |
+| 34 | 改源流程自刷缓存公约:定稿/回退/吃书/卷复盘/修复回写/手改补登完成后由该流程重建缓存;「缺失/损坏才重建」只兜底不感知源变更 | §11 | review P1-2(goto 回退后 next 用旧章号起草错章,探针确认) |
+
 ### 0.8 → 0.9(依据:2026-07-02 设计边界回顾,作者逐项确认)
 
 | # | 变更 | 落点 | 来源 |