# Story Repo 格式规格(v7 草案 0.9) > 状态: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 角色卡说明) > > 0.7 相对 0.6 的变更: > - 补充 A1 决策:自动模式待定稿批次的版本链叠加机制(§8.1) > - 更新 A2 决策:Node >= 22.13.0 运行时要求(§2.2) > - 明确 A3 决策:履历证据的章节级验证范围(§5 线索条目格式,§11 缓存重建器职责) > - 调整审稿定义:从三审改为两审(事实审查 + 编辑审),去掉读者审(§8 第 6 步) > - 补充审稿终止机制: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-07-02)。 > 地位:`v7-prd.md` 是产品法律文本,本规格是**格式法律文本**——两者冲突时以 PRD 为准并修订本规格。代码是格式的派生物:任何实现与本规格冲突时,改实现或改规格,不允许"代码里悄悄多存一份"。 > 范围:本规格管**格式层**(工作目录与 story repo 里有什么、长什么样、怎么变更),平台无关。宿主适配(SKILL.md 入口、subagent 壳、安装器)由 `multi-agent-adaptation-spec-2026-06-05.md`(v3.4)承接。 --- ## 0. 一句话 一本书 = 一个 git 仓库。`定稿/` 存已审稿通过的事实与正文,`大纲/` 存作者意图与三类线索条目(伏笔/悬念/感情线),`文风/` 存品味,`工作区/` 存还没定稿的一切。定稿一章 = 一次原子 git commit。除一个可随时删除的缓存外,不存在任何持久派生物。 ## 1. 设计不变量(法律条款) 1. **文件即真相**:全部状态是人可读、敢手改的中文 Markdown/YAML。系统检测手改并提议补登,永不报错拒绝。 2. **派生物可丢弃**:删光 `.cache/` 后,系统从源文件全量重建,所有查询照常回答。这是 CI 验收项。`books.jsonl` 的书单部分同理可由目录扫描重建。 3. **定稿只增不改**:已定稿章节的事实不可逆改。错别字修正例外;真要改设定走显式吃书(§9)。 4. **定稿原子性**:写章流程的定稿要么完成一次 commit,要么工作区原样保留,没有中间态。 5. **定稿权归作者**:系统没有任何不经作者确认就写入 `定稿/` 的路径。自动模式只是把确认粒度从逐章变为按批次(§8.1)。 6. **写评分离**:写稿与评审必须在不同上下文中进行;机检先于 AI 评审。 7. **升级原则**:脚本 < 模型 < 作者。**脚本能做的归脚本,做不到的归 AI 语义判断,必须分清楚;禁止用正则硬凑语义判断**。能数的不让模型估,能模型判的不打扰作者。 8. **git 隐身铁律**:作者永远不需要亲手敲 git 命令——真需要 git 操作时由 AI 代为运行;任何 git 异常都有人话修复流程(§10)。版本、审计、分支、回溯一律用 git,不自建提交链。 9. **容错读取**:解析任何源文件遇到未知字段,必须保留并原样写回。开源使用者会扩展格式,工具不得丢数据。 10. **对话即编辑器**:任何结构化数据的修改都可以用一句自然语言完成("把伏笔-031 放弃了,理由是改走暗线")。作者无须学习任何文件格式;手改文件永远只是逃生门。 11. **精准读取**:每类数据文件都有"精准读到所需一段"的脚本命令(§11.1);AI 非必要不整文件读取,写作材料默认用精准片段。 12. **作者界面零机器味**:作者可见的目录、文件名、字段、文案遵守 PRD §8 术语表与命名四原则;财务/工程/数据库隐喻与自造精简词禁止出现。 13. **设定大纲单向依赖**:`定稿/设定/` 只记已发生的客观事实,不写排程或章节安排;依赖方向单向——`大纲/` 引用设定(正名),设定不反向引用大纲的条目编号或卷号排程。改文风/进度只动 `大纲/` 与 `文风/`,不牵连设定,避免双向交叉导致的"改一处牵连多文件"。 ## 2. 目录总览(全中文) ### 2.0 工作目录层(安装布局) ```text 工作目录/ ← AI 工具唯一的启动位置;本身不是 git 仓库 ├── AGENTS.md # 公约数层:没装插件的 AI 也能看懂这里是什么、入口在哪 ├── .claude/ .codex/ … # 各平台壳(安装时按检测到的环境生成) ├── .webnovel/ # 插件本体:Node 脚本、角色定义、版本与模板哈希清单 │ └── books.jsonl # 书目录登记:每行一本书(书名/目录/是否当前在写/最后打开) ├── 我的第一本书/ # 书仓库(独立 git 仓库,见 §2.1) └── 我的第二本书/ # 多本书共用一套安装 ``` - **只支持从工作目录启动**:各宿主只在启动目录自动加载 skills/配置,在书目录启动插件不会加载。脚本启动时校验当前目录含 `.webnovel/`,否则人话提示"请从工作目录启动"。 - **当前书与书单由 `books.jsonl` 解析**(机器域文件,作者不手编):换书 = 作者一句话让 AI 改登记;登记缺失/损坏 → 扫描含 `book.yaml` 的子目录重建书单,"当前在写"标记请作者选一次。 - 宿主有 SessionStart hook 的(Claude Code),启动自动注入"当前在写哪本/共几本书/全书近况入口";无 hook 宿主由状态机入口读同一文件,行为等价。 - 安装、升级(模板哈希追踪)、平台壳生成由多宿主 spec §8 承接。 ### 2.1 书仓库目录 使用者全部是中文网文作者,**目录结构、文件名、作者可见的字段名一律中文**。ASCII 只保留给机器协议:commit 前缀(ch/vol/retcon/fix)、`spec_version`、技术文件(`book.yaml`、`.gitignore`、`.cache/`、`AGENTS.md`)。条目编号用**中文全称前缀**:伏笔-031、悬念-008、感情线-012、信息差-021——编号是作者天天要念的,必须是人话且不过度压缩。 ```text <书名>/ ├── .git/ ├── .gitignore # 至少含 .cache/ 与 工作区/ ├── AGENTS.md # 指路文件(建书时自动生成):误在书目录启动 AI 工具或 │ # 单独 clone 时,指引"回上一层工作目录启动 / npx 重建" ├── book.yaml # 全书配置(§3) ├── 定稿/ # ── 审稿通过后的一切,只进不改 ── │ ├── 正文/ │ │ └── 0152-北境的雪.md # 章节 + front matter(§4.1) │ ├── 设定/ │ │ ├── 角色/ │ │ │ └── 林晚.md # 角色卡(§4.2) │ │ ├── 信息差/ │ │ │ └── 信息差-021-灭门真凶.md # 每条一文件(§4.3) │ │ ├── 世界观.md # 世界规则、力量体系 │ │ ├── 时间线/ │ │ │ └── 第05卷.md # 按卷拆分的 append-only 表(§4.4) │ │ └── 名册.md # 实体名册:正名/别名/首现章(§4.5) │ └── 摘要/ │ ├── 章摘要/0152.md # 定稿时写入(§4.6) │ └── 卷摘要/第05卷.md # 卷复盘时生成 ├── 大纲/ # ── 作者意图,随时可改 ── │ ├── 总纲.md # 主题、金手指、结局 │ ├── 卷纲/ │ │ └── 第05卷.md # 主线/支线的推进写在这里,不另设条目 │ ├── 灵感池.md # 偏离大纲的素材与未用的好点子(§7) │ ├── 伏笔/ │ │ └── 伏笔-031-灭门真凶.md # 三类线索条目,每条一文件(§5) │ ├── 悬念/ │ │ └── 悬念-008-神秘老者身份.md │ └── 感情线/ │ └── 感情线-012-林晚主线.md ├── 文风/ # ── 品味库 ── │ ├── 文风铁律.md # (§6.1) │ └── 金句库/ # 7.0 手动放入;自动收割见 §6.2 附录(7.x) ├── 工作区/ # ── 还没定稿的一切,默认不入 git ── │ ├── 细纲.md # (§7) │ ├── 本章写作材料.md # 本次写稿的材料包,留档供核查 │ ├── 草稿-A.md # 关键章多稿时 A/B/C │ ├── 审稿.md # 草稿+两审意见+待确认新专名+章摘要(§8 第 7 步) │ ├── 评审报告/ # 机检与两审原始输出 │ ├── 待定稿/ # 自动模式的批次暂存(§8.1):每章一个子目录 │ └── 导出/ # 干净正文导出落点(§4.7),不进 git └── .cache/ # 唯一允许的派生缓存(§11) └── index.db ``` ### 2.2 中文路径的工程约束(规范性,CI 强制) - **脚本运行时统一 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)解析。 - CI 必须包含 Windows 上中文路径的全链路测试(建库→写章→定稿→重建缓存)。 ### 2.3 防呆方言(系统写出格式的规范性约束) 非程序员作者手改 YAML 的三大手滑是全角标点、缩进、类型惊喜。系统写出的一切结构化内容必须遵守以下方言: - **一律平铺**:front matter 与 `book.yaml` 禁止嵌套映射,字段全部顶层。 - **列表一律块格式**(一行一条 `- 晚晚`),禁止行内 `[a, b]`。 - **危险值加引号**:写出时凡可能被 YAML 误判类型的字符串自动加引号。 - 缩进统一两空格;编码 UTF-8 无 BOM。 - 多条记录**永远每条一个文件**,禁止大一统数据文件;自由文本归 Markdown 正文,front matter 只承载少量平铺短字段。 ## 3. book.yaml 全仓库唯一的纯 YAML 文件:低频、平铺。 ```yaml spec_version: "7.0" 书名: 示例书名 类型: 玄幻 每章目标字数: 3000 卷规模: 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) ``` ## 4. 定稿/ 草稿在工作区,审稿通过后入定稿——目录名即心智模型。 ### 4.1 章节文件 `定稿/正文/NNNN-标题.md` 文件名:四位零填充章号 + 短横 + 标题。front matter 携带本章档案——**章节自带自己的审稿记录**,核查不依赖外部表。本文件仅由定稿步骤写出(作者改的是正文,不是 front matter)。 ```markdown --- 章号: 152 标题: 北境的雪 卷: 5 视角: 林晚 书内时间: 大历1023年冬月初三 # 自由文本,全书格式一致 字数: 3120 章定位: 推进 # 推进|过渡|日常(细纲声明,§7) 钩子: 危机钩-强 # 结尾钩子类型与强弱(章属性) 情绪定位: 压抑 # 压抑|铺垫|小爽|大爽|转折(章属性) 收卷: 是 # 可选,仅卷末章有:作者确认细纲的收卷提议后由定稿写出(§7、§10 序4) 伏笔: - 埋下 伏笔-058 - 推进 伏笔-031 - 回收 伏笔-019 悬念: - 推进 悬念-008 感情线: - 推进 感情线-012 本章要写到的事: # 确认细纲时点的清单(已经两审核对) - 林晚得知灭门真相的第一条实证 - 伏笔-058 埋下:神秘老者来历 - 结尾强钩:玄阶令牌现世 --- 正文…… ``` ### 4.2 角色卡 `定稿/设定/角色/<正名>.md` front matter 是机检消费的结构化字段(平铺、块列表);正文是自由设定文本。客观事实(境界/位置/持有/状态)由定稿步骤增量更新——这是"客观事实记账"的落点。**只记设定原意与已发生事实,不写"第 N 章登场/第 M 卷洗白"这类排程**(不变量 13)——排程归 `大纲/卷纲`,角色的未来走向归感情线等线索条目。 ```markdown --- 姓名: 林晚 别名: - 晚晚 - 林师妹 状态: 在世 # 在世/已死/失踪/封印… 位置: 北境雪原 # 最后已知位置 境界: 筑基七层 # 量纲见 世界观.md 持有: - 青霜剑 - 玄阶令牌 最后变更章: 152 --- ## 设定 …自由文本… ## 典型对话 …该角色的原话样本(语气 few-shot 用,7.x 语气体检的数据源)… ## 关系 …自由文本,重要关系变化也应反映在时间线… ``` ### 4.3 信息差 `定稿/设定/信息差/信息差-NNN-<短题>.md` 不追踪"每个角色知道哪些事件",只登记**值得管理的信息差**,每条一个文件。机检的泄密扫描只产出**候选清单**(角色对白/内心戏命中其不知道的信息差关键词),是否真泄密由两审的事实审查判断,不拦截流程。"装逼打脸蓄积了多少章"是信息差的派生报表(§11),不另建机制。群像戏的"谁在场"由时间线在场列(§4.4)补足。 ```markdown --- 知情人: - 大长老 - 神秘老者 读者已知: false 登记章: 87 关键词: # 泄密扫描出候选用 - 大长老 - 灭门 - 血书 --- ## 内容 灭门真凶是大长老。当年血案的执行者是其门下死士。 ``` ### 4.4 时间线 `定稿/设定/时间线/第NN卷.md` **按卷拆分**的 append-only Markdown 表,定稿时向当前卷文件追加一行。写作材料默认只带当前卷+上一卷;跨卷查询走 `.cache`(§11.1)。**在场列可空**:日常章不用填,群像戏、密谋戏建议填。 ```markdown | 章 | 书内时间 | 一句话事件 | 在场 | |----|----------|------------|------| | 152 | 1023冬月初三 | 林晚于北境得血书,玄阶令牌现世 | 林晚, 神秘老者 | ``` ### 4.5 实体名册 `定稿/设定/名册.md` 防"同人异名/同名异人"。表:`| 正名 | 别名 | 类型 | 首现章 |`。机检在定稿前比对正文新专名与名册,未登记的专名进审稿单请作者确认(新实体 or 笔误)。 ### 4.6 摘要层 `定稿/摘要/` - `章摘要/NNNN.md`:≤200 字,定稿前由模型生成、**放进审稿单供作者扫一眼**(可顺手改),随定稿入档。 - `卷摘要/第NN卷.md`:≤500 字,卷复盘时生成:主线推进、关系变化、未收尾条目清单。 - 更长程的"全书骨架"是**派生物**:由卷摘要按需拼接压缩,不落盘。 ### 4.7 干净导出(零 token 脚本) 一键导出去掉 front matter 的纯正文,支持单章 / 章范围 / 全书,落点 `工作区/导出/`(不进 git)。作者发布到平台(起点/番茄)本来就需要纯文本——发布与"正文文件无机器味"两个需求一个脚本解决。 ## 5. 三类线索条目(`大纲/伏笔|悬念|感情线/`,每条一文件) 系统的心脏。**有"开启→推进→收尾"生命周期的才设条目**;三类共用同一套引擎(文件格式、履历、"悬了太久"提醒、定稿写入;机器内部状态同构 open/advance/resolve/drop),作者界面按类型用各自的名字和动词: | 类型 | 编号 | 生命周期动词 | "悬了太久"默认 | |---|---|---|---| | 伏笔 | 伏笔-031 | 埋下 → 推进 → 回收 / 放弃 | 10 章(book.yaml 可改) | | 悬念 | 悬念-008 | 设下 → 推进 → 揭晓 / 放弃 | 10 章 | | 感情线 | 感情线-012 | 开启 → 推进 → 修成正果 / 无疾而终 | 30 章 | **不设条目的,各归各位**:爽点是知识层(v6 追读力分类、爽点与节奏知识库、题材模板平移继承,喂给细纲与两审,§8);钩子与情绪定位是章属性(§4.1);主线/支线的推进写在总纲/卷纲正文里;冲突、立旗不设类。 文件名 `伏笔-031-灭门真凶.md`(全称编号-短题);front matter 平铺短字段,描述、收尾计划、履历全是 Markdown 正文: ```markdown --- 强度: 高 # 高|中|低 状态: 进行 # 进行|已收尾|已放弃 开启章: 12 预计收尾: 第7卷 # 卷号或章号;强度"高"时必填 最后推进章: 152 --- ## 描述 灭门真凶的身份。 ## 收尾计划 第七卷宗门大会当众揭穿。开新条目时必填,防悬空。 ## 履历 - 第12章:埋下 - 第87章:推进——血书线索现世(见本章中段"血书残页"一节) - 第152章:推进——林晚取得实证(见本章结尾对峙段) ``` **条目规则(声明制)**: - **不设"每章必须推进条目"的硬门检**。细纲声明本章定位(推进章/过渡章/日常章,§7)——过渡章合法,消除模型造假账的动机。 - **履历行必须引用章内证据**(一句话指明出处),两审的事实审查核对引用是否属实——这是防假推进的真正防线。 - **履历证据格式**(RFC 决策 A3):`第152章:推进——林晚取得实证(见本章结尾对峙段)` - 格式:章节级别 + 自然语言描述(无段落编号) - 验证范围: - 重建器验证:章节文件是否存在(脚本能做的,§11) - 两审验证:读取整章验证语义正确性(AI 能做的,§8 第 6 步) - 理由:网文章节 2000-3000 字,全文读取压力可接受;避免段落编号维护的复杂性和易错性 - 开新条目必须写收尾计划;强度"高"必须填预计收尾。 - "悬了太久"= `当前章 − 最后推进章` 超过该类型阈值,在全书近况里亮提醒。**提醒不是错误**:有些伏笔收不了可以接受,系统不逼作者填所有坑。 - 放弃必须在履历留原因行(弃线也要留痕)。 - 汇总视图(到期清单、悬了太久、活跃率统计)由 `.cache/` 与全书近况提供,**不维护任何汇总文件**。 - 派生指标(不另建机制):章尾力度 = 结尾未收尾条目的强度;追读风险 = 悬了太久数量 + 连续弱钩计数。 ## 6. 文风/ ### 6.1 文风铁律 `文风/文风铁律.md` 系统对作者品味的全部认知,作者可审可改。front matter 为机器消费部分(块列表;口癖按"角色:词条"平铺,不嵌套): ```markdown --- 禁词: - 眸子一缩 - 嘴角勾起一抹 禁句式: - '不是.*而是' 口癖: - 林晚:自称"本姑娘" --- ## 铁律 … ## 反和解(按题材配浓度) 反派恶意落到实处、冲突升级到底、禁说教式和解、禁主角圣母——AI 对齐训练的和解倾向对爽文是毒药,事后审查修不了,只能随写作材料前置反制(§8 第 3 步)。建书时按题材模板写入,作者可调浓度。 ## 节奏偏好 … ## 来自否决的规则 - 不要用天气开篇(出处:第 89/103/121 章三次否决) ``` 规则入铁律走"三次同类否决→系统提议→作者确认"的流程,每条带出处。 ### 6.2 金句库 `文风/金句库/` **7.0 范围**:目录与手动放入——作者把得意段落放进按场景分的文件(`战斗.md`、`对白.md`、`情感.md`……),写同类场景时作为 few-shot 注入。 **附录(7.x,自动收割,本节为预留设计不在 7.0 实现)**:自动判定只产生**候选**(作者改写且字数相近才候选,净删减不算);作者在对话中夸某段("那儿写得不错")也触发候选;最终入库一律经作者审核(审稿时顺手勾选)——品味决策不交给阈值。每文件保留最近 20 条,旧的轮换归档。 ## 7. 工作区/ 与细纲 工作区默认整体 gitignored——定稿前的一切允许丢失;"本章要写到的事"的最终归宿是章节 front matter(§4.1)。**想保留草稿史的使用者删掉 `.gitignore` 里那一行即可**,系统行为不变(实现不得假设工作区未被 git 跟踪)。 `工作区/细纲.md` 是写每一章前作者唯一需要看的文件,固定四段: ```markdown # 第 152 章细纲 ## 全书近况(脚本生成) - 位置:第 5 卷 24/40 章 - 悬了太久:伏笔-031(高,12 章未动) - 连续弱钩:2 章 ## 本章提案 本章定位:推进章。推进伏笔-031(林晚取得实证)、顺手埋下伏笔-058、结尾玄阶令牌现世收钩。 ## 本章要写到的事(确认即生效) - [ ] 林晚得知灭门真相的第一条实证 - [ ] 伏笔-058 埋下:神秘老者来历 - [ ] 结尾强钩 ## 备选 B 方案:本章纯感情线过渡(定位改"过渡章"),伏笔-031 推到下章(代价:悬了太久 +1) ``` 作者动作只有三种:点头 / 改 / 选备选。改 = 直接编辑此文件,或一句话让系统改(不变量 10)。 **收卷提议(声明制)**:本章提案可声明"本章收卷"——AI 依据卷纲进度与 `卷规模`(参考值)提议,作者确认细纲即生效,定稿时写入章 front matter `收卷: 是`(§4.1),下次启动触发卷复盘(§10 序 4)。收不收卷是创作决策,只由作者确认;状态机不用章号整除推算卷末。 **大纲偏离是决策点不是 bug**:写稿偏离细纲/卷纲时,细纲下一章给三选——拉回 / 改纲 / 存进 `大纲/灵感池.md`(偏离素材与未用的好点子都归这里,卷复盘时翻一遍)。 ## 8. 写章流程(内环,八阶段) | # | 阶段 | 执行体 | 文件效果 | |---|------|--------|----------| | 1 | 起草细纲 | 脚本读全书近况 + AI 拟提案 | 生成 `工作区/细纲.md`,含本章定位声明(§7) | | 2 | 确认细纲 | **作者** | 细纲的"要写到的事"固化(`自动确认细纲: true` 时默认采纳提案,跳过停顿) | | 3 | 备料 | 脚本 | 组装 `工作区/本章写作材料.md`:全书近况+要写到的事+事实切片+信息差边界+近章结尾+反复读清单+文风锚点+反和解规则。**默认精准片段**(当前卷+上一卷时间线、按编号取条目、按需取正文段,§11.1) | | 4 | 写稿 | AI(干净上下文) | `工作区/草稿-*.md`;关键章 best-of-N | | 5 | 机检 | 脚本(零 token) | **只做可计数项**:字数、禁词/禁句式、复读检测、跨章高频意象统计("空气仿佛凝固"全书 47 次这类)、句式体检(句长方差/段落长度分布/高频句式开头)、新专名比对名册、front matter 格式完整性、条目文件是否变动(只查形式不判内容)、信息差关键词命中(**只出候选清单,不拦截**)。不过关直接打回第 4 步,不打扰作者 | | 6 | 两审 | AI ×2(各自新鲜上下文) | **事实审查**(v6 的 5 维度:设定一致性、时间线、叙事连贯、角色一致性、逻辑 + v7 特有项:①"要写到的事"逐条核对正文;②机检泄密候选是否真泄密;③条目履历引用的章内证据是否属实;④**未登记伏笔检测**:搭整章通读反查"正文里出现疑似伏笔但无对应条目",只出候选不拦截,见下)、**编辑审**(结构、节奏、商业性、主角动机:主角每个主要行动是否有即时驱动、可见压力、预期收益、情绪原因,或明确标注为非理性行为)→ `工作区/评审报告/`。输出格式:结构化问题清单(severity + category + blocking),参考 v6 review schema。| | 7 | 审稿 | **作者** | `工作区/审稿.md` = 草稿 + 三句话审意见 + 待确认新专名 + 章摘要(扫一眼可改)。动作:接受 / 改完接受 / 打回。手动模式逐章审;自动模式按批次审(§8.1)。**定稿永远需要作者敲定**(不变量 5) | | 8 | 定稿 | 脚本,**原子** | 见下 | **审稿终止机制**(防止无限循环,RFC 决策 D2): - 两审输出结构化问题清单,每个问题包含: - `severity`: critical / high / medium / low - `category`: 问题分类(事实审查:setting/timeline/continuity/character/logic/requirement/leak/evidence/unregistered_thread;编辑审:structure/pacing/commercial/motivation) - `blocking`: 是否阻断定稿(boolean) - `description`: 问题描述 - `evidence`: 原文引用或数据对比 - `fix_hint`: 修复方向 - **阻断规则**: - `severity=critical` 自动 `blocking=true` - 其他 severity 由 AI 根据上下文判断是否 blocking - 存在任何 `blocking=true` 的问题 → 作者审稿时看到明确标识 - **作者审稿选择**: - 接受当前版本(即使有非阻断问题) - 改完接受(修改后不重新审稿,直接定稿) - 打回重写 - **系统不强制完美**:非阻断问题作为"优化建议",作者可以在审稿单上标注"已知问题,接受现状"并定稿。 **未登记伏笔检测**(D3,给纯声明制补漏网): v7 的伏笔/悬念/感情线是**声明制**——系统只跟踪细纲「本章要写到的事」声明、front matter 登记过的条目(§5/§7)。但写稿(第 4 步)是 AI 干净上下文,可能在正文里即兴埋钩子;这类坑无对应条目,不进"悬了太久"、卷复盘也扫不到,容易烂尾(Discussion #118 shuimushanjia 反馈)。 - **机制**:事实审查本就通读整章(验证履历证据),顺带反查——正文里出现**疑似伏笔信号但无对应条目**的,产出 `category=unregistered_thread` 候选。与信息差泄密扫描同款(§4.3):**只出候选清单,永不拦截**。 - **判定门槛保守**:仅捞同时满足"刻意强调 + 明显悬置 + 本章无即时解释 + 结构像 setup"者。`severity` 取 low/medium,**`blocking` 恒为 false**——即兴伏笔可能是神来之笔,不是缺陷。 - **作者裁决**(第 7 步审稿单):登记成条目(触发"开新条目必须写收尾计划",自动防悬空)/ 忽略(普通描写)/ 删掉。 - 边界:系统只负责"像伏笔但没登记"的提醒,不判断"这个伏笔好不好"。 **定稿的一次 commit 包含**:草稿 → `定稿/正文/`(front matter 写入章档案与条目变动);`设定/` 变更(位置/状态/境界/持有/信息差/名册/时间线追加);涉及的三类条目文件更新(front matter + 履历追加);`摘要/章摘要/`(审稿单定稿版);工作区清空。 **commit message 约定**(前缀 ASCII 是机器协议,便于 `git log --grep`): ```text ch(152): 北境的雪 条目: +伏笔-058 ~伏笔-031 ~感情线-012 $伏笔-019 # + 开启 ~ 推进 $ 收尾 设定: 林晚.位置=北境雪原; 信息差+信息差-021 ``` ### 8.1 自动模式(连写,按批次定稿) **全自动 ≠ 无控制,是控制上移到大纲层**:作者逐卷确认卷纲,一次确认管几十章。**自动模式与手动模式的差异只是确认粒度:逐章 vs 按批次**——状态机与八阶段零改动,没有"自动定稿"。 - `自动确认细纲: true` → 第 2 步默认采纳细纲提案(提案必须含定位声明)。 - **批次运行**:连写 `连写批次大小`(默认 8)章。每章走完 1-6 步后**不定稿**,草稿、审稿单、预登记数据存入 `工作区/待定稿/NNNN-标题/`。 - **叠加视图与版本链**(规范性要求,RFC 决策 A1):写批内后续章时,备料脚本组装"`定稿/` + 待定稿批次预登记"的叠加视图——批内前章的设定变更、条目推进、时间线行在工作区就位,定稿时原样转正。**支持批次内依赖**:第 K+1 章可以使用第 K 章的预登记事实。当第 K 章被作者打回时,标记 K+1 到 N 章为"受影响",需重新审核或重写(具体污染传播机制由 M6 实施时设计)。 - **停止条件**(命中即停转人工):批次写满 / 体检不过线 / 卷纲耗尽(**绝不让模型裸奔编纲**)/ 连续 3 章(可配)无条目变动。 - **批量审稿与定稿**:批次结束 → 体检 → 作者过一遍攒下的审稿单(整批接受 / 改某几章 / 从某章起打回重写)→ 作者敲定后**逐章按序定稿**(原子性按章保留)→ 下一批次。批内错误未定稿,直接改,影响最多波及一个批次。 - 整批不要 → "回到第 N 章"(§9);已发布后才发现的错误 → 影响分析 + 顺势圆(§9)。 两个开关全关 = 逐章交互流程,行为完全不变。 ## 9. 中环、外环与例外流程 - **卷复盘** `vol(05): 复盘与下卷规划`:三类条目清账(本卷开/收/悬了太久清单)→ `摘要/卷摘要/` → 翻一遍灵感池 → 与作者对谈产出 `大纲/卷纲/第06卷.md` → 顺手做伏笔机会扫描(模型提 3-5 个"本卷可埋、N 卷后响"候选,必须引用总纲的具体远期节点,作者勾选后生成条目文件)。 - **体检**(手动模式每 50 章;连写中每批次一次):文体指纹 vs 基线区间的漂移报告 + 条目活跃率与悬了太久清单 + 时间线孤儿 → 报告进工作区,不入档;作者决定回拉或更新基线。 - **吃书**(作者界面叫吃书,commit 前缀仍 retcon):`retcon(87): 修正大长老境界设定`——显式流程,允许改定稿,要求 commit message 写明原因,设定/条目同步,留痕可查。 - **影响分析**(脚本):改设定/吃书前,grep 正文+条目履历+时间线,列出"哪些章建立在这个事实上",分已发布/未发布两清单。未发布 → 直接改或吃书;**已发布 → 顺势圆**(生成向后兼容错误的圆设定方案——"已发布不可改"是网文铁律,顺势圆是主路径)。 - **"回到第 N 章"**(人话命令):git 回滚的包装,自动模式跑废了一键回到批次起点或任意已定稿章。执行前展示影响范围,作者确认。 - **手改检测**:每次启动发现定稿/大纲有未登记的手改 → 细纲前问一句"补登吗",确认后 `fix(设定): …` 入档。**系统适应作者,不报错。** - **分支试写**:作者想试另一条线 → AI 代为开 git 分支(如 `what-if/林晚黑化`),各推演 3 章纲要,读完合并或丢弃——作者全程不碰 git 命令(不变量 8)。 ## 10. 启动序列与状态机(单入口) **第 0 步之前先跑 git 健康检查**:半提交、合并冲突、锁文件、.git 损坏、网盘冲突副本("xxx (1).md")——每种配自动修复或人话指引,**作者永远不直面 git 报错**(不变量 8)。 然后按序判定,命中即停: | 序 | 条件 | 下一步 | |----|------|--------| | 0 | 任一源文件解析失败 | **修复确认**:定位到行、展示上下文、AI 提议保留意图的修复、作者确认。全角冒号/逗号出现在结构位置属确定性错误,直接预修复后只报不问。**永不带堆栈崩溃** | | 1 | 工作目录无任何书 / 当前书不存在 | **建书引导**:问答式生成 book.yaml、总纲、第一卷卷纲,生成书仓库(含指路 AGENTS.md),登记进 `books.jsonl` | | 2 | 定稿/大纲有未登记手改 | 提议 fix 补登 | | 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`(名册与角色卡)、`entity_aliases`(别名 → 正名索引,供别名解析与唯一性校验)、`fingerprints`(文体指纹历史)。列定义以 `cache-design-2026-06-26.md` 为准。**重建器即格式的参考实现**——能完整重建,说明格式自洽。 **删除 `.cache/` 后的行为**(RFC 澄清 B1): - 系统从源文件全量重建缓存(所有查询照常回答,这是 CI 验收项,不变量 2) - 首次查询会触发冷重建(可能需数秒,视书籍体量),或临时降级为全文件扫描并给出提示 - 不应暗示"删除缓存零代价"——重建需要时间,但系统保证功能不受影响 ### 11.1 精准读取接口(不变量 11 的落地) 每类源文件配"定位读取"脚本命令,AI 默认用它们取片段、不整文件读取。初版清单(实现可扩充,不可削减): | 目标 | 示例 | |---|---| | 条目 | 读伏笔-031 的履历 / 读感情线-012 的当前状态与收尾计划 | | 大纲 | 读第 5 卷卷纲的指定小节 / 读总纲的结局段 | | 正文 | 读 0152 章结尾 500 字 / 读 0148-0152 章的章摘要 | | 时间线 | 读当前卷+上一卷 / 按"在场含某人"过滤 | | 设定 | 读林晚角色卡的 front matter / 读世界观的指定小节 | | 全文检索 | 查"玄阶令牌"在全书的出现章与上下文(Grep 正文——正文本身就是无损数据库) | | 报表 | 悬了太久清单 / 信息差蓄积报表("读者还不知道主角底牌已 23 章") | 写作材料组装(§8 第 3 步)默认只用以上接口取片段。 ## 12. 迁移映射(v6 → v7,一次性脚本) 迁移引导首先处理**市场版插件卸载 + npx 重装**(v7 不再走插件市场),然后: | v6 | v7 | |----|----| | `正文/` | `定稿/正文/`(补 front matter,"要写到的事"标"迁移") | | `设定集/` | `定稿/设定/`(角色卡补 front matter) | | `大纲/`(总纲、卷纲) | `大纲/总纲.md`、`大纲/卷纲/` | | foreshadowing | `大纲/伏笔/` 逐条成文件 | | plot_threads | 并入卷纲正文(不设条目) | | chase_debt / reading_power | 知识层与章属性(不设条目) | | `.webnovel/state.json` | 一次性展开进 `定稿/设定/` | | `summaries/` | `定稿/摘要/` | | project_memory patterns / scratchpad | `文风/文风铁律.md`(人工过一遍再入) | | references(题材模板/追读力/爽点节奏) | 知识层平移继承 | | `.story-system/` 提交链 | 压成初始 commit,原目录只读归档 | | index.db / vectors.db / projection_log | 删除(缓存重建;向量为可选插件) | 迁移不丢任何一个字;失败可整体回退。 ## 13. 不做清单 - ❌ 大一统 YAML 数据文件(多条记录一律每条一个 Markdown 文件) - ❌ 事件日志表与逐事件 witnesses 投影(被 信息差/ + 时间线在场列 取代) - ❌ 持久向量库(语义检索 = 可选插件,永不做事实召回主路径) - ❌ 常驻服务(浏览级信息 = 按需静态简报:零 token 脚本渲染单文件 HTML,只读 story repo,7.x) - ❌ 自建提交链 / projection_log / scratchpad - ❌ 模型自由评"文笔好坏"(两审职责里明确排除) - ❌ 模型裸奔编纲(连写硬停止条件:卷纲耗尽即停,§8.1) - ❌ 不经作者确认写入 `定稿/` 的任何路径(不变量 5) ## 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 逐条核验) | # | 变更 | 落点 | 来源 | |---|------|------|------| | 25 | D3 未登记伏笔检测:事实审查增 `unregistered_thread` 候选项,搭整章通读反查"正文疑似伏笔但无条目",门槛保守、恒非阻断、作者裁决 | §8 第 6 步 | Discussion #118 shuimushanjia(06-22) | | 26 | D4 设定大纲单向依赖入宪:设定层只记客观事实不写排程,依赖单向(大纲→设定) | 不变量 13、§4.2 | Discussion #118 freezero2020(06-26) | ### 0.1 → 0.5 历史决策 1-15 见 git 历史中的 0.5 版(要点:全中文目录;工作区默认不入 git;信息差轻量登记;章摘要作者过目;每条一文件 + 防呆方言 + 修复确认;「正典」→「定稿」;自动模式入规;运行时 Node;多宿主分层留白;机检扩充;反和解入律)。其中"每章必须结转承诺 + 豁免"已被 0.6 的声明制取代(见 16-18)。 ### 0.5 → 0.6(依据:PRD 1.0 §10.1,作者 2026-06-11/12 逐项拍板) | # | 变更 | 落点 | PRD 依据 | |---|------|------|---------| | 16 | 术语表全文贯彻(定稿动词/写章流程/全书近况/本章写作材料/本章要写到的事/两审/文风铁律/细纲/审稿/修复确认/吃书/摘要/悬了太久;"卡"与"棘轮"退场) | 全文 | §8 术语表、ADR 术语-1/2 | | 17 | 「承诺」大一统拆为三类条目:伏笔/悬念/感情线,统一引擎分类型目录;爽点归知识层、钩子归章属性、主线支线归卷纲 | §5、§2.1、§4.1 | ADR 账本-1 | | 18 | "每章必须推进"硬门检 + 豁免机制 → **声明制**(细纲声明章定位;履历须引用章内证据) | §5、§7 | ADR 机制-2 | | 19 | 条目编号中文全称(伏笔-031/信息差-021),"编号保留 ASCII"废止 | §2.1、§5 | ADR 术语-3 | | 20 | 自动模式重写:**删除自动验收,定稿永远归作者**;按批次审稿与定稿;叠加视图;停止条件 +"连续 3 章无条目变动" | §8.1、不变量 5、§3 | ADR 机制-6 | | 21 | 机检/两审职责重划:机检只做可计数项(含高频意象/句式体检),"要写到的事"核对与泄密判断移给事实审查(机检只出候选) | §8 第 5/6 步 | ADR 机制-1 | | 22 | git 隐身铁律入宪 + 启动前 git 健康检查 + 影响分析/顺势圆/"回到第 N 章" | 不变量 8、§9、§10 | ADR 机制-3/4 | | 23 | 新增工作目录层:工作目录 ⊃ 书目录、唯一启动点、`books.jsonl` 登记 + hook 注入、书仓库指路 AGENTS.md;Node ≥ 22(node:sqlite) | §2.0、§2.2 | ADR 安装-1/2/3、技术-1 | | 24 | 时间线按卷拆分;`记忆/`→`摘要/`;新增导出命令、灵感池、精准读取接口、建书态;金句库自动收割移 7.x 附录 | §4.4/4.6/4.7、§6.2、§7、§10、§11.1 | ADR 格式-1/2/3、机制-5、原则-1、范围-1/2 | **落地备忘**(不进格式法律文本,实现时别丢):题材平台预设(番茄/起点节奏差异)、许可证 MIT/Apache-2.0、AI 味承诺口径("读者不出戏",不承诺过检测器)、每章 AI 调用次数预算上限(实现时定数)。