# workflow-daily.md：日更续写工作流

本文件为"日更续写"场景的完整指引。SKILL.md 路由到本文件后，按以下流程执行。

> **日更准备步骤**：每章写作前 3 步——状态筛选 + 文风召回 + 意图确认，嵌入 Step 2 逐章循环。
>
> Step 2 必读四类对标资料：
> 1. `{对标书路径}/剧情/情绪模块.md`（读者需求 / 情绪引擎 + 可复现模块；缺失按下方「模块/节奏缺失」规则：v12 停下修复，仅 legacy 回退）
> 2. `{对标书路径}/剧情/节奏.md`（关键信息推进 + 情绪触动点 + 爆发节奏；缺失按下方「模块/节奏缺失」规则：v12 停下修复，仅 legacy 回退）
> 3. `{对标书路径}/文风.md`（整书级 ~4000 字，含原文锚点范例片段）
> 4. `{对标书路径}/章节/第K章_摘要.md`（按本章情绪/基调挑 1 章）；若同章存在 `第K章_深度拆解.md` 则加读，否则回退黄金三章深度拆解/文风文件里的可借鉴技巧
>
> 对标书路径查找：先 `{项目}/对标/{书名}/`，回退 `拆文库/{书名}/`。
>
> **文风缺失**：停止本章写作，不 inline 生成。报错：「对标书 X 缺少 文风.md。请用 `/story-long-analyze` 跑 Stage 6 生成文风，再 `/story-import` 同步。」
>
> **模块/节奏缺失**：v12 新契约对标书缺 `剧情/情绪模块.md` 或 `剧情/节奏.md` 时停止本章准备，提示重跑 `/story-long-analyze` Stage 3+ 或重新 `/story-import`；只有 pre-v12 legacy 拆文库可继续写作，story-explorer 必须在 `gaps.legacy_deconstruction` + `gaps.module_missing` / `gaps.rhythm_missing` 记录，依次低置信回退到 `拆文报告.md`、`文风.md` 可借鉴技巧、匹配章摘要 / `剧情/故事线.md`。
>
> **冲突规则**：`剧情/情绪模块.md` 与 `剧情/节奏.md` 是情绪和节奏的 canonical / 权威来源；`拆文报告.md`、`剧情/故事线.md` 是投影摘要；`文风.md` 只管风格。若摘要或文风与权威模块/节奏冲突，保留 `gaps.conflict`，正文意图跟随权威文件。
>
> **无对标项目**：跳过 Step 2.3，在 2.4 意图确认标记"无对标参考"。不读不存在的文风、不阻塞、不警告。
>
> **多本对标书**：从 `设定/题材定位.md` 读 `主对标书` 字段；缺失时用 `对标/` 下字典序第一本并提示用户补字段。
>
> 完整写前准备逻辑见 `SKILL.md` 的 Phase 4。

---

## 适用条件

- 项目已有 `正文/` 和 `追踪/` 目录
- 用户说"日更""续写""继续写"
- 目标：每次会话写 2-3 章（4000-9000 字）

---

## Step 1：快速上下文加载

**可选：使用 story-explorer agent 批量加载上下文**。如果项目已部署 story-explorer agent（检查 `.claude/agents/story-explorer.md` 是否存在），可以用 `Agent(subagent_type: "story-explorer", prompt: "项目目录：{dir}\n查询类型：context_load\n查询参数：准备写第 {N} 章")` 执行 `context_load` 查询，一次获取全部写作上下文。spawn 返回后直接使用其 results，跳过下方手动加载步骤。如果 agent 不可用或返回不完整，回退到下方手动加载。

手动加载（默认方式）：

