# writing-workflow.md：短篇写作工作流详解

本文件包含 story-short-write 的详细工作流程指引。SKILL.md 中只保留摘要和触发条件。

---

## Phase 2 设计任务（框架确定后执行）

### 开始前先加载 references（逐项检查，不能跳过）

- 写结构物件 → 加载 `writing-craft.md` ✅/❌
- 写反派/揭露方式 → 加载 `villain-and-reveal.md` ✅/❌
- 写大纲 → 已有 genre-writing-formulas.md 的题材速查表即可 ✅/❌
- 反转信息差验证 → 需加载 `reversal-toolkit.md` 或 `writing-craft.md` ✅/❌
- 伏笔回查 → 需加载 `writing-craft.md` ✅/❌
- 如某项不适用（如无反派），标注原因后可跳过

### 设计步骤

1. **设计结构物件**（1-2 个）：用 writing-craft.md「结构物件系统」模板
   - 填写：`- 第1现（第X节）：{场景}（{含义}）` 重复三次，含节号定位
2. **设计反派**（如有）：用 villain-and-reveal.md 反派模板
   - 填写：`{身份} + {动机} + {作恶方式} + {致命弱点} + {报应}`
3. **确定揭露方式**：从 villain-and-reveal.md 4 种真相揭露机制中选一种
4. **编写 小节大纲.md**：每节 1 行，格式如下：
   `主事件 | 子事件×3-5 | 情绪 | 读者新获知什么 | 钩子 | 伏笔/物件 | 动静 | 对话密度 | 目标字数`
   - 子事件必须功能明确（推动剧情/铺垫反转/升级情绪），禁止装饰性子事件
   - 子事件不足 3 个时用扩展规则（见 writing-craft.md 第 7 节「子事件不够时怎么扩」）
   - 子事件用 `->` 连接，每个子事件包含具体情节点描述+功能标签：
     `具体发生了什么{功能标签}` 如 `发现账单上多了一笔4800{发现}` / `把戒指冲进马桶{冲突}` / `他笑了{递进}`
     功能标签：`对话` / `冲突` / `伏笔` / `回忆` / `发现` / `递进`
     情节点描述要具体到"谁做了什么"，不能只写标签如`对话`或`冲突`
   - 动静标记：`动` 或 `静` 或 `动静`，相邻两节尽量交替；如因题材需要连续同标记，需确保节内有情绪变化（如：两节都是"静"，但第一节"疑惑→心酸"、第二节"心碎→崩溃"，情绪曲线仍在上升）
   - 对话密度：`高`（3+轮）/ `中`（1-2轮）/ `零`（全节无对话），尽量不连续 2 节标 `零`；翻阅日记、独自发现等场景允许例外，但连续零对话段落的情绪必须通过织入感官细节和身体反应来推进
5. **反转信息差验证**（outline 写完后、写作前必须验证）：
   - 回答：读者在第几节知道真相？用「揭穿节号 ÷ 全文总节数」计算位置百分比
     - < 50% → 不是反转，是延迟揭露（读者已知真相太早，后续缺少震撼）
     - 50-60% → 灰区，需审视反转力度是否足够（前文误导线索是否充分）
     - > 60% → 反转位置合理（读者等得够久，冲击力最大化）
   - 检查：至少有 1 条读者被成功误导的假线索（不是读者猜到后等角色追上来）
   - 检查：反转前是否铺垫了 ≥3 条指向真相的线索（线索要隐蔽，不是明示）
   - 验证：找一个人（或自我模拟）只看 outline，能否在反转前猜到真相？猜到 = 失败
6. **伏笔回查清单**（outline 写完后、写作前检查）：
   - 列出结尾所有关键元素（物件/信息/角色/关系变化）
   - 每个结尾元素在前文有 ≥1 次铺垫？没有 = 天降，必须补铺垫
   - 结构物件三现完整？（第 1 现在铺垫段，第 2 现在反转段，第 3 现在结尾段）
   - 铺垫节号与揭穿节号的间距 ≥ 3 节（间距太短铺垫无效）

### 写作前加载（按需，同时 ≤ 3 个）

- 必读：`format-and-structure.md`
- 必读：`anti-ai-writing.md`（写作时自检 AI 腔）
- 按题材加载 1 个：`genre-writing-formulas.md` 中对应题材速查表
- 按需加载：`writing-craft.md` / `villain-and-reveal.md` / `emotional-methods.md`

