状态:0.4。相对 0.3 的变更:伞目录「定稿/」改名「定稿/」(作者拍板,贴作者心智:草稿在工作区,验收后入定稿)。相对 0.2 的变更:废除大一统 YAML 数据文件,承诺与信息差改为"每条一个 Markdown + 平铺 front matter"(§4.3、§5);新增防呆方言(§2.2)、修复卡(§10 第 0 态)、"对话即编辑器"不变量(§1.9)。决策记录见 §14。 来源:2026-06-10「最正确架构」讨论 + 绞杀式收敛计划 Phase 0。 地位:本规格是 v7 的法律文本。代码是格式的派生物——任何实现与本规格冲突时,改实现或改规格,不允许"代码里悄悄多存一份"。
一本书 = 一个 git 仓库。定稿/ 存已接受的事实与正文,大纲/ 存作者意图与承诺,文风/ 存品味,工作区/ 存棘轮之前的一切。接受一章 = 一次原子 commit。除一个可随时删除的缓存外,不存在任何持久派生物。
.cache/ 后,系统从源文件全量重建,所有查询照常回答。这是 CI 验收项。使用者全部是中文网文作者,目录结构、文件名、作者可见的字段名一律中文。ASCII 只保留给机器协议:条目编号(P-031、S-021)、commit 前缀(ch/vol/retcon/fix)、spec_version、技术文件(book.yaml、.gitignore、.cache/)。
<书名>/
├── .git/
├── .gitignore # 至少含 .cache/ 与 工作区/
├── book.yaml # 全书配置(§3)
├── 定稿/ # ── 棘轮之后 ──
│ ├── 正文/
│ │ └── 0152-北境的雪.md # 章节 + front matter(§4.1)
│ ├── 设定/
│ │ ├── 角色/
│ │ │ └── 林晚.md # 角色卡(§4.2)
│ │ ├── 信息差/
│ │ │ └── S-021-灭门真凶.md # 信息差,每条一文件(§4.3)
│ │ ├── 世界观.md # 世界规则、力量体系
│ │ ├── 时间线.md # append-only 表(§4.4)
│ │ └── 名册.md # 实体名册:正名/别名/首现章(§4.5)
│ └── 记忆/
│ ├── 章摘要/0152.md # settle 时入册(§4.6)
│ └── 卷摘要/第05卷.md # 卷复盘时生成
├── 大纲/ # ── 作者意图,可变 ──
│ ├── 总纲.md # 主题、金手指、结局承诺
│ ├── 卷纲/
│ │ └── 第05卷.md
│ └── 承诺/
│ └── P-031-灭门真凶.md # 承诺,每条一文件(§5)
├── 文风/ # ── 品味库 ──
│ ├── 风格宪法.md # (§6.1)
│ └── 金句库/ # 自动收割(§6.2)
├── 工作区/ # ── 棘轮之前,默认不入 git ──
│ ├── 决策卡.md # (§7)
│ ├── 上下文包.md # 本次渲染的上下文包,留档供审计
│ ├── 草稿-A.md # best-of-N 时 A/B/C
│ └── 评审报告/ # 机检与镜头评审输出
└── .cache/ # 唯一允许的派生缓存(§11)
└── index.db
中文路径的编码税通过以下硬约束消化,不靠运气:
encoding='utf-8';脚本与子进程入口统一注入 PYTHONUTF8=1;禁止依赖系统 locale。git config core.quotepath false(git log 里中文路径可读)。0152-、第05卷、P-031),不依赖中文字典序。非程序员作者手改 YAML 的三大手滑是全角标点、缩进、类型惊喜。系统写出的一切结构化内容必须遵守以下方言——作者照着系统写的样子改,就不容易错:
book.yaml 禁止嵌套映射,字段全部顶层。- 晚晚),禁止行内 [a, b]——块格式天然免疫全角逗号。全仓库唯一的纯 YAML 文件:低频、平铺、十行以内。
spec_version: "7.0"
书名: 示例书名
类型: 玄幻
每章目标字数: 3000
卷规模: 40 # 参考值,不是硬约束
文体基线起: 1 # 文体指纹基线章区间,作者可改
文体基线止: 30
高承诺最大搁置章数: 10 # 超过亮"节奏债"
连续弱钩上限: 3
关键章稿数: 3 # 卷首/转折/高潮章 best-of-N
草稿在工作区,验收后入定稿——目录名即心智模型。
定稿/正文/NNNN-标题.md文件名:四位零填充章号 + 短横 + 标题。front matter 携带本章合同与结转摘要——章节自带自己的验收记录,审计不依赖外部表。本文件仅由 settle 写出(作者改的是正文,不是 front matter)。
---
章号: 152
标题: 北境的雪
卷: 5
视角: 林晚
书内时间: 大历1023年冬月初三 # 自由文本,全书格式一致
字数: 3120
开启承诺:
- P-058
推进承诺:
- P-031
- P-007
兑付承诺:
- P-019
合同: # 接受时点的合同断言(已验收)
- 林晚得知灭门真相的第一条实证
- P-058 开启:神秘老者来历
- 结尾强钩:玄阶令牌现世
---
正文……
定稿/设定/角色/<正名>.mdfront matter 是机检消费的结构化字段(平铺、块列表);正文是自由设定文本。
---
姓名: 林晚
别名:
- 晚晚
- 林师妹
状态: 在世 # 在世/已死/失踪/封印…
位置: 北境雪原 # 最后已知位置
境界: 筑基七层 # 量纲见 世界观.md
持有:
- 青霜剑
- 玄阶令牌
最后变更章: 152
---
## 设定
…自由文本…
## 关系
…自由文本,重要关系变化也应反映在时间线…
定稿/设定/信息差/<编号>-<短题>.md不追踪"每个角色知道哪些事件",只登记值得管理的信息差,每条一个文件。泄密机检 = 扫描角色对白/内心戏,比对其不知道的信息差关键词;废笔机检 = 向读者复述"读者已知"的信息。群像戏的"谁在场"需求由时间线的在场列(§4.4)补足,不另建机制。
---
知情人:
- 大长老
- 神秘老者
读者已知: false
登记章: 87
关键词: # 泄密扫描用
- 大长老
- 灭门
- 血书
---
## 内容
灭门真凶是大长老。当年血案的执行者是其门下死士。
定稿/设定/时间线.mdappend-only 的 Markdown 表,settle 时追加一行。在场列可空:日常章不用填,群像戏、密谋戏建议填——它是后续查"谁见过什么"的唯一数据源。
| 章 | 书内时间 | 一句话事件 | 在场 |
|----|----------|------------|------|
| 152 | 1023冬月初三 | 林晚于北境得血书,玄阶令牌现世 | 林晚, 神秘老者 |
定稿/设定/名册.md防"同人异名/同名异人"。表:| 正名 | 别名 | 类型 | 首现章 |。机检在 settle 时比对正文新专名与名册,未登记的专名列入验收卡请作者确认(新实体 or 笔误)。
定稿/记忆/章摘要/NNNN.md:≤200 字,settle 前由模型生成、放进验收卡供作者扫一眼(可顺手改),随事务入册。卷摘要/第NN卷.md:≤500 字,卷复盘时生成:主线推进、关系变化、未兑付承诺清单。大纲/承诺/(每条一文件)系统的心脏。伏笔、悬念、感情线、爽点预期、立旗统一为"对读者的承诺"。文件名 P-031-灭门真凶.md(编号-短题);front matter 只有六个平铺短字段,描述、兑付计划、履历全部是 Markdown 正文——作者爱怎么写怎么写。
---
类型: 悬念 # 伏笔|悬念|冲突|关系线|立旗|爽点铺垫
强度: 高 # 高|中|低
状态: 进行 # 进行|已兑付|已弃置
开启章: 12
兑付期限: 第7卷 # 卷号或章号;强度为"高"时必填
最后推进章: 152
---
## 描述
灭门真凶的身份。
## 兑付计划
第七卷宗门大会当众揭穿。开启时必填,防悬空。
## 履历
- 第12章:开启
- 第87章:推进——血书线索现世
- 第152章:推进——林晚取得实证
结转规则(脚本执行,机检级):
当前章 − 最后推进章 > 高承诺最大搁置章数,亮黄灯进决策卡。.cache/ 与盘面提供,不维护任何汇总文件。文风/风格宪法.md系统对作者品味的全部认知,作者可审可改。front matter 为机器消费部分(块列表;口癖按"角色:词条"平铺为列表行,不嵌套):
---
禁词:
- 眸子一缩
- 嘴角勾起一抹
禁句式:
- '不是.*而是'
口癖:
- 林晚:自称"本姑娘"
---
## 铁律
…
## 节奏偏好
…
## 来自否决的规则
- 不要用天气开篇(出处:第 89/103/121 章三次否决)
规则入宪走"三次同类否决→系统提议→作者确认"的流程,每条带出处。
文风/金句库/settle 时若 diff(模型草稿, 作者终稿) 超阈值(默认:单段改动 > 30%),自动把"作者改后段落 + 场景标签"存为样本。渲染同类场景时作为 few-shot 注入。按场景分文件:战斗.md、对白.md、情感.md……每文件保留最近 20 条,旧的轮换归档。
工作区默认整体 gitignored——棘轮之前的一切允许丢失;合同的最终归宿是章节 front matter(§4.1)。想保留草稿史的使用者删掉 .gitignore 里那一行即可:settle 照常清空工作区,系统行为不变,历史由 git 自然留下。这是规范性要求——实现不得假设工作区未被 git 跟踪。
决策卡.md 是作者唯一需要看的界面,固定四段:
# 决策卡:第 152 章
## 盘面(脚本生成)
- 位置:第 5 卷 24/40 章
- 节奏债:P-031(高,12 章未推进)
- 连续弱钩:2 章
## 提案
推进 P-031(林晚取得实证)、顺手开 P-058、结尾玄阶令牌现世卡章。
## 合同(拍板即生效)
- [ ] 林晚得知灭门真相的第一条实证
- [ ] P-058 开启:神秘老者来历
- [ ] 结尾强钩
## 备选
B 方案:本章纯感情线过渡,P-031 推到下章(代价:节奏债 +1)
(如需豁免承诺结转,在此注明理由)
作者动作只有三种:采纳 / 改卡 / 选备选。改卡 = 直接编辑此文件,或一句话让系统改(不变量 9)。
| # | 阶段 | 执行体 | 文件效果 |
|---|---|---|---|
| 1 | brief | 脚本读盘面 | 生成 工作区/决策卡.md |
| 2 | 拍板 | 作者 | 决策卡的合同段固化 |
| 3 | pack | 脚本 | 组装 工作区/上下文包.md:盘面+合同+事实切片+信息差边界+近章结尾+反复读清单+风格锚点 |
| 4 | 渲染 | 模型(干净上下文) | 工作区/草稿-*.md;关键章 best-of-N |
| 5 | 机检 | 脚本 | 合同断言比对、泄密扫描(信息差)、禁词/复读、新专名比对名册、字数。不过关直接打回第 4 步,不打扰作者 |
| 6 | 镜头评审 | 模型 ×3(各自新鲜上下文) | 读者镜头(爽不爽/哪段想划走)、编辑镜头(结构与商业性)、事实镜头(只解释机检结果)→ 工作区/评审报告/ |
| 7 | 验收 | 作者 | 验收卡 = 草稿 + 三句话评审 + 待确认新专名 + 章摘要(扫一眼,可改)。动作:接受 / 改完接受 / 打回 |
| 8 | settle | 脚本,原子 | 见下 |
settle 的一次 commit 包含:草稿 → 定稿/正文/(front matter 写入合同与承诺结转);设定/ 变更(位置/状态/境界/持有/信息差/名册/时间线);涉及的 大纲/承诺/ 文件结转(front matter 更新 + 履历追加);记忆/章摘要/(验收卡定稿版);文风/金句库/ 收割(如触发);工作区清空。
commit message 约定(前缀 ASCII 是机器协议,便于 git log --grep):
ch(152): 北境的雪
承诺: +P-058 ~P-031 ~P-007 $P-019 # + 开启 ~ 推进 $ 兑付
设定: 林晚.位置=北境雪原; 信息差+S-021
vol(05): 复盘与下卷规划:承诺审计(本卷开/收/过期清单)→ 记忆/卷摘要/ → 与作者对谈产出 大纲/卷纲/第06卷.md → 顺手做伏笔机会扫描(模型提 3-5 个"本卷可埋、N 卷后响"候选,必须引用总纲的具体远期节点,作者勾选后生成承诺文件)。retcon(87): 修正大长老境界设定——显式事务,允许改定稿,要求 commit message 写明原因,设定/承诺同步,审计留痕。git status 发现定稿/大纲有未结转的手改 → 决策卡问一句"结转吗",确认后 fix(设定): … 入册。系统适应作者,不报错。git branch what-if/xxx,各推演 3 章纲要,读完 merge 或删分支。系统启动时按序判定,命中即停:
| 序 | 条件 | 下一步 |
|---|---|---|
| 0 | 任一源文件解析失败 | 修复卡:定位到行、展示上下文、模型提议保留意图的修复、作者确认。全角冒号/逗号出现在结构位置(键后、列表分隔)属确定性错误,可直接预修复后只报不问。永不带堆栈崩溃 |
| 1 | 定稿/大纲有未结转手改 | 提议 fix 结转 |
| 2 | 工作区有未完成事务 | 从中断的阶段继续 |
| 3 | 刚结的章是卷末章 | 卷复盘 |
| 4 | 章号到达体检周期 | 体检卡 |
| 5 | 其余 | 新章 brief(内环第 1 步) |
8 个旧命令全部内化为以上状态的阶段。作者只需要一个入口和"继续"。
.cache/index.db唯一允许的持久派生物,gitignored,任何时刻可删。首查重建,重建器只读 定稿/大纲/文风 源文件。表(机器域,表名英文):chapters(front matter 展开)、promises、secrets、entities(名册)、fingerprints(文体指纹历史)。重建器即格式的参考实现——能完整重建,说明格式自洽。
| v6 | v7 |
|---|---|
正文/ |
定稿/正文/(补 front matter,合同字段标"迁移") |
设定集/ |
定稿/设定/(角色卡补 front matter) |
大纲/(总纲、卷纲) |
大纲/总纲.md、大纲/卷纲/ |
| plot_threads / foreshadowing / chase_debt / reading_power | 逐条生成 大纲/承诺/ 文件 |
.webnovel/state.json |
一次性展开进 定稿/设定/ |
summaries/ |
定稿/记忆/ |
| project_memory patterns / scratchpad | 文风/风格宪法.md(人工过一遍再入宪) |
.story-system/ 提交链 |
迁移时压成一个初始 commit,原目录只读归档 |
| index.db / vectors.db / projection_log | 删除(index 进 .cache/ 重建;向量为可选插件) |
| # | 问题 | 决定 | 决策人 | 理由 |
|---|---|---|---|---|
| 1 | 目录语言 | 全中文目录 + 全中文作者可见字段;机器协议保留 ASCII | 作者 | 使用者全是中文网文作者;编码税以 §2.1 硬约束消化 |
| 2 | 工作区入 git? | 默认不入;删 .gitignore 一行即可选入,实现必须兼容两种状态 |
Claude | 默认保持"棘轮前可弃"的简洁,复杂需求一行开关满足 |
| 3 | 信息差简化够用? | 保持轻量登记;时间线加可选"在场"列覆盖群像需求 | Claude | 一列数据 vs 一套事件投影机制,成本差两个量级 |
| 4 | 章摘要谁拍板 | 进验收卡供作者扫一眼、可改,随事务入册 | 作者 | 摘要是长程记忆的源头,错一条污染后面几百章 |
| 5 | 每章必须结转承诺 | 保持硬机检;豁免权在决策卡、归作者、理由必填 | Claude | 规则要硬才有意义,但豁免是品味决策,归人不归模型 |
| # | 问题 | 决定 | 决策人 | 理由 |
|---|---|---|---|---|
| 6 | 大一统 YAML 对非程序员不安全 | 承诺与信息差拆为"每条一个 Markdown + 平铺 front matter";全仓库唯一纯 YAML 是 book.yaml | 作者提出,Claude 设计 | 全角标点/缩进/类型三类手滑;爆炸半径从全账本缩到单条;自由文本回归正文 |
| 7 | 手滑预防 | 防呆方言(§2.2):一律平铺、块列表、危险值加引号 | Claude | 作者照系统写出的样子改,不容易错 |
| 8 | 手滑兜底 | 解析失败出修复卡(§10 第 0 态),不崩溃;全角标点结构性错误确定性预修复 | Claude | 系统里永远有 LLM 在场,这是普通软件没有的兜底 |
| 9 | 根治路径 | "对话即编辑器"入宪(不变量 9) | Claude | 作者从头到尾不需要学 YAML |
| # | 问题 | 决定 | 决策人 | 理由 |
|---|---|---|---|---|
| 10 | 「正典」译名生硬 | 伞目录改名「定稿/」,结构不变(备选项:顶层拉平、「正史」) | 作者 | 贴作者心智:草稿在工作区,验收后入定稿 |