| 序号 | 文件 | 用途 | 如果不存在 |
|------|------|------|-----------|
| 1 | `追踪/上下文.md` | 上次写作进度摘要 | 从 `追踪/伏笔.md` + `追踪/时间线.md` 重建 |
| 2 | `追踪/伏笔.md` | 待回收伏笔清单 | 跳过 |
| 3 | `追踪/时间线.md` | 当前事件时序 | 跳过（写作时从正文推断） |
| 4 | `大纲/细纲_第{N}章.md` | 本章写作计划 | **必须先补建**，不允许跳过 |

**按需加载角色文件**：从细纲中提取本章涉及的角色名，按需加载 `设定/角色/{角色名}.md`。如果细纲中未列出角色，跳过。

**按需加载创作公式**：当写作中需要引用创作公式约束时（如期待感公式、爽点公式、信息差公式），加载 `references/genre-writing-formulas.md`。默认不加载，避免无条件加载 1500+ 行文件浪费 token。

### 已写内容分层摘要

当项目超过 30 章时，`追踪/上下文.md` 中的已写内容摘要应按三层结构组织，压缩早期章节、保留近期细节：

| 层级 | 粒度 | 格式 | 维护时机 |
|------|------|------|----------|
| **近5章详记** | 近 5 章逐章摘要 | 保留现有格式（每章一段：事件+状态变化+伏笔） | 每章写完后更新 |
| **十章概要** | 每 10 章一段概要 | `章节范围 | 已写核心事件 | 角色状态变化` | 每写完 10 章生成一段 |
| **卷级总览** | 每卷一句话总结 | `卷名 | 已写主线进展 | 关键转折` | 每卷结束时生成 |

**示例（50 章项目）**：
```markdown
## 近5章详记（第 46-50 章）
第 46 章：主角进入秘境，发现上古遗迹...
第 47 章：遭遇守护兽，险胜后获得传承...
...

## 十章概要
第 1-10 章 | 主角觉醒金手指，进入修炼学院 | 从废柴变为内门弟子
第 11-20 章 | 学院大比，击败天才对手 | 获得长老关注，实力突破
第 21-30 章 | 离开学院，探索秘境 | 发现身世线索，结交盟友
第 31-40 章 | 卷入势力争斗，暴露身份 | 被追杀，实力再突破
第 41-50 章 | 反杀追兵，进入新地图 | 确认血脉传承，进入上界

## 卷级总览
第一卷·觉醒 | 废柴逆袭成天才 | 金手指觉醒，身世初现端倪
```

> **首次日更兜底**：如果 `追踪/` 目录下的文件全部为空或不存在（刚完成 Phase 3 但未日更过），额外加载 `大纲/卷纲_当前卷.md` 和最新一章正文来重建上下文。

> **确定下一章编号 N**：从 `追踪/上下文.md` 的"最后完成章节"字段读取。如果文件不存在，扫描 `正文/` 目录中编号最大的章节 +1。

确定本轮写作范围后直接进入 Step 2，不做"是否继续"式确认。K 默认 2-3 章；用户明确说"只写1章"/"日更3章"/"逐章确认"时按用户要求调整。仅在章节号冲突、细纲缺失、请求范围超过已有细纲、用户要求会改变大纲/追踪，或存在其他会导致写错的阻塞信息时暂停确认。

---

## Step 2：串行批量写作

一次加载多章细纲，但**必须在主会话内串行逐章写作**：不得把多章同时交给多个子代理并发写。长篇章节依赖上一章正文和追踪文件，并发会导致上下文断裂、追踪覆盖和标题去重失效。

**批量 continuation 规则**：进入本 Step 后，"继续"/"续写"/"日更"只表示继续当前日更批量流程。不得把这些词解释为跳过 Step 2.2/Step 2.3 的直接正文续写；也不得在每章之间重复询问是否继续，除非用户明确要求逐章确认或出现阻塞。

