Novel Write — 章节撰写
目的
执行实际的章节写作。写作前自动加载角色数据确保不 OOC,写作后自动更新 manifest 和章节号,支持 commit/uncommit 章节锁定。
触发方式
用户调用 /novel-write,子命令:
- •
/novel-write— 撰写下一个待写任务 - •
/novel-write <task-id>— 撰写指定任务 - •
/novel-write refine <chapter>— 修改已有章节(受 commit 保护) - •
/novel-write commit <chapter>— 将章节标记为已定稿 - •
/novel-write uncommit <chapter>— 取消章节的定稿标记 - •
/novel-write status— 显示所有章节的 commit 状态
前置条件
- •
tasks/active.yaml中有 status=pending 或 status=in_progress 的任务 - •对应的角色文件已存在
工作流程
撰写 (write)
0. 预检
- •读取
tasks/active.yaml,找到目标任务 - •将任务 status 设为
in_progress
1. 上下文加载(关键步骤)
按以下顺序读取所有必要文件,构建写作上下文:
- •
创作原则
- •
constitution/principles.yaml— 核心主旨和价值观 - •
constitution/style-guide.yaml— 文风要求 - •
constitution/chekhov-rules.yaml— 伏笔状态
- •
- •
角色数据(OOC 防护核心) 对于任务中
characters_to_load列出的每个角色:- •主要角色:读取
profile.yaml+arc.yaml(定位当前阶段)+voice.yaml(定位当前阶段的语言变化) - •次要角色:读取对应的
.yaml文件 - •确定每个角色在此章节中所处的 arc 阶段
- •提取该阶段的
behavior_patterns和belief_at_stage作为行为约束
- •主要角色:读取
- •
情节上下文
- •对应的
plot/groups/<组名>.yaml— 当前 beat 的描述 - •
plot/_order.yaml— 前后情节组的上下文
- •对应的
- •
已有章节(参考用)
- •任务中
chapters_to_reference列出的章节 - •注意:committed 章节只读取,不可修改
- •任务中
2. 章节号分配
- •读取
chapters/_manifest.yaml - •读取
plot/_order.yaml的chapter_mapping - •根据当前情节组和 beat 在排列中的位置,确定章节号
- •如果是插入到现有章节之间,自动重新编排后续章节号
- •更新
chapter_mapping
3. 写作
根据加载的上下文执行写作:
- •遵循
style-guide.yaml的文风要求 - •角色的言行举止必须符合其当前 arc 阶段的
behavior_patterns - •角色的对话必须符合
voice.yaml中的语言特征 - •如果情节组中标记了需要种下的伏笔,在合适位置自然植入
- •如果标记了需要回收的伏笔,确保合理回收
- •字数参考
constraints.yaml的per_chapter设定
4. 后处理
- •将章节保存到
chapters/drafts/ch<NNN>.md - •在
chapters/_manifest.yaml中添加/更新条目:- •
status: uncommitted - •
characters_appearing— 实际出场角色 - •
foreshadowing_planted/foreshadowing_paid— 伏笔操作 - •
word_count
- •
- •同步更新
constitution/chekhov-rules.yaml的foreshadowing_registry - •将任务 status 设为
done - •自动触发
/novel-analyze对此章节进行检查
修改 (refine)
- •读取
chapters/_manifest.yaml,检查目标章节的status - •如果 status=committed:
- •拒绝修改
- •提示:"此章节已定稿 (committed),如需修改请先执行
/novel-write uncommit <chapter>" - •该章节可被读取引用,但内容不可更改
- •如果 status=uncommitted:
- •加载与首次写作相同的上下文
- •读取当前章节内容
- •与用户交互确定修改范围
- •使用 replace_file_content 精确修改(不重写整章)
- •更新 manifest 中的 word_count 和其他元数据
- •重新触发
/novel-analyze
Commit / Uncommit
commit — 将章节标记为已定稿:
- •检查该章节是否通过了
/novel-analyze检查(analysis_passed: true) - •如未通过,警告用户并确认是否强制 commit
- •设置
status: committed,committed_at: <当前时间>
uncommit — 取消定稿标记:
- •设置
status: uncommitted,committed_at: null - •警告用户:uncommit 后此章节将可被 refine 修改
输出文件
- •
chapters/drafts/ch<NNN>.md— 章节正文 - •
chapters/_manifest.yaml— 章节元数据 - •
plot/_order.yaml— 章节映射 - •
constitution/chekhov-rules.yaml— 伏笔更新 - •
tasks/active.yaml— 任务状态更新
注意事项
- •OOC 防护是强制性的:跳过角色文件加载视为流程违规
- •committed 章节的保护是内容级别的,不影响读取和引用
- •章节号是动态生成的,如果中间插入新情节组,后续章节号会自动递增
- •写作时遵循"展示,不要叙述"(show, don't tell) 的基本原则,除非 style-guide 另有指定
- •每章写完后,列出本章实际涉及的伏笔操作供用户确认