story-repo-spec-2026-06-10.md 38 KB

Story Repo 格式规格(v7 草案 0.8)

状态: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 逐条核验)。 地位: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 工作目录层(安装布局)

工作目录/                      ← 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——编号是作者天天要念的,必须是人话且不过度压缩。

<书名>/
├── .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(零第三方依赖:.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 文件:低频、平铺。

spec_version: "7.0"
书名: 示例书名
类型: 玄幻
每章目标字数: 3000
卷规模: 40                 # 参考值,不是硬约束
文体基线起: 1              # 文体指纹基线章区间,作者可改
文体基线止: 30
伏笔悬了太久章数: 10       # 超过亮"悬了太久"提醒(提醒不是错误)
悬念悬了太久章数: 10
感情线悬了太久章数: 30
连续弱钩上限: 3
关键章稿数: 3              # 卷首/转折/高潮章 best-of-N
自动确认细纲: false        # true 时细纲默认采纳提案,跳过停顿点 2(§8.1)
连写批次大小: 8            # 自动模式一个批次的章数,也是连写体检周期(§8.1)

4. 定稿/

草稿在工作区,审稿通过后入定稿——目录名即心智模型。

4.1 章节文件 定稿/正文/NNNN-标题.md

文件名:四位零填充章号 + 短横 + 标题。front matter 携带本章档案——章节自带自己的审稿记录,核查不依赖外部表。本文件仅由定稿步骤写出(作者改的是正文,不是 front matter)。

---
章号: 152
标题: 北境的雪
卷: 5
视角: 林晚
书内时间: 大历1023年冬月初三    # 自由文本,全书格式一致
字数: 3120
章定位: 推进                    # 推进|过渡|日常(细纲声明,§7)
钩子: 危机钩-强                 # 结尾钩子类型与强弱(章属性)
情绪定位: 压抑                  # 压抑|铺垫|小爽|大爽|转折(章属性)
伏笔:
  - 埋下 伏笔-058
  - 推进 伏笔-031
  - 回收 伏笔-019
悬念:
  - 推进 悬念-008
感情线:
  - 推进 感情线-012
本章要写到的事:                 # 确认细纲时点的清单(已经两审核对)
  - 林晚得知灭门真相的第一条实证
  - 伏笔-058 埋下:神秘老者来历
  - 结尾强钩:玄阶令牌现世
---
正文……

4.2 角色卡 定稿/设定/角色/<正名>.md

front matter 是机检消费的结构化字段(平铺、块列表);正文是自由设定文本。客观事实(境界/位置/持有/状态)由定稿步骤增量更新——这是"客观事实记账"的落点。只记设定原意与已发生事实,不写"第 N 章登场/第 M 卷洗白"这类排程(不变量 13)——排程归 大纲/卷纲,角色的未来走向归感情线等线索条目。

---
姓名: 林晚
别名:
  - 晚晚
  - 林师妹
状态: 在世                # 在世/已死/失踪/封印…
位置: 北境雪原            # 最后已知位置
境界: 筑基七层            # 量纲见 世界观.md
持有:
  - 青霜剑
  - 玄阶令牌
最后变更章: 152
---
## 设定
…自由文本…
## 典型对话
…该角色的原话样本(语气 few-shot 用,7.x 语气体检的数据源)…
## 关系
…自由文本,重要关系变化也应反映在时间线…

4.3 信息差 定稿/设定/信息差/信息差-NNN-<短题>.md

不追踪"每个角色知道哪些事件",只登记值得管理的信息差,每条一个文件。机检的泄密扫描只产出候选清单(角色对白/内心戏命中其不知道的信息差关键词),是否真泄密由两审的事实审查判断,不拦截流程。"装逼打脸蓄积了多少章"是信息差的派生报表(§11),不另建机制。群像戏的"谁在场"由时间线在场列(§4.4)补足。

---
知情人:
  - 大长老
  - 神秘老者
读者已知: false
登记章: 87
关键词:                   # 泄密扫描出候选用
  - 大长老
  - 灭门
  - 血书
---
## 内容
灭门真凶是大长老。当年血案的执行者是其门下死士。

4.4 时间线 定稿/设定/时间线/第NN卷.md

按卷拆分的 append-only Markdown 表,定稿时向当前卷文件追加一行。写作材料默认只带当前卷+上一卷;跨卷查询走 .cache(§11.1)。在场列可空:日常章不用填,群像戏、密谋戏建议填。

| 章 | 书内时间 | 一句话事件 | 在场 |
|----|----------|------------|------|
| 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 正文:

---
强度: 高                  # 高|中|低
状态: 进行                # 进行|已收尾|已放弃
开启章: 12
预计收尾: 第7卷           # 卷号或章号;强度"高"时必填
最后推进章: 152
---
## 描述
灭门真凶的身份。

## 收尾计划
第七卷宗门大会当众揭穿。开新条目时必填,防悬空。

## 履历
- 第12章:埋下
- 第87章:推进——血书线索现世(见本章中段"血书残页"一节)
- 第152章:推进——林晚取得实证(见本章结尾对峙段)

条目规则(声明制)

  • 不设"每章必须推进条目"的硬门检。细纲声明本章定位(推进章/过渡章/日常章,§7)——过渡章合法,消除模型造假账的动机。
  • 履历行必须引用章内证据(一句话指明出处),两审的事实审查核对引用是否属实——这是防假推进的真正防线。
    • 履历证据格式(RFC 决策 A3):第152章:推进——林晚取得实证(见本章结尾对峙段)
    • 格式:章节级别 + 自然语言描述(无段落编号)
    • 验证范围:
    • 重建器验证:章节文件是否存在(脚本能做的,§11)
    • 两审验证:读取整章验证语义正确性(AI 能做的,§8 第 6 步)
    • 理由:网文章节 2000-3000 字,全文读取压力可接受;避免段落编号维护的复杂性和易错性
  • 开新条目必须写收尾计划;强度"高"必须填预计收尾。
  • "悬了太久"= 当前章 − 最后推进章 超过该类型阈值,在全书近况里亮提醒。提醒不是错误:有些伏笔收不了可以接受,系统不逼作者填所有坑。
  • 放弃必须在履历留原因行(弃线也要留痕)。
  • 汇总视图(到期清单、悬了太久、活跃率统计)由 .cache/ 与全书近况提供,不维护任何汇总文件
  • 派生指标(不另建机制):章尾力度 = 结尾未收尾条目的强度;追读风险 = 悬了太久数量 + 连续弱钩计数。

6. 文风/

6.1 文风铁律 文风/文风铁律.md

系统对作者品味的全部认知,作者可审可改。front matter 为机器消费部分(块列表;口癖按"角色:词条"平铺,不嵌套):

---
禁词:
  - 眸子一缩
  - 嘴角勾起一抹
禁句式:
  - '不是.*而是'
口癖:
  - 林晚:自称"本姑娘"
---
## 铁律
…
## 反和解(按题材配浓度)
反派恶意落到实处、冲突升级到底、禁说教式和解、禁主角圣母——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 是写每一章前作者唯一需要看的文件,固定四段:

# 第 152 章细纲
## 全书近况(脚本生成)
- 位置:第 5 卷 24/40 章
- 悬了太久:伏笔-031(高,12 章未动)
- 连续弱钩:2 章
## 本章提案
本章定位:推进章。推进伏笔-031(林晚取得实证)、顺手埋下伏笔-058、结尾玄阶令牌现世收钩。
## 本章要写到的事(确认即生效)
- [ ] 林晚得知灭门真相的第一条实证
- [ ] 伏笔-058 埋下:神秘老者来历
- [ ] 结尾强钩
## 备选
B 方案:本章纯感情线过渡(定位改"过渡章"),伏笔-031 推到下章(代价:悬了太久 +1)

作者动作只有三种:点头 / 改 / 选备选。改 = 直接编辑此文件,或一句话让系统改(不变量 10)。

大纲偏离是决策点不是 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):

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 刚定稿的章是卷末章 卷复盘
5 章号到达体检周期 体检
6 其余 起草新章细纲(内环第 1 步)

v6 的 8 个命令全部内化为以上状态。作者只需要一个入口和"继续"。

11. 派生缓存 .cache/index.db

唯一允许的持久派生物(node:sqlite),gitignored,任何时刻可删。首查重建,重建器只读 定稿/大纲/文风 源文件。表(机器域,表名英文):chapters(front matter 展开,含章定位/钩子/情绪定位)、threads(三类条目统一存放,类型为列)、secrets(信息差,含"读者已知"与蓄积章数)、entities(名册)、fingerprints(文体指纹历史)。重建器即格式的参考实现——能完整重建,说明格式自洽。

删除 .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.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 调用次数预算上限(实现时定数)。