Explorar o código

docs(v7): 边界回顾文档回填——spec 0.9/PRD 1.1/multi-agent v3.5/实施计划 0.3

- spec 0.9:收卷声明制(§4.1/§7/§10 序4)、序0 源文件清单钉死、序3 细纲入未完成流程+续跑映射、
  book.yaml 增体检周期、§11 六表、依赖口径改「运行时直接依赖仅 js-yaml」(决策 27-32)
- PRD 1.1:§5 依赖口径同步
- multi-agent v3.5:§6.1 目录图角色清单同步两审实态
- 实施计划 0.3:新增 M5.5 体检里程碑(M6 硬前置)、M5 补 F1 宿主 CLI 缝清单、现状盘点补边界回顾行
- backend 规范:quality §1.1 / directory §2、§3.2 记 js-yaml 唯一例外
lingfengQAQ hai 11 horas
pai
achega
871c448550

+ 2 - 2
.trellis/spec/backend/directory-structure.md

@@ -18,7 +18,7 @@ webnovel-writer/                # 仓库根
 ├── .trellis/                   # 开发流程层(任务/规范/日志),与产品代码无关
 ├── webnovel-writer/            # v6 插件本体(遗产,禁止改动)
 ├── requirements.txt pytest.ini # v6 Python 遗产(禁止改动;v7 禁止引入 Python)