### 工作目录结构

```
项目根/
├── 拆文库/          # story-short-analyze 默认产出（数据源）
│   └── {参考小说}/
│       ├── 拆文报告.md
│       ├── 情节节点.md
│       └── 写作手法.md
└── {标题}/
    ├── 设定.md      # 核心框架 + 人设 + 反转铺垫 + 结构物件（含三现追踪表）+ 反派设计 + 对标摘要
    ├── 小节大纲.md  # 小节大纲：每节 1 行（主事件|子事件×3-5|情绪|读者新获知什么|钩子|伏笔/物件|动静|对话密度）
    ├── 正文.md      # 完整正文
    └── 对标/        # 当前短篇引用视图（可选，优先于项目根拆文库）
        └── {参考小说}/
            ├── 拆文报告.md
            ├── 情节节点.md
            └── 写作手法.md
```

### 操作原则

- 正文直接写入文件，不要只输出在对话里
- 精修时读取文件再改写，修改记录直接体现在设定.md的结构物件追踪中
- 设定.md 维护结构物件追踪表：
  `| 物件 | 第1现(节号/含义) | 第2现(节号/含义) | 第3现(节号/含义) |`

---

## Phase 4 精修打磨

### 精修检查清单

```
## 精修清单

### 开头
- [ ] 前 3 句话能抓住人？
- [ ] 没有无意义的背景介绍？
- [ ] 包含一个开篇钩子？

### 情绪
- [ ] 情绪曲线是否有明确走向？
- [ ] 反转前的情绪铺垫够不够？
- [ ] 反转后的冲击够不够？

### 反转
- [ ] 反转是否出乎意料？
- [ ] 反转是否合情合理（回看有铺垫）？
- [ ] 反转时机是否合适？

### 节奏
- [ ] 有没有拖沓的部分？
- [ ] 每句话是否都有存在价值？
- [ ] 字数是否在目标范围内？

### 格式
- [ ] 段落不超 60 字？无大段落？
- [ ] 段间无空行？
- [ ] 对话独立成行、引号风格符合项目/平台约定？
- [ ] 无「他说/她道」？

### 钩子
- [ ] 每 2-3 小节有钩子？
- [ ] 章末有钩子（悬念或余韵）？

### AI 腔
- [ ] 无禁止比喻：「命运的齿轮」「如潮水般」「仿佛春风」「心猛地一沉」「眼眶泛红」
- [ ] 同一身体部位/情绪描写不超 5 次（统计：手指/心/膝盖/眼睛，超限必须替换）
- [ ] 「像」使用频率：全文不超 10 处（含「像是」「不像」）
- [ ] 完整 AI 腔黑名单见 anti-ai-writing.md

### 技法
- [ ] 身体细节：有无情绪词可替换为身体状态？
- [ ] 结构物件：三现是否完整？（查设定.md追踪表）
- [ ] 一动一静：每节是否有动有静？
- [ ] 开头密度：前 100 字事件 ≥ 3？

### 结尾
- [ ] 结尾是否有余韵？
- [ ] 读者会不会想转发？
```

### 标点确定性收尾

精修后对 `正文.md` 运行 `node scripts/normalize-punctuation.js 正文.md`（写模式，默认 `--quote-mode keep`），确定性去掉叙述里的破折号 `——`/`—`、双连字符 `--` 和独立行 `---`。对话被打断的 `——`、数字区间和盐言「」不受影响。

### 删减原则

1. 不推动剧情的对话 → 删
2. 不铺垫反转的描写 → 删
3. 不推高情绪的心理活动 → 删
4. 读者能猜到的内容 → 缩短
5. 重复表达的情绪 → 合并

---

## 常见问题与解决方案

| 问题 | 原因 | 解决方案 |
|------|------|----------|
| 开头不抓人 | 在做背景铺垫 | 直接从冲突开始 |
| 中间拖沓 | 信息密度太低 | 删减或合并场景 |
| 反转没力度 | 铺垫不够或太明显 | 增加误导线索 |
| 结尾无力 | 反转后拖太长 | 反转后 500 字内收尾 |
| 全篇平淡 | 情绪曲线太平 | 加大情绪落差 |
| 感觉像流水账 | 缺乏情绪描写 | 加入人物内心感受 |