1. **读取细纲**：加载本次要写的 2-3 章细纲。新版细纲优先读取「内容概括（起因/发展/转折/高潮/结尾）」「情节安排（主线/辅线/事件线/感情线/逻辑线）」「人物关系和出场顺序」「情节细化」「结尾设定和钩子」；旧版细纲缺这些字段不阻塞，回退到核心事件、情节点序列、目标情绪、章首/章尾钩子、字数目标。
2. **逐章执行**（以下每步在每章循环内执行）：
   - 读细纲 → 按需加载角色设定
   - **2.1 标题预检**：扫描既有章节标题；如本章标题同名或明显重复，先按本章核心事件改名，并同步细纲标题与正文文件名
   - **2.2 状态筛选**：每章开始前必须确认以下来源已经在本轮 workflow 中读取或刚更新：本章细纲、上一章正文（或上一章刚写入的正文）、`追踪/上下文.md`、`追踪/伏笔.md`、`追踪/时间线.md`；涉及角色时，还必须确认 `追踪/角色状态.md` 或对应 `设定/角色/{角色名}.md` 的来源。"已加载"只指本轮 workflow 内实际读取/更新过的文件，不得用未标明来源的聊天记忆替代。角色最新状态优先从 `追踪/角色状态.md` 筛选（如不存在则从角色设定推断），待回收/推进伏笔从 `追踪/伏笔.md` 筛选；细纲不存在时仍按下方补建流程处理，不允许直接写正文
   - **2.3 对标模块/节奏/文风召回**：
     - 调 story-explorer 的 `benchmark_style_load` query_type（输入：项目目录 + 本章目标情绪 + 本章爽点类型 + 本章目标字数）一次性拿到：`{style_profile_path, style_profile_summary, selected_emotion_module, rhythm_reference, module_source_path, rhythm_source_path, matched_chapter_K, matched_chapter_techniques, anchor_excerpts, gaps}`
     - 若 `gaps.no_benchmark: true` → 跳过文风召回，在 2.4 意图确认标记"无对标参考"
     - 若 `gaps.missing_primary_contract: true` → 停止本章准备，按 `repair_action` 提示重跑 `/story-long-analyze` Stage 3+ 或重新 `/story-import`；不得进入 narrative-writer
     - 若 legacy 的 `gaps.module_missing: true` → 继续写作；`selected_emotion_module` 使用 `拆文报告.md` 读者需求 / 情绪引擎、`文风.md` 可借鉴技巧或匹配章摘要的回退摘要；仍无则写“无”
     - 若 legacy 的 `gaps.rhythm_missing: true` → 继续写作；`rhythm_reference` 使用 `拆文报告.md` 节奏与情绪触动点、匹配章摘要或 `剧情/故事线.md` 的回退摘要；仍无则写“无”
     - 若 `gaps.conflict` 或 `gaps.module_rhythm_conflict: true` → 意图确认必须说明冲突并按 `剧情/情绪模块.md` / `剧情/节奏.md` 的权威优先级执行；不得让 `文风.md` 覆盖情绪/节奏目标
     - 若 `gaps.profile_missing: true` → 按上文 fail-fast 流程停止
     - 若 `gaps.profile_degenerate: true`（文风不可用） → 跳过文风、回到默认 Gates 写作
     - 若 `gaps.tone_match_failed: true` → 仅用整书文风写作，不喂 matched_chapter
     - 否则原样传给 `style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、`module_source_path`、`rhythm_source_path`、`matched_chapter_K`、`matched_chapter_techniques`、`anchor_excerpts` 给 Step 2 末尾的 narrative-writer spawn prompt；其中 `selected_emotion_module` 必须进入情绪目标，`rhythm_reference` 必须进入节奏/爆发安排，`matched_chapter_techniques` 必须进入「文风召回指令」。写前准备记录必须保留 `gaps` 原值，尤其 `gaps.module_missing`、`gaps.rhythm_missing`、`gaps.conflict`、`gaps.matched_deep_dive_missing`；若 `matched_deep_dive_missing` 为 true，文风召回指令中明确写“同章深度拆解缺失，已回退黄金三章/文风技巧”，不得在后续报告中反转为 false
     - **无 story-explorer 时降级**：主会话手动按对标书路径查找，先读 `剧情/情绪模块.md` 选 `selected_emotion_module`，再读 `剧情/节奏.md` 选 `rhythm_reference`，再读 `文风.md` + grep `章节/*_摘要.md` 的「基调」字段找匹配章，然后读对应 `第K章_摘要.md`；如 `第K章_深度拆解.md` 不存在，改读 `第1-3章_深度拆解.md` 中与本章基调最接近的一章。模块/节奏文件缺失时先判定 v12 vs legacy：v12 停止修复，legacy 才按上方回退继续
   - **2.4 意图确认**：从细纲「目标情绪」字段确认本章情绪目标，综合状态筛选结果 + `selected_emotion_module` + `rhythm_reference` + 文风召回输出，用一句话写本章意图（情绪+节奏+模块+文风指令）。若新版细纲存在，意图确认必须显式带入：内容概括决定起承转合，情节安排决定主线/辅线/事件线/感情线/逻辑线的取舍，人物关系和出场顺序决定镜头进入顺序，情节细化决定代价兑现/收益兑现，结尾设定和钩子决定章尾承接；并落实两条 craft——① 发展/转折=爽点(高潮)的铺垫蓄势，爽点出手前先铺可指认的危机/期待（plot-emotion-system 倒推法，不铺=空洞）；② 装逼/打脸/揭露章把 视角/信息差 经 出场顺序 里的在场配角放大成差异化反应（plot-core-methods 信息差×人际×情绪/集体震惊）。例：「快节奏打脸——起因=账单暴露，逻辑线=发现→逼问→反证→公开代价；复现 M03‘信息差反杀’的读者期待，关键信息先压后爆，爆发后用一段冷却承接下一钩子；标点照文风里的停顿节奏、对话潜台词用问非所答。」
   - 写正文 → **字数验证（优先 Python 字符统计，`wc -m` 仅作 Unix 备选，< 目标90%则强制扩充）** → 检查钩子/爽点 → **正文元信息扫描** → 禁用词扫描
     - **正文元信息扫描**：标题行以外不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者`。这些词属于写作/工程元信息，必须改成角色当下能感知的事件锚点或相对时间；例如“比第一章那三秒开火更疼”改成“比那三秒开火更疼”。只有角色在故事世界内真实阅读/讨论“第X章”文本，或真实身为作者/读者并谈论读者身份时例外。
   - 每章写完后**立即更新**以下文件：
     - `追踪/伏笔.md`（新增/回收伏笔）
     - `追踪/时间线.md`（记录事件时序）
     - `追踪/角色状态.md`（如本章引起角色状态变化——身份、能力、关系、公众形象——则更新对应角色条目并追加变更记录）
     - `追踪/上下文.md`（只更新进度元信息：当前位置+已写字数+本次变更，不写详细角色状态/伏笔内容）
   - **质检提示**（可选）：本章写作完成。如需一致性检查，运行 `/story-review lean`。批量写作模式跳过此步骤，全部写完后再统一审查。
3. **不中断但不并发**：一章写完不问用户，直接写下一章（除非用户要求逐章确认）；下一章必须读取上一章刚写入的正文和追踪更新后再开始。

**资料研究（按需）**：如果写作中遇到需要查证的外部事实（历史年代、地理方位、职业细节等），暂停写作，spawn `story-researcher` agent 搜索并输出到 `参考资料/` 目录。研究完成后再继续写作。

---

## Step 3：质量检查

批量写作结束后，对本次所有新写章节执行 Phase 5 质量检查（至少包含）：

1. **禁用词扫描**：对照 `references/banned-words.md`，一级词命中即替换
2. **标题去重检查**：汇总本轮新写章节与既有标题；发现同名或明显重复时，回到对应细纲和正文文件统一重命名
3. **正文元信息扫描**：检查标题行以外是否混入 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词，命中即改成场景内表达；故事内真实阅读/讨论“第X章”或真实读者身份语境除外
4. **钩子检查**：每章章尾是否有钩子；如新版细纲有「结尾设定和钩子」，检查正文是否兑现收束状态、未解决问题和下一章推动力
5. **对照细纲核对**（正文有没有按细纲写到）：新版细纲存在时，核对正文是否消费了内容概括五段式、情节安排多线、人物关系变化/出场顺序、代价兑现/收益兑现；并加三条 craft 兑现核对（不达标→修复）：① 爽点出手前是否有可指认的危机/期待铺垫段落？指不出=空洞 → 回 Step 2 补铺垫情节点（plot-emotion-system 倒推法）；② 装逼/打脸/揭露章是否写出在场配角差异化反应（集体震惊/各异），还是只写主角动作？没有 → 补在场配角反应（plot-core-methods）；③ 详略是否按目的词（爽点/卖点点展开、过渡点带过、信息密度交替），还是均匀注水？均匀 → 删过渡、扩爽点点。旧版细纲只核对核心事件、目标情绪、章首/章尾钩子和字数目标
6. **伏笔盘点（仅本轮增量）**：只确认本批新增/推进/回收的伏笔已写入 `追踪/伏笔.md` 并更新状态；不得在日更流程中通读所有 session 或扫描全部正文做全量伏笔审计。全量伏笔审计只在 `/story-review` 或用户明确要求"全面检查伏笔"时执行
7. **标点确定性收尾**：对本批所有新写正文文件运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`（写模式，默认 `--quote-mode keep`），确定性去掉正文里的 `……`、破折号 `——`/`—`、双连字符 `--` 和独立行 `---`，避免长篇写到上百章后横线或长省略累积。脚本不再保留对话打断破折号；数字区间会改写为中文连接词，盐言「」不受影响。**由谁运行**：narrative-writer agent 不运行本脚本；主会话在 agent 写完返回后、针对实际落盘的正文文件路径运行（文件名是写完才确定的 `第XXX章_章名.md`）。

> 完整 Phase 5 检查清单见 SKILL.md Phase 5。

---

## Step 4：进度摘要

更新 `追踪/上下文.md`（每章完成时已增量更新，此处做最终汇总）：

```markdown
## 写作进度

- 最后完成章节：第 {N} 章
- 更新时间：{日期}
- 本期完成：{K} 章，共 {X} 字

## 当前状态

- 活跃伏笔：{N} 条（详见追踪/伏笔.md）
- 角色状态：最近变更 {角色名}（详见追踪/角色状态.md）
- 下一章细纲状态：{已有/需补建}
- 注意事项：{需要记住的关键决策或变更}
```

---

## 细纲缺失补建流程

当检测到细纲不存在时，不能跳过。按以下步骤补建：

1. 加载 `大纲/卷纲_当前卷.md`（本章对应的事件规划）
2. 加载本章涉及的 `设定/角色/{角色名}.md`（角色状态）
3. 读取最新一章正文（情节衔接）
4. 按 SKILL.md Phase 3 的新版细纲模板补建本章细纲，补齐内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定；无法从卷纲/正文/设定确认的字段写 `[待补充]`，不杜撰
5. 补建完成后继续 Step 2 写作

---

## 常见问题

| 问题 | 处理 |
|------|------|
| 细纲不存在 | 执行上方"细纲缺失补建流程" |
| 旧版细纲缺新版蓝图字段 | 不阻塞日更；本轮需要改纲/补纲时按新版模板回填，未知项写 `[待补充]` |
| 追踪文件为空 | 正常继续，写作中逐步填充 |
| 用户要求改大纲 | 提醒"改大纲会影响后续细纲"，确认后修改，标记受影响的细纲 |
| 写到卷末 | 提示用户"当前卷已完成，是否开新卷？" |
| 用户中断批量写作 | 保存当前章节，已更新追踪文件，下次从断点继续 |
