小说收口定稿阶段(Phase 2 · 最后一步)
激活条件
由 novel-writer-workflow-guide 路由激活,当:
- 所有章节初稿已写完(每章跑过
novel-chapter-sop) - 用户说"全书校一遍" / "准备发布" / "定稿前再扫一遍" / "收口"
- 跨章一致性四表已维护到最新
收口阶段的核心心法
定稿不是再写一遍,是挑问题改问题。
90% 时间在发现问题 + 分级,10% 时间在最小化修改。这个比例反了,就会把稿子越改越烂。
一、多轮独立 review 的艺术
为什么要多轮
单次 review 会漏。尤其是不同类型的问题需要不同视角:
- 读者视角(情绪曲线、爽点、卡读点)
- 编辑视角(结构、伏笔回收、跨章一致性)
- 校对视角(错别字、标点、引号、数字)
- 法务/合理性视角(司法程序、行业术语、常识)
一个 agent 在一轮里顾不过来。分轮 + 分视角。
全书 review 的五轮推荐
| 轮次 | 视角 | 用哪个 agent | 重点 |
|---|---|---|---|
| 1 | 结构/伏笔 | general-purpose | 大纲对齐、伏笔是否都回收、情绪曲线 |
| 2 | 跨章一致性 | general-purpose | 对照四表(道具/时间/术语/数字)逐项核 |
| 3 | 语言/风格 | Explore | 引号、破折号、markdown、风格漂移 |
| 4 | 合理性/常识 | codex(如有)或 general-purpose | 司法/行业/地理/年代常识 |
| 5 | 终读(全文连贯) | 新开 general-purpose | 整本连读一遍,看节奏和读感 |
硬性要求:最后一轮必须是新实例 agent,不得复用前几轮看过全书的那个。
独立实例的重要性
看过全书的 agent 会有"上下文偏见"(记得你 Ch 10 的铺垫,自动脑补 Ch 30 的转折合理)。新实例只看文字本身,像读者第一次翻开。
定稿前至少最后一轮终读必须用新实例。
二、P0 / P1 / P2 分级
不是所有问题都要改。分级 → 只改 P0 + P1。
分级标准
| 级 | 定义 | 例子 | 必改? |
|---|---|---|---|
| P0 | 硬错误:逻辑矛盾、人物记错、事实错误 | 姓氏前后不一、司法程序倒错、年份不符 | 必改 |
| P1 | 明显影响阅读:语病、钩子失效、伏笔漏回收 | 钩子强度不足、段落读不通、伏笔悬空 | 必改 |
| P2 | 风格/逻辑可改进:可以更好但不算错 | 某句可以更精练、某个比喻可换、某段节奏稍松 | 择优改,改完重走 review |
P2 的处理原则
P2 不是"坚决不改",是"择优改 + 改完必须重走一轮 review"。
该改的 P2:
- 文风问题(某段语言明显粗糙、节奏断了)
- 逻辑可优化(不是逻辑错,但可以更顺、更清楚)
- 读感问题(某处读起来卡一下)
不该改的 P2:
- 纯主观偏好("我觉得这句话可以再换个说法",但不改也没问题)
- 风格洁癖(追求"每个比喻都要新鲜"这种完美主义)
- 同一轮 review 里反复 ping-pong 的(每次改又觉得上次更好)
改 P2 的纪律
改 P2 必须满足三条:
- 不混着改:一个 commit 只改 P2,不和 P0/P1 混一批(否则很难分辨是谁引入的新 bug)
- 改完必须重跑:机械扫描 + 一轮独立 agent review,确认没引入新 P0/P1
- 一段只改一次:同一段/同一句不要反复改,第一次改了觉得不够好就认了
为什么改 P2 要谨慎
每改一次 P2,引入新 P0/P1 的概率不低(手抖改错标点、复制粘贴带入 ASCII 引号、误删一个字、误破坏钩子节奏)。
规矩不是"不改",是"改了要付代价(重跑 review)"。
如果一个 P2 你觉得改了读感会明显提升 → 改,重跑 review。 如果只是"可以更好但不改也挺好" → 放下。
分级记录模板
## Review Round N · [视角]
### P0(必改)
- [ ] Ch 12: 主角年龄写成 29 岁,按人物卡是 28 岁
- [ ] Ch 25: 时间标注"冬末",按时间锚应为"初春"
### P1(必改)
- [ ] Ch 07: 钩子强度 2,该章在情绪曲线应为 4 附近,强度不足
- [ ] Ch 18 伏笔"小灰猫"埋于 Ch 1,未见回收章
### P2(择优改,改了要重跑 review)
- [ ] Ch 03 某段比喻粗糙 —— **改**,改完重跑 Round N+1
- [ ] Ch 20 某段节奏略拖 —— **改**,和上一条一起
- [~] Ch 15 某句可以更短 —— **不改**(偏好,读着不卡)
三、最小必要改动原则
改 P0 / P1 时的纪律
改最少的字、最少的行、最少的段。
反面例子:
P0 是"Ch 12 年龄写错成 29 岁"。 错误做法:把整章 Ch 12 重写,顺便"优化"人物描写。 正确做法:grep "29 岁" 所在段,只把"29"改成"28"。周围一个字都不动。
判断规则
每次改动前自问:
- 这个改动能不能用 1 行 Edit 完成? 能就只改 1 行。
- 周围的段落有没有必要连带改? 如果 P0 只是个数字错,周围段落不要动。
- 改完会不会破坏附近的钩子/节奏? 如果改了会连锁,先看连锁范围,决定是否还值得改。
例外:连锁型 P0
如果一个 P0 牵连多章(比如改了某件事的时间,后面三章的时间锚都要调),必须连锁全改。但改之前先在修改清单里列出所有连锁点,一次改完,不留半成品。
四、Git 分批提交节奏
按"问题性质"分 commit
不是按"第几轮 review"分 commit,是按问题性质分:
| commit 类型 | 包含 | 例子 |
|---|---|---|
fix: 跨章一致性 |
四表对齐的所有改动 | 道具状态、时间锚、术语统一 |
fix: 司法程序 |
合理性视角查出的硬错 | 一审终审、起诉书用词 |
fix: 引号/标点 |
机械扫描问题 | ASCII 引号、破折号超限 |
fix: 钩子强度 |
P1 钩子失效 | 某章末尾加强钩子 |
fix: 伏笔回收 |
伏笔矩阵的漏收 | 补回收或明确删除伏笔 |
一个 commit 只做一类事。review 时很容易回滚单一类。
为什么不按轮次分
一次 review 会出各种问题,如果按轮次分 commit,后来回溯"这个字是什么时候改的"会看不清。按问题性质分,语义清晰。
commit message 模板
fix(consistency): 统一关键旧档复印件的叫法
- Ch 16 / Ch 22 / Ch 30 / Ch 37 共 4 处
- 全部改为"父亲当年灭门那份旧档复印件"
- 消除"前世查封笔录复印件"的歧义叫法
Review: Round 2 · 跨章一致性
收口阶段频率
- 每改完一类问题就 commit(不要攒到最后)
- 一天最多 5-8 个 commit(再多说明改动太散)
- 每次 commit 前跑一遍脚本扫描确认没引入新 bug
五、扩写 vs 压缩
字数不硬加(反常识)
"还差 2 万字"这种字数焦虑是长篇大忌。字数凑出来的章是最难读的章。
规则:
- 如果全书字数比目标少,先检查是不是某几章本该更厚(情节密度 / 情绪铺垫不够)——在这些章自然扩展
- 不是在过渡章硬加场景凑字
- 不是在对话里加"他沉默了一会"式废话
- 字数不够不等于要扩写,也可能是结构本来就紧凑,那就停在少一点的字数
压缩的优先级
如果某章字数过长(3000+)又情节薄:
- 先看有没有重复信息(前两章已说过的背景再说一遍)
- 再看有没有节奏松(三段对白能合成一段)
- 最后看有没有多余的氛围描写(单章氛围段 > 2 段通常过了)
不压人物心理独白——那是女频/男频情绪含金量最高的地方。
扩写的优先级
如果某章字数过短(< 1500)又情节分量重:
- 先看有没有情绪段缺失(角色做了重大决定但没内心戏)
- 再看有没有细节缺失(关键场景没有物理描写,读者想象不起来)
- 最后看有没有 buff 段/爽段缺失(对决赢了但没展开)
不扩对话——对话加水最容易水。
六、反常识经验
1. Review 越多不一定越好,但到 P2 层之后要停得住
有个拐点:前 3-5 轮 review 每轮都能抓出 P0/P1,第 6 轮开始大部分是 P2。拐点之后不是不改——P2 里是文风 / 逻辑问题的可以改,但改完必须重跑 review 确认没引入新 P0/P1。P2 里纯主观偏好的("这个比喻还能更好")就放下。
2. 破折号统计比"句子通顺"可测
正文每章破折号 ≤ 7 个。这是数字可测的指标,比"读起来顺不顺"这种主观判断稳。(novel-consistency-guards 里有脚本)
3. 最后一轮用新实例 agent 比用自己看一遍更有价值
自己读第三遍会跳读。新实例 agent 每个字都在看。发现的问题密度是自读的 3-5 倍。
4. "再读一遍觉得不好"90% 是 P2
写完一段时间后回头看,总会觉得"啊这段写得不够好"。这是作者的普遍焦虑。要判断是"具体能说出问题"还是"模糊地觉得不够好":
- 能说出具体问题(文风粗糙 / 逻辑绕 / 节奏卡)→ 可以改,改完重跑 review
- 只是模糊觉得不够好,说不出具体哪里 → 放下,这是纯主观焦虑
5. 钩子强度全书均值比单章峰值更重要
没必要每章都 5 分爆点。但全书均值 ≥ 3.5,读者追得动。均值低(大量 2 分)比峰值不够高更致命。
6. 字数不硬加、字数也不硬删
不硬加见上。不硬删:如果某章自然写出来 4000 字,情节合理读感好,不要为"每章控制在 3200"人工砍。章节字数有自然方差。
七、发布前最终检查清单
全书 review 收口前,过一遍:
跨章一致性
- 所有关键道具的状态前后一致(道具链表对过)
- 所有时间锚对齐,钩子"N 个月后"和实际时间差一致
- 所有术语全书统一(术语表对过)
- 所有关键数字(年龄/年份/比分/金额)全书一致
伏笔
- 伏笔矩阵每个都有明确回收章
- 没有悬空伏笔(埋了没收)
- 回收章里伏笔的回收是明面的(不是脑补的)
硬约束
-
check_consistency.py chapters/*.md全部通过 - 没有 ASCII 引号 / markdown bold / meta "Ch N"
- 每章破折号 ≤ 7
- 姓氏锁通过
风格 / 节奏
- 钩子强度全书均值 ≥ 3.5
- 钩子曲线不是长时间 2 分(读者会掉)
- 每 3-5 章有一个强度 4+ 的爆点
合理性
- 司法/行业/年代常识视角过一轮(P0 级)
- 人物做的事和人物卡动机/能力对得上
Review 轮次
- 至少 5 轮全书 review
- 最后一轮用新实例 agent
- 每轮 P0 + P1 全部处理
- P2 里文风 / 逻辑类的择优改,改过 P2 的轮次之后加跑一轮 review 确认没引入新 P0/P1
- 最后一轮 review 报告 0 P0 + 0 P1
- 每轮 review 记录已存档(可以放在
reviews/目录下)
Git 状态
- 所有改动分 commit 提交(按问题性质,不按轮次)
- 无未提交本地改动
- 如果有远程,已推送(用户授权后)
八、交付标准
全书定稿完成,交付物应该包括:
- 章节文件:
chapters/01.md...chapters/N.md - 框架文档:大纲、人物卡、世界观、钩子矩阵、伏笔矩阵、任务分解
- 一致性四表:道具链、时间锚、术语、关键数字(更新到定稿版本)
- Review 记录:
reviews/round1.md...reviews/roundN.md - 宪法和 specify:保持最新版本
- Git 历史:清晰的 commit 链,能追溯每次改动
与姐妹 skill 的关系
- 输入来源:
novel-chapter-sop产出的所有初稿章节 + 框架文档 - 调用对象:
novel-consistency-guards做全书机械扫描和跨章一致性核对 - 不做什么:
- 不负责单章写作流程(那是 chapter-sop)
- 不负责跨章一致性四表的维护逻辑(那是 consistency-guards)
- 不负责改框架层的大决策(改设定要回
novel-ideation)
用法速查
| 场景 | 动作 |
|---|---|
| 启动收口 | 跑一遍全书机械扫描,记录现状 |
| 安排 review | 5 轮 + 最后一轮新实例,按视角分 |
| 处理 review 结果 | 分 P0/P1/P2,只改 P0/P1 |
| 改一个 P0 | 最小改动,最好 1 行 Edit |
| 改完一类问题 | commit(按问题性质,不按轮次) |
| 准备发布 | 过"发布前最终检查清单" |
收口阶段的时间占比
一本小说总工时的分布(经验值):
- 构思(Phase 1):5%
- 框架(Phase 2 框架):10%
- 写作(Phase 2 写作):50%
- 定稿(Phase 2 收口):35%
定稿占 1/3 以上的工时是正常的。想在 5% 时间定稿的,最后稿子都有明显 bug。收口这一步最值钱也最无聊——但它决定了读者愿不愿意读完。