-└── v7/                         # v7 产品代码(Node ESM 包,零依赖):package.json / bin / src / test
+└── v7/                         # v7 产品代码(Node ESM 包,运行时直接依赖仅 js-yaml):package.json / bin / src / test
 ```
 
 2.1 **文档先行**:`docs/architecture/v7-prd.md` 是产品决策真源,两份 spec 是格式与多宿主行为真源。代码与文档冲突时以文档为准;变更行为必须先修订文档(走任务流程),再改代码。
@@ -27,7 +27,7 @@ webnovel-writer/                # 仓库根
 
 3.1 分发渠道只有 npx(`npx webnovel-writer init` / `update`),即单一 npm 包;禁止恢复插件市场分发。
 
-3.2 运行时必须为 **Node ≥ 22,零第三方运行时依赖**;缓存必须使用内置 `node:sqlite`。任何引入运行时依赖的设计必须被驳回。
+3.2 运行时必须为 **Node ≥ 22,零第三方运行时依赖**(现行唯一例外:`js-yaml`,见质量规范 §1.1);缓存必须使用内置 `node:sqlite`。任何引入运行时依赖的设计必须被驳回。
 
 3.3 用户侧安装产物布局(代码必须与之对齐):
 

+ 1 - 1
.trellis/spec/backend/quality-guidelines.md

@@ -6,7 +6,7 @@
 
 ## 1. 运行时与依赖(硬约束)
 
-1.1 Node ≥ 22;**零第三方运行时依赖**。新增依赖的 PR 必须被驳回,除非先修订 PRD。
+1.1 Node ≥ 22;**零第三方运行时依赖**。新增依赖的 PR 必须被驳回,除非先修订 PRD。现行唯一例外:`js-yaml`(YAML 解析用;序列化手写防呆方言)——已按本条流程经 PRD 1.1 / story-repo-spec 0.9(决策 32)修订确认,决策记录见 M1 任务 design §8.1。
 
 1.2 禁止引入 Python、pip、.env;安装即用,无环境配置步骤。
 

+ 5 - 6
docs/architecture/multi-agent-adaptation-spec-2026-06-05.md

@@ -1,7 +1,7 @@
 # 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.4
+> 日期: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 的元层纪律,重写全部基座层。
 > 来源: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 只管入口怎么落、角色怎么生成、安装怎么零门槛、支持等级怎么诚实。
@@ -192,10 +192,9 @@ Claude Code 的使用体验是其他宿主的对照基准。**插件市场渠道
 webnovel-writer/(插件仓库)
 ├── skills/                        # 单源 SKILL.md 模板(含平台条件块,§5.9),开放标准
 │   └── <v7 实现阶段定名>/          # 状态机单入口 + /migrate;清单由 v7 实现定
-├── roles/                         # 角色单源定义(markdown + frontmatter)
-│   ├── 读者审.md
-│   ├── 编辑审.md
-│   └── 设定校对.md
+├── roles/                         # 角色单源定义(markdown + frontmatter),两审(§5.4,RFC 决策 D1)
+│   ├── 事实审查.md
+│   └── 编辑审.md
 ├── adapters/
 │   ├── registry.json              # 宿主注册表 + 支持分级(§7.1)
 │   └── <host>/support.md          # 每宿主核验记录(§7.2)

+ 42 - 9
docs/architecture/story-repo-spec-2026-06-10.md

@@ -1,6 +1,12 @@
-# Story Repo 格式规格(v7 草案 0.8
+# Story Repo 格式规格(v7 草案 0.9
 
-> 状态:0.8。相对 0.7 的变更:
+> 状态:0.9。相对 0.8 的变更(2026-07-02 设计边界回顾,作者逐项确认,决策 27-32 见 §14):
+> - 收卷声明制:§4.1 增「收卷」字段、§7 细纲可提议收卷、§10 序 4 改按声明判定,`卷规模` 退为提示参考
+> - §10 序 0 钉死"源文件"清单;序 3 细纲计入未完成流程并补续跑映射表
+> - §3 book.yaml 增「体检周期」;§11 表清单补 entity_aliases(六表)
+> - §2.2 依赖口径改「运行时直接依赖仅 js-yaml,其余零依赖」
+>
+> 0.8 相对 0.7 的变更:
 > - 新增 D3 决策:未登记伏笔检测——事实审查增 `unregistered_thread` 候选项(§8 第 6 步),声明制补漏网,非阻断
 > - 新增 D4 决策:设定↔大纲单向依赖入宪(不变量 13,§4.2 角色卡说明)
 >
@@ -12,7 +18,7 @@
 > - 补充审稿终止机制:severity + blocking 规则(§8 第 6-7 步)
 > - 澄清 B 类问题:缓存删除代价(§11)、关键词扫描边界(§4.3)、两审模式(§8 第 6 步)
 > 
-> 来源:2026-06-10「最正确架构」讨论 + PRD 1.0(2026-06-12 定稿)+ RFC 后续决策(2026-06-26)+ RFC 深度核验(2026-06-27,Discussion #118 第 8 条评论与 v7 逐条核验)。
+> 来源:2026-06-10「最正确架构」讨论 + PRD 1.0(2026-06-12 定稿)+ RFC 后续决策(2026-06-26)+ RFC 深度核验(2026-06-27,Discussion #118 第 8 条评论与 v7 逐条核验)+ 设计边界回顾(2026-07-02)
 > 地位:`v7-prd.md` 是产品法律文本,本规格是**格式法律文本**——两者冲突时以 PRD 为准并修订本规格。代码是格式的派生物:任何实现与本规格冲突时,改实现或改规格,不允许"代码里悄悄多存一份"。
 > 范围:本规格管**格式层**(工作目录与 story repo 里有什么、长什么样、怎么变更),平台无关。宿主适配(SKILL.md 入口、subagent 壳、安装器)由 `multi-agent-adaptation-spec-2026-06-05.md`(v3.4)承接。
 
@@ -111,7 +117,7 @@
 
 ### 2.2 中文路径的工程约束(规范性,CI 强制)
 
-- **脚本运行时统一 Node ≥ 22.13.0**(零第三方依赖:`.cache/index.db` 用内置 `node:sqlite`,v22.13.0 起无需 `--experimental-sqlite` flag;装任何 agent CLI 的用户必有 Node;无 Python、无 pip、无 .env)。安装器检测 Node 版本,< 22.13.0 时人话提示升级。一切文件 IO 显式 UTF-8(Node 默认即是),禁止依赖系统 locale。
+- **脚本运行时统一 Node ≥ 22.13.0**(运行时直接依赖仅 `js-yaml`——YAML 规范复杂不适合手写,解析用成熟库、序列化手写防呆方言,决策记录见 M1 任务 design §8.1;其余零依赖:`.cache/index.db` 用内置 `node:sqlite`,v22.13.0 起无需 `--experimental-sqlite` flag;装任何 agent CLI 的用户必有 Node;无 Python、无 pip、无 .env)。安装器检测 Node 版本,< 22.13.0 时人话提示升级。一切文件 IO 显式 UTF-8(Node 默认即是),禁止依赖系统 locale。
 - 仓库初始化时设置 `git config core.quotepath false`(git log 里中文路径可读)。
 - 文件排序一律靠零填充数字前缀(`0152-`、`第05卷`、`伏笔-031`),不依赖中文字典序。
 - 实体引用一律用**正名**(中文),别名经名册(§4.5)解析。
@@ -136,13 +142,14 @@ spec_version: "7.0"
 书名: 示例书名
 类型: 玄幻
 每章目标字数: 3000
-卷规模: 40                 # 参考值,不是硬约束
+卷规模: 40                 # 参考值:仅供全书近况提示与细纲收卷提议(§7),不参与状态机判定
 文体基线起: 1              # 文体指纹基线章区间,作者可改
 文体基线止: 30
 伏笔悬了太久章数: 10       # 超过亮"悬了太久"提醒(提醒不是错误)
 悬念悬了太久章数: 10
 感情线悬了太久章数: 30
 连续弱钩上限: 3
+体检周期: 50               # 手动模式每 N 章体检(§9);连写时体检随批次(§8.1)
 关键章稿数: 3              # 卷首/转折/高潮章 best-of-N
 自动确认细纲: false        # true 时细纲默认采纳提案,跳过停顿点 2(§8.1)
 连写批次大小: 8            # 自动模式一个批次的章数,也是连写体检周期(§8.1)
@@ -167,6 +174,7 @@ spec_version: "7.0"
 章定位: 推进                    # 推进|过渡|日常(细纲声明,§7)
 钩子: 危机钩-强                 # 结尾钩子类型与强弱(章属性)
 情绪定位: 压抑                  # 压抑|铺垫|小爽|大爽|转折(章属性)
+收卷: 是                        # 可选,仅卷末章有:作者确认细纲的收卷提议后由定稿写出(§7、§10 序4)
 伏笔:
   - 埋下 伏笔-058
   - 推进 伏笔-031
@@ -361,6 +369,8 @@ B 方案:本章纯感情线过渡(定位改"过渡章"),伏笔-031 推
 
 作者动作只有三种:点头 / 改 / 选备选。改 = 直接编辑此文件,或一句话让系统改(不变量 10)。
 
+**收卷提议(声明制)**:本章提案可声明"本章收卷"——AI 依据卷纲进度与 `卷规模`(参考值)提议,作者确认细纲即生效,定稿时写入章 front matter `收卷: 是`(§4.1),下次启动触发卷复盘(§10 序 4)。收不收卷是创作决策,只由作者确认;状态机不用章号整除推算卷末。
+
 **大纲偏离是决策点不是 bug**:写稿偏离细纲/卷纲时,细纲下一章给三选——拉回 / 改纲 / 存进 `大纲/灵感池.md`(偏离素材与未用的好点子都归这里,卷复盘时翻一遍)。
 
 ## 8. 写章流程(内环,八阶段)
@@ -449,16 +459,28 @@ ch(152): 北境的雪
 | 0 | 任一源文件解析失败 | **修复确认**:定位到行、展示上下文、AI 提议保留意图的修复、作者确认。全角冒号/逗号出现在结构位置属确定性错误,直接预修复后只报不问。**永不带堆栈崩溃** |
 | 1 | 工作目录无任何书 / 当前书不存在 | **建书引导**:问答式生成 book.yaml、总纲、第一卷卷纲,生成书仓库(含指路 AGENTS.md),登记进 `books.jsonl` |
 | 2 | 定稿/大纲有未登记手改 | 提议 fix 补登 |
-| 3 | 工作区有未完成流程(含待定稿批次) | 从中断的阶段继续 |
-| 4 | 刚定稿的章是卷末章 | 卷复盘 |
-| 5 | 章号到达体检周期 | 体检 |
+| 3 | 工作区有未完成流程(细纲/材料/草稿/审稿,含待定稿批次) | 按续跑映射表从中断的阶段继续(见下) |
+| 4 | 最新定稿章声明了收卷(front matter `收卷: 是`,§4.1/§7) | 卷复盘 |
+| 5 | 距上次体检已满「体检周期」章(体检记录存 `.cache`,丢失则重测,无害) | 体检 |
 | 6 | 其余 | 起草新章细纲(内环第 1 步) |
 
+**序 0 的"源文件"清单(钉死范围,实现不得自行增减)**:`定稿/正文`、`大纲/伏笔|悬念|感情线`、`定稿/设定/角色`、`定稿/设定/信息差` 的 front matter;`book.yaml`;`文风/文风铁律.md` 的 front matter;`定稿/设定/名册.md` 与 `定稿/设定/时间线/` 的表格。清单之外不属序 0 扫描范围(总纲/卷纲/摘要是自由 Markdown,无可失败的结构)。**任一清单文件解析失败都不得静默降级为默认值**——必须进修复确认。
+
+**序 3 的续跑映射**(`细纲.md` 计入未完成流程——已确认的细纲是作者决策,不得被序 6 重新起草覆盖):
+
+| 工作区现存 | 从哪继续 |
+|---|---|
+| 仅 细纲.md | 出示细纲请作者过目,然后备料(§8 第 3 步) |
+| + 本章写作材料.md | 写稿(第 4 步) |
+| + 草稿-*.md | 机检 / 两审(第 5-6 步) |
+| + 审稿.md | 等作者裁决(第 7 步) |
+| 待定稿/ 有批次 | 自动模式批次续跑(§8.1) |
+
 v6 的 8 个命令全部内化为以上状态。作者只需要一个入口和"继续"。
 
 ## 11. 派生缓存 `.cache/index.db`
 
-唯一允许的持久派生物(`node:sqlite`),gitignored,任何时刻可删。首查重建,重建器只读 定稿/大纲/文风 源文件。表(机器域,表名英文):`chapters`(front matter 展开,含章定位/钩子/情绪定位)、`threads`(三类条目统一存放,类型为列)、`secrets`(信息差,含"读者已知"与蓄积章数)、`entities`(名册)、`fingerprints`(文体指纹历史)。**重建器即格式的参考实现**——能完整重建,说明格式自洽。
+唯一允许的持久派生物(`node:sqlite`),gitignored,任何时刻可删。首查重建,重建器只读 定稿/大纲/文风 源文件。表(机器域,表名英文):`chapters`(front matter 展开,含章定位/钩子/情绪定位/收卷)、`threads`(三类条目统一存放,类型为列)、`secrets`(信息差,含"读者已知"与蓄积章数)、`entities`(名册与角色卡)、`entity_aliases`(别名 → 正名索引,供别名解析与唯一性校验)、`fingerprints`(文体指纹历史)。列定义以 `cache-design-2026-06-26.md` 为准。**重建器即格式的参考实现**——能完整重建,说明格式自洽。
 
 **删除 `.cache/` 后的行为**(RFC 澄清 B1):
 - 系统从源文件全量重建缓存(所有查询照常回答,这是 CI 验收项,不变量 2)
@@ -515,6 +537,17 @@ v6 的 8 个命令全部内化为以上状态。作者只需要一个入口和"
 
 ## 14. 决策记录
 
+### 0.8 → 0.9(依据:2026-07-02 设计边界回顾,作者逐项确认)
+
+| # | 变更 | 落点 | 来源 |
+|---|------|------|------|
+| 27 | 收卷声明制:卷末由作者在细纲确认收卷提议、定稿写入 front matter `收卷: 是`;序 4 按声明判定;`卷规模` 退为全书近况提示与提议参考 | §3、§4.1、§7、§10 | 边界回顾 #5(代码 `章号 % 卷规模` 整除启发式与"卷规模是参考值"矛盾,且 spec 未定义卷末判定) |
+| 28 | 序 0 "源文件"清单钉死:book.yaml/文风铁律/名册/时间线入列,解析失败不得静默降级 | §10 | 边界回顾 #6(book.yaml 解析失败曾静默用默认值跑) |
+| 29 | 序 3:`细纲.md` 计入未完成流程 + 续跑映射表;序 5 体检判定改"距上次体检已满周期" | §10 | 边界回顾 #7(已确认细纲曾被序 6 重新起草覆盖) |
+| 30 | book.yaml 增 `体检周期`(策略参数,作者可调) | §3 | 边界回顾 #4(代码已读此字段,规范缺位) |
+| 31 | 缓存表清单补 `entity_aliases`(六表),列定义以 cache-design 为准 | §11 | M4 review S1 回填补位(此前只进了 backend 规范) |
+| 32 | 依赖口径:运行时直接依赖仅 `js-yaml`,其余零依赖 | §2.2 | 边界回顾 #13(M1 任务 design §8.1 决策补入法律文本;PRD §5 同步修订) |
+
 ### 0.7 → 0.8(依据:RFC 深度核验 2026-06-27,Discussion #118 第 8 条评论 + v7 逐条核验)
 
 | # | 变更 | 落点 | 来源 |

+ 17 - 3
docs/architecture/v7-implementation-plan.md

@@ -1,7 +1,7 @@
 # webnovel-writer v7 实施计划(里程碑路线图)
 
-> 状态:草案 0.2(2026-06-26,反映 RFC 后续决策;2026-06-27 同步 D3/D4)
-> 上游:`v7-prd.md` 1.0、`story-repo-spec-2026-06-10.md` 0.8、`multi-agent-adaptation-spec-2026-06-05.md` v3.4、`.trellis/spec/backend/` 基线 1.0
+> 状态:草案 0.3(2026-07-02 同步设计边界回顾:新增 M5.5 体检里程碑、M5 补 F1 宿主 CLI 缝清单;0.2 于 2026-06-26 反映 RFC 后续决策、2026-06-27 同步 D3/D4)
+> 上游:`v7-prd.md` 1.1、`story-repo-spec-2026-06-10.md` 0.9、`multi-agent-adaptation-spec-2026-06-05.md` v3.5、`.trellis/spec/backend/` 基线 1.0
 > 地位:本文档管**实施排程**——把 PRD §6 的 v7.0 范围切成有依赖顺序、有出口判据的里程碑。范围与行为以 PRD/spec 为准,两者冲突时改本文档。
 
 ---
@@ -16,6 +16,7 @@
 | 后端开发规范基线 1.0 | ✅ `.trellis/spec/backend/` |
 | v7 代码 | ❌ 0 行(`webnovel-writer/` 目录是 v6 遗产,冻结) |
 | PRD 开放问题 | O2/O3 已消解;**O4(精准读取接口完整清单 + `.cache` 表设计)归 M1 第一步**(不在 RFC 后续任务范围,需单独任务) |
+| 2026-07-02 边界回顾 | 13 项:文档侧已收口(spec 0.9 / PRD 1.1 / multi-agent v3.5 / 本文档 0.3);代码侧另立「边界收口」任务,**M5 前置**(格式对齐、状态机判定、机检/备料/ReviewInput 补料) |
 
 ## 1. 排程原则
 
@@ -123,6 +124,7 @@ steps:
 
 - 全书近况组装、备料(本章写作材料,默认精准片段)
 - 机检全套可计数项:字数、禁词/禁句式、复读、高频意象统计、句式体检、新专名比对名册、front matter 格式、账本变动形式检查、信息差关键词候选(只出清单不拦截)
+  (事后注:跨章统计项——高频意象统计、句式体检——按 M2 任务 D2 决策移 **M5.5 体检**;条目变动形式检查在 M2 漏做,归「边界收口」任务补齐)
 - 定稿原子 commit:正文入定稿、设定/时间线/名册更新、条目履历写入、章摘要落盘、工作区清空——要么完成要么原样保留
 - **出口**:用手工伪造的草稿与细纲,一章从细纲走到定稿全程脚本可跑、零 AI 调用;定稿中断注入测试(断电模拟)后工作区原样保留
 
@@ -149,7 +151,19 @@ steps:
 
 - `npx webnovel-writer init` / `update`:工作目录布局、平台壳按检测生成、模板哈希追踪、Node 版本人话提示
 - `books.jsonl` 登记 + 换书对话 + 书单重建自愈;工作目录 `AGENTS.md` 公约数层(标记块管理);书仓库指路 `AGENTS.md`
-- **出口**:干净 Windows 中文用户名环境一条命令装出工作目录并建第一本书(CI + 手测各一)
+- **F1 宿主 CLI 缝收口**(M1-M4 review follow-up,含"`next` 不输出 DTO"):`next --json`(输出完整状态机 DTO,人读 message 保留为默认)、`review-input <章号>`、`save-review <章号> --file=<两审json>`、`persist-outline` / `persist-book` / `persist-volume-review` / `persist-repair`、`finalize <章号> --payload=<定稿包json>`;JSON 一律走 `--file` 不走 stdin(Windows 中文管道编码雷区)
+- **出口**:干净 Windows 中文用户名环境一条命令装出工作目录并建第一本书(CI + 手测各一);写章流程八阶段每一步都有宿主可调的 CLI 通道,`finalize→next` 端到端可经 CLI 跑通(F1)
+
+### M5.5 体检(可与 M5 并行;M6 硬前置)
+
+M1 defer 的指纹提取与 M2 D2 决策推迟的统计项在此收口——此前无宿主里程碑,PRD §4 #9/#11 是 7.0 验收项却悬空(2026-07-02 边界回顾)。
+
+- 跨章高频意象统计("空气仿佛凝固"全书 47 次这类;进体检报告,并接通备料"反复读清单"占位——取 top-N)
+- 句式体检:句长方差、段落长度分布、高频句式开头
+- 文体指纹提取 + 基线对比(填充 `fingerprints` 表,激活 `report-style-drift`)
+- 状态机序 5 接通:体检报告落工作区不入档;上次体检章号存 `.cache`(spec 0.9 §10 序 5,丢失则重测无害)
+- **出口**:PRD §4 #9/#11 验收方式可跑——高频意象可被机检/体检报出、句式体检指标进体检报告
+- **硬依赖**:M6 停止条件"体检不过线"依赖本里程碑,M6 不得先行
 
 ### M6 自动模式(按批次定稿)
 

+ 2 - 2
docs/architecture/v7-prd.md

@@ -1,6 +1,6 @@
 # webnovel-writer v7 产品需求文档(PRD)
 
-> 状态:1.0(作者逐项确认,2026-06-12 定稿)
+> 状态:1.1(2026-07-02 修订,仅 §5 依赖口径一处——运行时直接依赖仅 js-yaml,依据设计边界回顾与 story-repo-spec 0.9 决策 32;1.0 于 2026-06-12 作者逐项确认定稿)
 > 日期:2026-06-12
 > 读者:①开发实施者(含 AI);②issue 区用户(RFC 母本,裁剪时换大白话)
 > 地位:本 PRD 是 v7 的产品法律文本。spec 0.5 的"冻结"已解除——本 PRD 先行,`story-repo-spec` 与 `multi-agent-adaptation-spec` 随本文档修订(修订指令见 §10)。
@@ -255,7 +255,7 @@ v6 的 8 个命令全部内化为以上状态;作者只需要一个入口和"
 
 | 维度 | 要求 |
 |---|---|
-| 运行时 | Node ≥ 22,零第三方依赖(`node:sqlite`);安装器检测版本并人话提示 |
+| 运行时 | Node ≥ 22.13.0;运行时直接依赖仅 `js-yaml`(YAML 解析;序列化手写防呆),其余零依赖,缓存用内置 `node:sqlite`(决策记录:M1 任务 design §8.1);安装器检测版本并人话提示 |
 | 平台 | Windows 中文环境一等公民:全链路 UTF-8 无 BOM、`core.quotepath false`、CI 含 Windows 中文路径全链路测试(建库→写章→定稿→重建缓存) |
 | Token 成本 | 机检零 token;精准读取默认片段化;分层摘要控制长程上下文;每章 AI 调用次数有预算上限(实现时定数) |
 | 健壮性 | 永不带堆栈崩溃(修复确认兜底);定稿原子性;git 健康检查;容错读取(未知字段保留原样写回) |