# FBS-BookWriter 第 3 节（完整版）

**来源**：SKILL.md 第3节  
**范围**：S0 联网查证 + 原料激活方法 + 书型确认 + **执行状态机 ESM**  
**版本**：v2.1.2  

**权威说明**：本文件为原始 digest / 权威规范，详见 [`SKILL.md`](../../SKILL.md)，补充修订见 [`./skill-authoritative-supplement.md`](./skill-authoritative-supplement.md)，质量门禁见 [`../05-ops/quality-gates-brief.md`](../05-ops/quality-gates-brief.md)

---

## 目录

- ★ **主规范 SKILL.md**：[FBS-BookWriter 主规范](../../SKILL.md)
- ★ **参考**：[联网查证规则](../05-ops/search-policy.json) | [审校规范](../02-quality/quality-check.md) | [排版规范](../03-product/06-typography.md)（canonical，`typography.md` 为 stub）
- ★ **扩展规范**：[接入与路由规范](./intake-and-routing.md)（INTAKE 接入 → 书型确认 → S0-A/B → 原料激活 → S6 转化）| [会话协议规范](./session-protocols.md)（会话管理 → 暂停 → 恢复 → 多成员协作）

---

## 执行状态机（Execution State Machine, ESM）

> **ESM 强制优先级高于用户口头要求**：禁止跳步 / 跳阶段 / 跳过节点确认；即使用户要求快速跳过，也须在 SKILL.md 允许的范围内执行。
> **不同书稿类型使用不同执行路径（P0 强制）**：S0-S6 是 A 类路径；B/C 类使用 A 类精简版（S0-lite、S1 快速、S5-lite）。
> **ESM 执行原则**：状态转移须写入 `.fbs/esm-state.md`，每次执行前读取，禁止绕过 ESM 直接进入写稿阶段。

### ESM 状态图
```
╔══════════════════════════════════════════════════════════════════════════════════╗
║                         FBS-BookWriter 状态机                                   ║
║                           （执行流程）                                            ║
║                                                                                  ║
║   ┌────────────┐   ┌────────────┐   ┌──────────────┐   ┌────────────┐   ┌────────────┐
║   │  IDLE      │   │  INTAKE    │   │  RESEARCH    │   │   PLAN     │   │   WRITE    │
║   │ （空闲）    │   │ （接入）    │   │ （研究准备）  │   │  （规划）  │   │  （写稿）  │
║   └────────────┘   └────────────┘   └──────────────┘   └────────────┘   └────────────┘
║         │                │                 │                 │                │
║         ▼                ▼                 ▼                 ▼                │
║         └────────────────┴─────────────────┴────────────WRITE_MORE ──────REVIEW
║                                                      └─────────────┘
║                                                       ┌──────────┐
║                                                       │ DELIVER  │
║                                                       └──────────┘
╚══════════════════════════════════════════════════════════════════════════════════╝
```

### ESM 状态转移表（含书稿类型对应规则）
| 状态 | 含义 | A 类执行路径 | B 类执行路径 | C 类执行路径 | 关键产物 |
|------|------|-------------|-------------|-------------|-----------|
| **IDLE** | 等待启动 | 接受/书稿激活请求 | 接受 | 接受 | 无 |
| **INTAKE** | 接入阶段 | 书型+路径+原料激活 | 书型+快速确认 | 快速确认 | 接入记录 |
| **RESEARCH** | 研究查证 | S0 联网+S0-E 检查 | S0-lite（轻量）+路径+1次联网搜索 | 不 查证 | search-ledger 记录 |
| **PLAN** | 规划阶段 | S1+S2+S2.5 完整规划 | 快速规划+MVD+Report Brief | 快速 PLAN（简化版） | Brief 存档 |
| **WRITE** | 写稿阶段 | Chapter Brief+分章写稿 | 报告段落/子报告 | 简短文档 | 章节文件 |
| **REVIEW** | 审校阶段 | 去AI味+全量审校 | 报告类审校 | 报告类审校 | 审校报告 |
| **WRITE_MORE** | 补写+扩写 | 触发后 RESEARCH 补查 | 报告补充 | N/A | 回到 WRITE |
| **DELIVER** | 交付与转化阶段 | S4（排版）S5（对外交付）S6（转化与发布准备+文件清单+章节汇总+目录） | S5-lite+轻量审校+S6 转化摘要（精简版，3-5页摘要） | 快速输出 | 交付物 + 发布准备清单 |

### ESM 状态检测（P0 强制，防止无状态执行）
> **使用场景**：每次执行前必须检测 ESM 状态，防止出现章节漏写、台账状态紊乱。
```
ESM 状态检测流程（3步骤，每次执行前必须执行）
  Step 1：读取状态
    检查 .fbs/esm-state.md 是否存在 / 内容是否完整
    检查 当前阶段 [S0]/[S1]/[规划]/[写稿]...
    检查 书稿类型（A/B/C）
  Step 2：确认状态
    检查 当前 ESM 状态是否与书稿进度一致

  Step 3：恢复
    检查 ESM 状态后：WRITE → Brief 已写 → 继续 / 若缺 → PLAN（从规划重新开始）
    检查 RESEARCH → 已完成 5 章以上，可进入 PLAN + 写稿开始执行
    检查 4/4 章节确认/4 章节目录完整 → 可进入 PLAN
    检查 2/4 章节目录完整 → 提示补充
  Step 3.5（P0 强制）：WRITE/REVIEW 继续写稿前
    检查 最新写稿内容/章节目录是否完整/规范/书型版本变更
      若 台账 search-ledger.jsonl 字段缺失（yearSourceConfirmed/materialStatus）
        则 提示用户说明：{缺失内容}，补充记录
        则 执行 WebSearch 查验补充数据
    检查 .fbs/节点确认记录.md，确认当前阶段已完成节点确认
      若 当前阶段节点确认未完成，则提示用户：{阶段}节点确认未完成，暂停写稿
    检查 S0 已完成联网查证，满足充分性条件才可进入 S1
  Step 4：输出状态日志（每次执行结尾输出 1 行）
    输出格式：`[ESM 状态] 当前{状态} | 阶段:{当前/总{章}} | 健康:{良好}`
    状态日志输出到 `.fbs/esm-state.md`
```

### 状态持久化格式

```
状态持久化 节点记录 文件格式
书稿名称：{书稿中文名/英文/简称/前缀/书稿类型/最近写稿}（书稿类型 {A/B/C}）
书稿类型：{A/B/C}（书稿类型，与最近执行方式一致）
当前阶段：{当前阶段说明 / 上次{写稿完成节点}}
书稿状态：{当前阶段说明}
时间：{时间}
当前ESM状态日志 [ESM 状态] 当前{状态} | 阶段:{当前/总{章}} | 健康:{良好}
```

**格式说明**：状态日志路径是 `.fbs/esm-state.md`，输出格式须包含`[当前状态] 书稿名 书稿状态说明 当前阶段/完成节点`

> **日志精简规则**：A 类项目使用完整 ESM 状态日志（含每章记录）；C 类项目使用精简版，禁止对非 A 类项目输出完整日志。

### 状态转移确认格式（P0，防止状态机跳步）

> **注意**：ESM 状态转移须执行确认格式，防止跳步/跳阶段/跳过节点确认，防止无状态执行
> **场景**：每次阶段转移前，先确认上一阶段是否完成，并输出确认格式
```
状态转移确认格式（阶段转移时必须输出确认格式）
{书稿名} 已{状态}
书稿类型（{A/B/C}）
阶段进度（{当前阶段说明 / 入场条件}）
关键产物已完成（{关键产物完成确认说明}）
[状态] 状态:{状态} | 完成{确认}
确认 ESM 状态转移后才可以继续下一阶段
```

> **不可或缺的确认行**：每次阶段转移/书稿启动后输出：`` `[状态转移] 上一 书稿名 状态转移确认 成功/状态路径 成功/状态（完成确认）` ``

**状态转移确认规范**：
- 状态转移必须经过检测，确认 **上一阶段关键产物已完成**
- 禁止跳过上一阶段的关键产物确认直接进入下一阶段
- 输出 `[状态转移] 上一 书稿名 状态 路径 成功/（完成）`

### RESEARCH → PLAN 状态转移条件
> **注意**：禁止在 RESEARCH 未完成联网查证的情况下跳入 WRITE，RESEARCH 充分性不满足不得进入 PLAN。
```
RESEARCH 满足以下条件时才可以切换到 PLAN：

  条件一 联网查证充分性（3 条规则）
    已完成 3 次以上 联网查证 + 查证结果摘要 + 原料充分性（L2）+ 目录确认
    若 4/4 = 充分性通过（RESEARCH → PLAN）
    若 3/4 = 联网查证不充分，继续执行联网查证，补充查证
    若 2/4 = 联网查证严重不足，强制等待查证完成

  条件二 完成度确认（需满足 5 条且 query 充分 && 目录完整 && 充分性满足/通过）
    充分性满足 + 原料完整（RESEARCH → PLAN）

  条件三 B 类直接跳过（适用 B 类简化路径）联网查证充分性不硬性要求
    跳过 RESEARCH → PLAN 直接进入
```

### WRITE 状态转移条件（B 类扩展）
> **说明**：B 类报告类书稿 ESM 使用简化路径，WRITE 转 RESEARCH 须经确认，WRITE 触发 WRITE_MORE 后 RESEARCH 再次执行，再回到 WRITE，WRITE 完成后进入 REVIEW
```
WRITE → B 类报告类书稿写稿
  B 类书稿条件：
    检查 联网查证是否完成，L2 以上联网查证 [确认] 联网查证
    检查 WRITE 转 WRITE_MORE
      若 WRITE_MORE（联网补查）→ 再次执行 WRITE
      若 联网补查失败 → 回到 WRITE（继续写稿）
    检查 联网查证 3 次以内后，触发 → WRITE 转 REVIEW

  A 类书稿的 WRITE_MORE = 联网查证补查触发 RESEARCH，WRITE 暂停
  C 类书稿没有 WRITE_MORE（跳过）
```

### ESM 状态机差异对照表（A/B/C 书稿类型）

> **注意**：A 类书稿使用完整流程，B/C 书稿按照差异使用精简路径

| 状态 | A 类（叙事/非虚构飞） | B 类（报告/行研/分析）| C 类（简短/文档）|
|------|----------------------|----------------------|-------------------|
| **INTAKE 接入** | 书型+路径+原料激活，详见 [`intake-and-routing.md`](./intake-and-routing.md) | 书型+快速确认 | 快速确认 |
| **RESEARCH 查证** | S0-A（联网查证）+完整查证+S0-B 原料激活+L4/L5 深度 | S0-lite+轻量1次联网 | 不查证 |
| **PLAN 规划** | 完整书型（B/C）路径+S1、S2 完整目录+S2.5、Brief 完整规划 | 快速规划+MVD+Report Brief | 快速规划|
| **WRITE 写** | Chapter Brief+逐章写稿 | 报告段落/子报告 | 简短输出 |
| **REVIEW 审** | 去AI味+多角色审校 | 报告类轻量审校 | 报告类轻量审校 |
| **DELIVER 交付** | S4（排版）S5（对外交付）S6（转化与发布准备+文件清单+章节汇总+目录，骨架检测） | S5-lite+轻量审校+S6 转化摘要（精简版，3-5页摘要） | 快速输出 |
| **WRITE_MORE 补写** | 支持 | 报告补充 | N/A |
| **字数门槛** | S2 目录规划 | ≥3000字 | ≥3000字 |
| **联网深度** | L2 / 深度L3 | 中等L2 | L1 |
| **章节字数** | 目标字数 | ≥3000字 | ≥3000字 |

### ESM 状态差异说明

ESM **核心价值**：强制状态化执行，防止跳步，保证 Chapter Brief 已塢存档，MVD 已核对，禁止**无状态**跳步执行
| 场景 | ESM 行为 | 禁止行为说明 |
|------|-----------|-------------------|
| **漏写** | 台账检测到章节写稿中断 | 回 ESM 状态机恢复，防止遗漏 |
| **补写** | 触发 RESEARCH（RESEARCH 补查）| 回 RESEARCH 补充联网查证 |
| **跳步** | 禁止 WRITE → Brief 未写就执行 | Brief 未存档，禁止写稿 |
| **骨架章节** | 触发 B 类 PLAN 阶段=MVD+Report Brief | MVD / Report Brief 未存档 |
| **反复扩写** | 触发 WRITE → WRITE_MORE → WRITE（回到 WRITE 状态） | 禁止在 WRITE 中反复联网查证不结束 |

---

## 快速起步清单（§3 规范，P0）
> 以下12 条是写稿启动最常见问题，须全部确认
- [ ] **★v1.7.0 强化★** B/C 类书稿使用 ESM 精简路径，A 类完整路径，禁止 B/C 跑完整 A 路径（**禁止 A 路径全量执行**）
- [ ] **★v1.7.0 强化★** 确认书稿类型 ESM 书稿执行路径确认，确认后禁止跑偏执行路径，须按照 ESM 状态机执行（**v1.7.1 路径确认后须写入 `.fbs/esm-state.md`**）
- [ ] **★v1.7.2 强化★** 联网查证须有 ESM 状态机确认后才执行，确认路径是否进入 WRITE → Brief 写入文件（**明确执行 PLAN**（规划阶段执行完整规划））
- [ ] **★v1.7.1 强化★** S0 联网查证规范：联网查证每次须记录查证结果，联网查证不足须补充查证，不足的条数 + 充分性 + 深度达标 + 覆盖充分性 + 目录规划阶段必须完成，才可进入 S1
- [ ] **★v1.7.1 强化★** S0 联网查证输出格式规范：S0 联网查证格式须包含 [已完成][X/N 条目][查证结果][时间戳][格式规范] 等确认信息，不允许省略
- [ ] **★v1.7.2 强化★** S0 联网查证要求：S0 query 中须含年份 `[具体年份]`，必须明确年份/时间戳（如 `2024/2025 查询关键词`），禁止省略年份时间的 query 查询
- [ ] 联网查证 **query 不能省略** `"近期"` / `"最近有什么新进展"`等泛泛 query，S0 需要精准
- [ ] 书稿执行中确认 `.fbs/` 台账文件夹存在，以及 CLI，确认 `search-ledger.jsonl` 存在
- [ ] 目标 **≥10 万字 以上 ≥5 章**：执行 `large-scale-book-strategy.md` 规范 M1/M2/M3
- [ ] 确认 Brief 粒度设置：`volume/chapter` 规范设置 Brief，否则不知道 Brief 粒度，若无设置，则 `briefGranularity=none` 时
- [ ] Brief 字数控制在：`短小 Brief，精炼，20字以内`
- [ ] 确认联网查证记录到 `.fbs/search-ledger.jsonl`，联网查证结果必须包含记录，**禁止联网查证不记录搜索结果**
- [ ] 确认写稿流程与规范（阶段、规范等）是否遵循当前规范

### 快速起步 11 条（P0/P1）
1. **★v1.7.0 强化★** B/C 类书稿 ESM 路径确认，A 类完整路径（书型确认后须写入 ESM 状态）
2. **★v1.7.0 强化★** 联网查证路径确认，书稿执行路径不跑偏
3. **★v1.7.1 强化★** ESM 状态机确认：确认路径，确认执行完整性
4. **★v1.7.1 强化★** S0 联网查证充分性确认：联网查证充分性、深度达标、目录规划完整性
5. S0 联网查证格式规范：query 格式须含年份，禁止省略 `2024/2025 相关词`
6. 确认书稿 `search-ledger.jsonl` 字段，确认联网查证格式规范符合规范
7. Chapter Brief 完整性确认
8. 100 万字以上须执行 S0 充分性检查 → M3
9. 禁止骨架章节直接进入 S6，禁止骨架章节不注明
10. **★v1.7.2 强化★** 联网查证必须有 ESM 状态机确认，确认路径是否执行完整规划，S2 规划确认进行时 WRITE → Brief 写入文件，才可以进入写稿（强制检查）
11. **★v1.7.2 强化★** S0 联网查证年份查询：S0 必须明确年份/时间戳（如明确 `6月` 等）

---

## §3.0.5 联网查证全局规范（含阶段规则）
> **说明**：本节是 §3.0.5 全局联网查证规范，覆盖各阶段联网查证规则，更多配置见 [`../05-ops/search-policy.json`](../05-ops/search-policy.json)

| 阶段 | 联网规范 | 说明 |
|------|----------|------|
| **S0** | 每次/多次联网查证 | **必须**使用 WebSearch/WebFetch 工具，`search-policy.json` 的 `s0ParallelQueries` 并发限制 |
| **S1** | 书型确认场景联网查证，可选 | 仅在书型确认场景执行联网查证 |
| **S2** | 目录规划联网查证，可选 | 每次 1 次以内查证 |
| **S2.5** | 节点确认阶段**不执行**联网查证，禁止在节点确认阶段重新查证/简化**可选联网查证**，S0 联网充分性已完成则不需重新查证，不需要联网确认充分性 |
| **S3 写稿** | **联网查证每章必须执行** | 每章联网查证，配置见 `search-policy.json` 的 `chapterWriting.minQueriesPerChapter`，超时处理见 §3.3.1 联网查证超时处理规则 |
| **S5** | 数据新鲜度联网查证（可选） | 验证查证数据的时效性 |

### 联网查证权威性与 SKILL / policy 规范
联网查证规范**优先级**：SKILL 主规范**高于**所有联网查证子规范

| 优先级 | 规范 |
|------|------|
| [`SKILL.md`](../../SKILL.md) 第0节 **全局联网查证规范** | 联网查证规范最高优先级 |
| 本节 §3.0.5 规则 | 覆盖整体联网查证规则 |
| [`search-policy.json`](../05-ops/search-policy.json) | 联网查证配置，含阈值限制 |
| **本节 [§3.0.6](#306-联网查证时效规范)** | **时效 / 年份 / 来源 / 可信度 / 禁止行为等 P0/P1 规范** |

**规范执行**：联网查证须使用 WebSearch/WebFetch，禁止**不用 WebSearch/WebFetch 工具直接写稿**，联网查证须记录结果到 `.fbs/search-ledger.jsonl`

**禁止**：严禁使用 query 泛泛查询 + 不记录查证结果，**禁止省略**联网查证时效性约束

### §3.0.5-B 联网查证工具失效处理（P0 强制，v1.9.0 新增）
> **来源**：2026-04-02 某项目 P0-3，某章节写稿 23 章时，联网查证工具失效，Agent 默认降级继续写稿但未告知用户
> **教训**：联网查证工具失效时，须立即暂停，告知用户

**工具失效处理（P0 强制，禁止继续写稿）**：
```
§3.0.5-B 联网查证工具失效处理
Step 1：检测联网查证工具是否正常工作：执行一次测试 query 查证
  调用 WebSearch：query = {测试关键词}，确认工具是否可用
Step 2：发现联网查证工具失效
Step 3：立即暂停写稿，告知用户工具失效原因

  告知用户停止写稿：
  > ⚠ 联网查证工具不可用，请确认
  > 联网查证工具失效，推荐继续操作：
    A. 等待联网查证工具恢复，再继续
    B. 确认"已知风险，降级写稿（不联网查证）"
       [所有后续章节将不进行联网查证，降级写稿]
    C. 暂停写稿，等待联网查证工具恢复
Step 4：用户选择 B 后，后续写稿降级处理
Step 5：告知用户，降级期间 S5 阶段须重新确认联网查证内容
```

**降级处理**：即使降级，禁止联网查证工具失效后**无通知**继续写稿，须告知用户

---

## §3.0.6 联网查证时效规范

> **说明**：本节是 §3.0.5 的补充，覆盖联网查证时效性规范，见 [`search-policy.json`](../05-ops/search-policy.json) 的 `temporalAccuracy` / `searchEnhancement` 配置项，**必须执行**

### 年份时间戳强制查验（P0 规范）
**行为**：联网查证每次 query 须包含精确年份/时间戳，不允许省略年份
**规范**：
```
S0 联网查证时，WebSearch query 中须包含年份时间戳，query 应当包含当前年份
标注格式：[S0] 联网查证完成时间：YYYY年MM月DD日（通过 WebSearch，联网查证年份时间戳确认）
```

- 使用 WebSearch 时，query 须包含年份，禁止省略年份
- `search-policy.json` 配置：`temporalAccuracy.requireTimestampSearchAtS0: true`

---

### 年份硬编码禁止规范（P0 规范）
**行为**：禁止在书稿中直接写入不带来源的年份，如 2023、2024 等
**规范**：
| 行为 | 处理方式 |
|------|------|
| 联网查证结果含年份，2024 等 | 必须 WebSearch 确认年份，年份须与查证结果一致 |
| 书稿含年份，未联网查证 | 联网查证后标注年份来源，不可直接写入 [未查证来源] |
| 书稿含年份的 202X 字样 | 联网查证确认年份，确认书稿中年份是否正确 |
| 年份不确定，仅凭知识 | 联网查证确认年份，确认来源后才可写入 |

- `search-policy.json` 配置：`temporalAccuracy.forbidBareYearWithoutSource: true`，`temporalAccuracy.yearLabelPolicy: "search_before_write"`

---

### 关键词时效性注入规范
**行为**：联网查证 query 须注入时效性关键词，帮助查证结果更新
**规范**：
- S3 写稿中，联网查证 query 须**加上 1 个**时效关键词，query 中须包含年份 `2024` 等关键词，符合 `search-policy.json` 的 `searchEnhancement.freshKeywordInjection` 配置
- 联网查证结果须验证时效性，防止过时数据写入书稿
- S5 审校阶段须检查是否含过期数据，联网查证是否覆盖近期信息

---

### 联网查证 query 优化规范（P1）
**行为**：联网查证 query 须精准，避免泛泛查询，尽量精准化 query
**规范**：
```
联网查证 query 优化建议
优化 query：核心论题 + 年份关键词 + 精准化限制 / 行业限制 / 域名限制，精准化 query
优化后记录到 .fbs/search-ledger.jsonl 字段，kind=search，queryOptimization 字段，记录优化后的 query
```

- 每次 query 优化记录，若再次执行类似查证，使用上次优化后的 query 作为基础
- `search-policy.json` 配置：`searchEnhancement.selfImprovingStrategy`

---

### 不确定性自动查验规范（P0 规范）
**行为**：写稿中如果存在不确定性（事实不清、数据未确认），须自动触发联网查验
**限制**：联网查证充分性阈值 < 0.8 时，**须**触发补查

> 不确定性查验来源于书稿写稿不确定内容，须联网查验

**规范**：
```
不确定性自动查验规范
执行 WebSearch 查验，query = {不确定内容关键词}（联网查验不确定内容是否有明确资料）
查验结果摘要：充分 / 不确定内容仍不清楚（须标注）
```

- `search-policy.json` 配置：`searchEnhancement.autoSearchOnUncertainty`

---

### 来源质量追踪规范（P1 规范）
**行为**：联网查证来源须进行质量追踪，高质量域名须记录，低质量来源须降级
**规范**：
1. **S0 查证**：执行 `[S0] 联网查证` 表格，高质量来源须记录（最近 3 次）
   | 来源标题 | URL | 查证时间戳 | 质量等级（L1/L2） |
   |---------|-----|---------|--------------|

2. **高质量域名**：S3 写稿中高质量来源须追踪，优先使用 `.fbs/high-quality-domains.json` 中已记录的高质量域名，优先 WebFetch 直接读取
3. **来源质量记录**：联网查证结果若来源质量低，须在结果摘要中标注，并降级处理，不用于核心论据
4. **`search-policy.json` 配置**：`searchEnhancement.sourceQualityTracking`，`searchEnhancement.searchSourceDiscovery`

---

### 联网查证汇总表

| 规范 | 级别 | 适用阶段 | 主要作用 |
|------|------|---------|-----------|
| 年份时间戳查验 | **P0** | S0 查证 | 确认查证结果年份准确性 |
| 年份硬编码禁止 | **P0** | 写稿全程 | 禁止无来源年份直接写入 |
| 关键词时效注入 | **P0** | S3 写稿联网 | query 携带年份，降低过期数据风险 |
| query 优化规范 | **P1** | 写稿查证 | 精准化 query，记录 ledger |
| 不确定性自动查验 | **P0** | 写稿全程 | query 包含不确定内容，联网查验 |
| 来源质量追踪 | **P1** | S0 查证 + S3 写稿 | 标注高质量来源，优先使用 S0 高质量3条 |

---

## §3.0.7 联网查证 ledger 记录规范（P0 强制，v1.6.5 新增）
> **来源**：某项目出现联网查证记录丢失，`search-ledger.jsonl` 字段不完整，后续 ledger 无法追溯，规范修订后须严格执行

### 记录要求
所有 WebSearch / WebFetch 查证结果**必须完整记录**到 `.fbs/search-ledger.jsonl`（`.fbs/` 须在书稿根目录，`.fbs/` 目录须在用户工作区根目录）
```jsonl
{"timestamp":"ISO","query":"查询词","url":"来源URL","ok":true,"resultSummary":"约200字摘要","chapterId":"S0/ChNN/report","depthLevel":"L1/L2/L3"}
```

### 字段说明

| 字段 | 类型 | 说明 |
|------|------|------|
| `timestamp` | 必填 | ISO 日期时间戳 |
| `query` | 必填 | 联网查证 query |
| `url` | 必填 | 查证来源 URL，若无来源则留空 |
| `ok` | 必填 | 查证是否成功（true/false） |
| `resultSummary` | 必填 | 约200 字摘要 |
| `chapterId` | 必填 | 章节标识符，`S0`、`Ch01`、`report` |
| `depthLevel` | 必填 | 查证深度分级：`L1`（摘要层）/ `L2`（深度层）/ `L3`（验证层） |

> **字段别名兼容（v1.7.0 新增）**：允许使用别名：`ts`=`timestamp`，`summary`=`resultSummary`，`chapter`=`chapterId`，`depth`=`depthLevel`，别名须统一规范化，脚本验证：`node scripts/enforce-search-policy.mjs --skill-root <技能根> --book-root <书稿根> --chapter-id <id> --verify-atomicity`

### 执行规则

- 若 `search-ledger.jsonl` 不存在，须创建（`timestamp` 确保 WebSearch/WebFetch 查证记录完整记录）
- **A 类书稿**：S3 联网查证每章必须记录
- **B 类书稿**：联网查证须尽量完整记录
- **C 类书稿**：联网查证记录可选

### B/C 类记录要求
- 若 `.fbs/` 不存在，B/C 类书稿联网查证须**尽量完整记录**，禁止**完全不记录联网查证结果**
- 记录格式：`★ 查证记录 [query] 层 [L1/L2/L3] 级 [ok/fail] 摘 [约200字]`

---

## §3.0.8 联网查证深度分级规范（P1 规范，v1.6.5 新增）
> **来源**：某项目联网查证深度不足，L1（摘要层）查证覆盖率过高，L2/L3 深度查证不足，覆盖深度不足，导致书稿中核心论据不充分

### 深度分级说明
| 深度级别 | 执行方式 | 适用场景 | 推荐使用 | 工具 |
|---------|------|--------|---------|---------|
| **L1 摘要层** | WebSearch 摘要查证 + 汇总 | 泛泛信息、背景知识 | 不推荐单独使用 | WebSearch |
| **L2 深度层** | WebFetch 全文读取深度查证 | 核心论据，深度文献读取 | 推荐核心论据使用 | WebFetch |
| **L3 验证层** | 多 WebFetch 验证 L2 内容 | 核心论据二次验证 | 核心论据必须 | 多次 WebFetch |

### 书稿类型深度要求
| 书稿类型 | 核心章节 | 关键论据 | 背景知识 |
|---------|----------------|----------------|----------------|
| **A 类（叙事/非虚构飞）** | L2 | **L3** | L1 |
| **B 类（报告/行研/分析）** | **L2** | L2 | L1 |
| **C 类（简短/文档）** | L1 | L1 | L1 |

### 深度分级执行逻辑

```
联网查证深度分级执行逻辑（WebSearch 可用时）
  检查 触发联网查证，按照书稿类型/场景/论据等级判断
    若 背景知识 = L1
    若 核心论据，须 WebFetch 读 L2
  检查 触发联网深度核实，来自核心论据/案例/数据/调研
    若 是 A 类书稿
      执行 深度查证 L3（2 次以上 L2 后执行 L3 深度验证）
    若 是普通论据/背景
      执行 L1 摘要查证
```

### 深度记录

- `search-ledger.jsonl` 中 `depthLevel` 字段须标注深度分级
- Report Brief / Chapter Brief 联网查证摘要须包含深度分级信息
- 禁止 L1 摘要查证单独作为核心论据，须有 L2 深度查证佐证

---

## §3.0.55 规程确认

> **说明**：规程确认是防止 Agent 执行流程错误、跳步的规范化确认机制

| 规程 | 说明 |
|------|------|
| **流程** | 书稿执行**S0 联网查证 + 原料激活，进入 S1 书型确认 → S2 目录规划 → S2.5 节点确认 → S3 写稿 → S4 排版构建 → S5 审校与交付 → S6 转化与发布准备**，各阶段须按顺序执行 |
| **节点确认** | 确认每个节点**完整产物已完成**：S1 书型确认，S2 目录完整，S2.5 节点确认，S3 写稿完成（台账），S5 审校与交付完成，S6 转化/发布准备完成 |
| **规模** | 确认目标字数 N 万字，须按照规模策略执行，**大于目标 S3**，规模阈值须确认，**规模过大须执行** `search-policy.json` 配置 |
| **归档** | 确认书稿 ID + 书稿名，书稿进度、阶段信息 |

---

## §3.0 联网查证汇总表
> **说明**：本节汇总本节联网查证相关规范，"联网查证规范过多过复杂" = 书稿执行难以理解
> **简化原则**：全部规范须符合最简化原则

### A 类联网查证重点确认
| 规范 | 说明 | 规范文件 |
|------|------|----------|
| 年份查验 | 联网查证年份须确认 | 联网查证 |
| 联网规范链 | 查证/联网/记录 | 联网查证规范 |
| 深度要求 | 核心论据须 L2 深度 | 联网查证深度 |
| 来源追踪 | 高质量来源须记录 URL | 来源记录 |

### B 类联网查证重点确认
| 规范 | 说明 | 深度 |
|------|--------|----------|
| **S1-C 书型确认** | 书型 + 路径 + 联网 + 规划 + MVD | 书型确认规划 |
| **S2.5 节点确认** | 节点确认 + 充分性确认 | 节点确认 |
| **S3 联网查证** | 查证 + 记录查证结果 | 联网深度（**强制 S3 以上联网查证**），覆盖每2章 S2、S3 查证覆盖率 |
| **S5 审校** | 数据新鲜度确认 + 联网查证确认 | 数据新鲜度 |

### H2 联网查证规范（防堆砌、防AI写作模式）

> **来源**：某书稿第5-58章章节数量偏多：600章以上，导致25章以上 AI 写作模式明显，书稿写作后期质量不可控 
> **建议**：联网查证规范须防止书稿后期 AI 写作模式，防止堆砌
**联网查证规范**：
| 规范 | 说明 |
|------|------|
| **AI 写作禁止** | 禁止书稿中使用 AI 写法模式（-3 分以上），禁止连续几章只有表格、列举，没有叙事内容 |
| **联网防堆砌** | 联网查证须联网查证核心论点，防止书稿联网查证结果堆砌，仅用联网查证内容填充书稿，不结合叙事 |
| **联网查证复用** | 联网查证结果须跨章节共享，防止同主题重复查证，降低 AI 写作模式 |
| **叙事优先** | S2 目录规划阶段，书稿写稿要求叙事优先，每章叙事优先，防止 AI 写法 |

**联网查证防堆砌模板（骨架检测）**：
```markdown
S3 写稿中期检查，进入第N章时，是否存在联网结果堆砌？
当前第N章整体评分：{当前章节/10}
书稿写法是否偏 AI 写作模式？
优化建议：
A. 叙事方式重写第N+1章（推荐）
B. 回顾前3章联网查证结果是否已经内化
C. 暂停继续查证，叙事化写法
D. 查看书稿写法分析建议
选 A/B/C/D 或输入其他需求（默认 A）
```

### C 类联网查证（简化要求）

| 规范 | 联网查证 | 深度 |
|------|----------|----------|
| **简化路径** | 不强制 | 简短 |
| **来源** | S1 书型确认不联网 | 可选 |
| **核心论据** | 核心论据无需深度 | L1 |
| **联网** | 深度无要求，快速完成 | ——|

#### C 类书稿联网规范

**说明**：C 类书稿使用简化联网规范

```
确认是否执行 C 类简化书稿
```

---

## §3.X 文件命名规范

> **说明**：书稿执行中，Agent 写稿前须**强制**使用 `write_to_file` 命名书稿文件，规范文件命名后才可以执行
> **规范**：书稿文件命名须按照规范命名

### 文件命名表

| 阶段 | 文件说明 | 文件命名前缀 | 文件路径格式 |
|------|--------|----------|----------|
| S0 | 联网查证 | `[S0] 联网查证` | `{workspace}/[S0] 联网查证.md` |
| S0-lite | 轻量查证（B 类书稿） | `[S0] 查证` | `{workspace}/[S0] 查证.md` |
| S1 | 书型确认（含路径/目录/摘要） | `[S1] xxx` | `{workspace}/[S1] xxx.md` |
| S1 | 书型确认（B 类 P0 规范） | `[S1] 书型确认` | `{workspace}/[S1] 书型确认.md` |
| S1 | MVD 清单（B 类 P0 规范） | `[S1] MVD清单` | `{workspace}/[S1] MVD清单.md` |
| S2 | 目录规划（含章节/大纲） | `[S2] xxx` | `{workspace}/[S2] xxx.md` |
| S2.5 | 节点确认 | `[S2.5] 节点确认` | `{workspace}/[S2.5] 节点确认.md` |
| **S3** | **第N章章节文件** | **`[S3-ChNN]`** | **`{workspace}/[S3-ChNN] 第N章.md`** |
| S3 | 访谈/子报告（B 类报告） | `[访谈] {书稿}` / `[报告] {书稿}` | `{workspace}/[访谈] {书稿}.md` |
| S3 | 报告节（B 类报告） | `[报告] {报告名}` | `{workspace}/[报告] {报告名}.md` |
| S4 | 排版构建（含合并/格式/章节目录） | `[S4] xxx` | `{workspace}/[S4] xxx.md` |
| S5 | 审校报告（含全量/部分） | `[S5] xxx` | `{workspace}/[S5] xxx.md` |
| S6 | 输出交付（含文件清单/目录） | `[S6] xxx` | `{workspace}/[S6] xxx.md` |

### 文件存在验证

```
文件命名验证 / 文件存在确认 / 文件命名规范"
    文件命名规范，在 write_to_file 创建书稿文件时，须确认
    路径格式：{workspace}/[书稿阶段] 文件名.md
    提示用户：[书稿阶段] 文件名（正在创建/文件命名）
    禁止在书稿文件已存在后继续使用 list_dir 轮询
```

### 文件验证规则

| 场景 | 验证方式 | 说明 |
|------|----------|------|
| 写稿文件不存在 | **5s** 等待后，重新验证 | write_to_file 完成后须等待 |
| 3次验证后文件不存在 | 告知用户，终止写稿 | 告知用户文件写入失败，停止并报告 |
| 写稿完成 | 确认文件存在，文件大小合理（不过小） | 文件大小须不为空 |
| **写稿 UI 结果显示 unknown/unknown 时**（Skill **未加载**时须报告） | **禁止写稿**：直接停止，报告 §3.X 规范 `.md` 文件，报告 write_to_file 结果，使用 Node 脚本确认文件结果，`node scripts/verify-expected-artifacts.mjs --book-root <书稿根>`，包含 `--expect-s0` / `--expect-chapter N`，`--since-minutes`，`--strict`，特定严格模式，**已确认文件存在，才继续写稿** |

### 强制写稿使用 `write_to_file`（P0 强制，v1.6.5 新增）
> **来源**：出现 B/C 类报告类书稿不使用文件写稿，而是直接聊天输出，导致书稿无法追踪，`write_to_file` 失效，无法追踪章节

**规范**：写稿禁止直接在聊天框输出内容，**2000 字以上**章节/报告/节/访谈/**禁止**直接在聊天框输出，须使用 `write_to_file` 写稿

```
书稿写稿必须使用 write_to_file
  检查 ≥2000 字的书稿必须使用 write_to_file 写稿
    否 路径：{workspace}/{书稿文件命名}-{时间戳}.md
    否 A 类书稿：{workspace}/[S3-ChNN] 第N章章节名.md（文件规范命名）
    否 B 类书稿：{workspace}/[报告] {报告名}.md 或 [访谈] {报告名}.md
    否 C 类书稿：{workspace}/[简短] {文件名}.md
    否 所有书稿文件须按照规范 {阶段标识}
  若 <2000 字：可以不使用文件写稿
```

**文件写稿 = 强制规范**：所有书稿内容都须使用文件写稿，禁止直接在聊天框输出，不可以绕过 `write_to_file` 工具

**禁止§3.X 快捷方式**：禁止§3.X 直接跳过节点**要求**：§3.X 新增要求，A 类书稿特别情形须按照 §3.X 规范执行，不可以直接跳过写稿文件要求

### §3.X.1 文件写入确认规范（P0 强制，v1.9.0 新增）
> **来源**：2026-04-02 某项目 P1-5，`[S2.5]节点确认.md` 执行 `write_to_file` 写稿但 `list_dir` 确认不存在，导致后续章节写稿时，书稿状态不一致，出现多次写入同名文件，且文件大小不一致
> **教训**：`write_to_file` 写稿须执行文件写入确认，防止 UI 状态不一致

**文件写入确认（P0 规范）**：
```
write_to_file 文件写入后须执行确认

文件确认检查清单（必须执行）：
  - [S0] 联网查证.md
  - [S1] 书型确认.md
  - [S2] 大纲.md
  - [S2.5] 节点确认.md
  - .fbs/chapter-status.md（台账文件）
  - .fbs/book-context-brief.md
  - .fbs/author-meta.md
  - .fbs/project-config.json

验证方式：
  执行 read_file 读取确认写入成功（20 秒以内）
Step 1：执行 write_to_file 写稿

Step 2：执行 read_file 读取文件，确认内容是否符合
Step 3：若内容不一致或为空，执行重写，发送确认通知
    文件写入 = {文件路径} 确认
    文件内容 = 符合/不符合
  若 文件写入确认 = success，执行 read_file 确认
  若 文件写入失败 = 重写/执行策略
```

**重写确认**：
```
★ [文件确认] [S2.5] 节点确认.md | 写入成功 | 文件大小{写入字数}
```

**禁止§3.X 文件写入不验证**：
- §3.X 文件写入须执行验证，禁止跳过文件确认
- 若 §3.X.1 文件写入验证失败，停止书稿，告知用户，等待确认

---

## S0 阶段：原料激活

> **说明**：S1（书型确认）以外的操作："快速"方式为重要
> **简化**：选择"简化"方式，选择**更简化**方式（详情见规范）
> **核心选择**：三大路径决定 S0 快速起步，若无 S0 路径选择，默认选 Quality Track（详情见规范）

### 写作轨道（P0 规范）
**说明**：S0 → S1 写作执行时，书稿写作轨道须确认，S0 阶段确认后须写入 `.fbs/project-config.json` 字段

```
确认是否有写作轨道选择（三路径选择）
书稿名：{书稿} / {英文} / {简称}
★ 路径 Fast Track（快速写稿）
   ★ 目标字数 ≤3万字（含以内）写作
   ★ S2 目录规划完成后直接写稿
   ★ Chapter Brief 字数精简（20字以内）
   ★ 联网查证次数 / 字数 <30 万字 / 精简
   路径标识：F（快速路径）

★★ 路径 Quality Track（精质写稿）
   ★★ 目标字数 ≥3万字（精质写稿）
   ★★ Chapter Brief 完整（含仰角/风格）
   ★★ S2 目录规划完整（含叙事结构/深度）
   ★★ 联网查证完整 / 字数 ≥30 万字 / 精质
   路径标识：Q（精质路径）

★★★ M3/M2 大规模写稿
   ★★★ 字数 ≥10 万字 目标 M2/M3
   ★★★ 字数 <30 万字 ≥10 万字
   ★★★ 30~60 万字 分卷写稿执行
   路径标识：M（大规模路径）
确认当前写作路径后选择继续（回车选 Quality Track）
```

**配置**：写入 `.fbs/project-config.json` 的 `"writingTrack": "fast"/"quality"`
**继续**：写作轨道确认后，继续执行其他规范，不可省略轨道确认，需要写入 `project-config.json` 确认后

| 轨道 | 适用（Fast） | 适用（Quality）（通常） |
|------|----------------|------------------------|
| 适用场景 | 小型书稿/快速验证 | 标准/精质书稿 |
| Chapter Brief | 精简（约20字） | 完整 |
| S2 规划 | 简版规划 | 完整规划 |
| 联网查证 | 精简（少量） | 完整（全量） |
| 100万字以上 | 不建议 | 推荐 |

---

**S0 = 联网查证 + 原料整理 + 书型激活**

```
S0（联网查证 + 原料整理 + 5-10分钟以内）
  检查 （P0）确认联网查证是否需要 S0 联网查证，判断 WebSearch 是否可用
  检查 S0-A 联网查证（多维度查证方向确认）
  检查 S0-B 原料整理
  检查 S0-C 书型激活（含 A、B、C 书稿类型选择、书稿场景确认）

> **v1.8.1 规范（P1-4）**：S0 有 3 路径可选，联网查证 + 原料整理 + 书型激活须先确认路径，再执行对应路径
关键点须确认
  检查 轨道/路径确认选择
  检查 联网查证时间戳须为 **YYYY年MM月DD日**（联网查证后须写入，标准时间戳格式）
  检查 联网查证完成后才可进入 S1

> **v1.8.1 规范（P1-2）**：S0 联网查证结束后须输出时间戳，须为**YYYY年MM月DD日 WebSearch 来源，不可省略**
```

### 路径说明（P0，见 S0 规范）
> **查证前三路径选择必须先确认 S0 路径，才可以开始查证——不可跳过**

| 场景 | **必选**（用户未说明） | **推荐**（书稿启动说明）|
|------|--------------------------|--------------------------------------|
| **S0-A 路径** | 须**联网查证**多维度查证+**充分性**（**精质路径**），联网查证需要必须完整（来源/时效性/覆盖） | 联网查证须**来源/联网/Agent** 联网 AI 确认 / AI 联网查证 / 场景书稿类型 精质路径确认 书稿执行 |
| **S0-C 快速路径** | **书型/场景**确认，充分性确认简化（**快速路径**），书型来源确认**快速/简化/降级书稿类型/快速确认/来源降级不联网查证/来源降级查证** | 来源降级确认书稿场景**快速路径**，书型降级确认 |

### S0-A 联网查证路径（多维度查证方向）
- 来源查证：来源 + 联网查证年份 + **来源时效性**，来源时效性须完整/多联网/年份正确
- 联网查证结果 + 来源完整记录
- 深度查证 + 年份精确搜索
- 联网查证 *来源完整性* 须确认来源完整，来源须从年份/时效性/覆盖联网查证，多来源覆盖 + 必须联网查证覆盖精确年份
- **来源查证**：来源查证须从年份入手，年份须联网查证，确认查证结果，确认**覆盖精确**

**query 精准化建议（v1.7.2 重新强化）**：
| 书稿 | 中文 query 建议 | 英文 query 建议 |
|------|---------------------|---------------------|
| AI 类 | `AI写作手册 市场调研桹、AI写作 热门 市场调研 实战 书稿 AI写作 工具` | `AI writing books 2024 bestseller`，`generative AI handbook amazon`，`AI content creation guide english` |
| 科技行研 | `AI写作 AI热门书 AI工具应用 2024 AI工具写作 2024，AI市场` | `OpenAI revenue`，`AI industry trends report` |
| 商业叙事 | `AI热门 营收情况 全球市场 AI市场应用 AI应用市场 AI项目 AI行业` | 商业数据 DAU，AI市场 等中文 |
| 人物/历史 | `人物热门书应用 AI著名 人物热门 历史 书 热门应用 AI 人物书稿` | 人物类应用检索 AI热门人物 |

> **指导原则**：中文 = 联网查证是否查到的书单，英文 query = 书稿类主题，确认书稿联网查证方向

### S0-B 原料整理
- 整理已有资料，标注**分类/用途**
- 联网查证来源 + 书稿场景 / 场景联网
- 分类标注 + 用途确认（3月）

### S0-C 场景/书型激活

- 在 S0-B 完成后，S0-A **充分性**，确认书稿类型 / 场景确认
- 联网查证已完成：**书型**确认，书稿类型已知，确认：**书型**确认**快速**书型确认
- 确认书型场景**类型**，降级**确认书型**书稿方向，书型书稿场景确认，**确认书型**，完整路径，联网书型确认结果，来源书稿
- **书型路径选择**：联网**充分**书型，充分书型查证书型场景，选择书型（联网查证类型/快速/降级不联网查证/来源降级书稿类型）

### 原料充分性确认规则（P0）
> 联网查证充分性规则，须确认查证是否充分，确认后才可以进入 S1
**充分性规则**：`充分性`、`目录规划`、`来源确认`、`联网查证`、`覆盖充分性`
**确认步骤**：
```
充分性确认流程
结果 S0-R1 原料来源有效性 + 联网查证 + 目录规划来源
结果 S0-R2 深度查证/联网/联网来源/时效性/联网覆盖率
结果 S0-R3 目录规划完整性，充分性确认，联网覆盖率

进入 S1
```

**充分性规则总结**：S0-A/S0-B/S0-C 联网查证完成后，充分性确认须覆盖联网查证充分性
**禁止行为**：S0 联网查证不充分时，禁止进入 S1，S0-E 充分性检查未通过须补充查证

### S0 充分性阈值
| 路径 | 说明 | 查证时间（约）|
|------|------|------|
| 快速 | 快速 S0 | 联网查证约5-10分钟 |
| 精质 | 充分 S0 | "确认查证充分"，S0 完成须 S1，*精质路径*无法跳过，联网查证须精质标准

### S0 格式规范（v1.7.2 新增，P0）
> **注意**：联网查证格式须强制执行，防止联网查证后格式不规范，0/6 次查证结果不完整，不符合 P0 规范
**强制 P0 规范**：S0 联网查证格式须完整，不可省略
```
S0查证 [{查证来源}，{查证条目N}/{涉及N}，]
  确认{查证结果摘要} | 来源{来源域名可信度}
```

**示例**：
```
S0查证 [联网查证/4条，]
  联网摘要查 | 来源 可信度 联网查证结果 来源摘要 来源记录3条
```

**格式要求说明**：
```
格式确认 联网 S0 书稿查证 ★ 确认
联网查证（1次 + 联网摘要（3次 + 深度（3次 + 来源确认（4次 + 充分确认（4次
若4次以上则确认联网查证充分性
```

### S0 确认输出格式（v1.7.1 新增）
> **强化**：某书稿 S0 联网查证阶段 agent-06 执行 D，P0 强制格式输出，联网查证完成后输出 `.fbs/[S0]联网确认.md`

```markdown
# [S0] 联网确认
**来源**：{来源名称}，联网查证完成
**lockedAt**：{YYYY-MM-DD HH:MM}
**confirmedByUser**：{false（自动确认）/ true（用户确认）}
**路径**：{A / B / C}
**充分性**：{联网查证充分性}

---

## 联网
联网时间：{YYYY年MM月DD日}，通过 WebSearch，联网查证时间戳确认

---

## 联网来源（S0-A）
### 联网查证（1条以上）
| 来源/主题 | 链接 | 来源时间戳 | 来源摘要 | 来源记录 |
|-----------|------|----------|----------|------------|
| {联网1} | {URL} | {时间} | {链接} | {摘要} |

### 原料整理（S0-B）（1条以上）
| 来源/主题 | 来源 | 摘要 |
|-----------|------|------|
| {联网1} | {来源} | {摘要} |

## ★★ 充分性确认（S0-C）（1条以上）
**标签**：{书型标签}，{路径（A/B/C）}，{充分性来源}

---

## S0 联网查证完成后（含目录）
S0（节点汇总）
- [x/√] **节点汇总**：{YYYY年MM月DD日}，通过 WebSearch，联网查证年份时间戳确认
### S0 联网查证完成（P0）
[联网查证符合规范/联网查证不足]

### S0-E 充分性检查（超大书稿规模）
#### 充分性阈值（P0 强制，超大书稿）
```

见 `workflow-s0.md` § S0-E 充分性阈值部分

---

## ★ 阶段进入前确认（§3 写稿阶段进入 S3 规范）

### ★ 节点确认清单（进入 S3 写稿规范）
| 节点 | 确认内容 | 确认方式 |
|------|----------|------|
| S2.5 | 节点确认完成 | 读取 [S2.5] 节点确认.md，确认 `[x]` 已全部确认 |
| ESM | ESM 状态读取 | 读取 `.fbs/esm-state.md`，确认 PLAN 状态已完成 |
| 台账 | 台账状态初始化 | 读取 `.fbs/chapter-status.md`，确认台账存在 |
| Brief | Brief 粒度确认 | 确认 `briefGranularity=volume/chapter`，否则留空 |
| 规模 | 规模策略确认 | 见 `large-scale-book-strategy.md` M1/M2/M3 规模分级 |

---



---


# S0 节点

> 来源：section-3-workflow.full.md，自动分节

## S0 前置条件检查

> **位置**：S1 之前，用户首次描述"书"或"我想写什么"
> **触发**：用户说"写书"或"**开始写书**"，触发 S0 原料激活；用户说"跳过原料"则"直接写稿"可在确认后跳过
> **执行规则**：S0 会自动执行联网查证、激活原料库、完成书稿路径选择，在 S0 到 S6 全流程中只执行一次

### 快速起步预检（P0 强制）
**说明**：三条路径选择后，书稿类型与目标字数将自动决定走 S0、跳过 S0 还是简化 S0（S0 仅初始化简要路径）
```
S0 快速起步预检步骤：
1. 确认用户的书稿目标，并在记录中记录 "[书稿目标激活]"
2. 根据目标字数与书型自动选择路径，输出"**路径**：[路径名称]"
3. 检查联网查证状态，确认是否需要 S0 联网查证
4. 书稿若有历史对话或过去的书稿版本，需要告知用户："[书稿状态确认]：确认后继续"，等待确认后开始执行 S0 初始化步骤

**快速起步三条路径**：
- 新书稿·无原料：触发完整 S0 → 联网查证 → 原料库初始化
- 新书稿·有原料：触发 S0 原料激活 → 跳过联网查证 → 原料库激活
- 继续写稿：触发 S0 状态恢复 → 读取 .fbs/ 工件 → 从上次断点继续

```

**三条路径说明**：
- 新书稿/无原料时，按 S0 完整流程（S0-A → S0-E）
- 新书稿/有原料：可跳过联网查证，直接激活原料库
- 继续写稿/回来继续：S0 状态恢复，不重新执行联网查证

### 写作轨道选择

#### 写作轨道说明
> 写作轨道在 S0 阶段选定，决定后续工作流的密度与节点配置

```
写作轨道 → 根据书稿目标自动匹配推荐轨道：
书稿：{书名} / {目标字数} / {书稿类型}
→ 推荐 Fast Track（快速轨道）
   → 适合：快速交付报告、中短篇叙事
   → S2 目录简化，一轮完成
   → Chapter Brief 只需关键点
   → S2 定稿与 S2.5 合并执行
   → 字符数 / 章节数 <30 章以下 / 不含大规模
   → 轨道标记：F（快速）

→ 适合大规模（Quality Track·精品轨道）
   → 适合：深度报告、大规模书稿
   → Chapter Brief 详细规格
   → S2 定稿充分讨论
   → 原料丰富深度 ≥ 3 层 / 字数 超10 万以上 / 不含
   → 轨道标记：Q（精品轨道）

→ 规模选择：
   → 字数 超10 万字 推荐 M3
   → 字数 <30 万以下 推荐 M2
   → 30~10 万字 推荐 M1 或 M2（视章节密度）
→ 等待用户确认轨道选择，确认后写入 project-config.json
```

**写入字段** ：`.fbs/project-config.json` 的 `"writingTrack": "fast"/"quality"`：
**说明**：轨道选定后，工作流密度自动匹配，后续跳级/合并节点规则见 `project-config.json` 字段说明

| 配置 | 快速轨道（Fast） | 精品轨道（Quality·深度） |
|------|----------------|------------------------|
| 书稿类型 | 中短篇/报告/行研 | 深度专著/长篇叙事 |
| Chapter Brief | 只需关键点 | 完整规格 |
| S2 定稿节点 | 一轮快速完成 | 充分讨论多版本 |
| 原料深度 | 浅层（原料简要） | 深层（原料丰富） |
| 100万字项目 | 不推荐 | 推荐 |

---

**S0 = 原料激活 + 联网查证 + 路径选择**

```
S0 激活流程（含联网查证 + 原料激活 5-10 分钟）：
  调用 工具（P0，联网查证如宿主支持 S0 联网则开启 WebSearch 查证）
  调用 S0-A 书稿激活（告知用户进入 S0，输出激活摘要）
  调用 S0-B 原料库激活
  调用 S0-C 联网查证（自动执行，若联网不可用则降级为模型知识查证）

> **v1.8.1 规范强化（P1-4）**：S0 联网至少 3 轮有效查证：成功查证 + 来源记录 + 摘要生成记录；禁止在 S0 跳过联网查证，即使联网失败也需要记录查证尝试结果，记录宿主环境的联网状态

  调用 S0-D 原料充分性评估
  调用 完成汇总输出
  调用 输出激活摘要（格式：*日期：YYYY年MM月DD日*，生成轨道）
  调用 路径选择
```

---

### S0-A 书稿激活（原料盘点入口）

> **S0-A 作用**：书稿激活是 S0 的第一步，读取用户提供的原料、历史对话、已有书稿片段，生成书稿激活摘要

**激活摘要输出格式**：
```markdown
→ S0 激活摘要

书稿名称：{书名/暂定名}
书稿类型：{书型标签}
目标读者：{读者画像简述}
预计字数：{N} 万字 / {M} 章节
原料状态：{已有原料数量/类型概述}
联网查证：{开启/关闭/降级}
写作轨道：{Fast/Quality}

→ 进入 S0-B 原料库激活
```

---

### S0-B 原料库激活

> **S0-B 作用**：将用户提供的所有原料（文档、访谈、数据、网页等）注册到原料库

**原料库格式**：写入 `.fbs/material-library.md`
```markdown
## 原料清单

| 序号 | 原料标题 | 类型 | 字数/规模 | 来源 | 与书稿关联章节 |
|------|---------|------|----------|------|--------------|
| 1 | {原料标题} | 文章/访谈/数据 | {N}字 | {来源URL或文件名} | {关联章节} |
```

---

### S0-C 联网查证（自动执行）

> **S0-C 作用**：基于书稿主题和章节初步规划，执行联网查证，收集核心参考资料
> **宿主降级规则**：宿主不支持联网时，自动降级为模型知识查证，并记录降级原因

**联网查证执行步骤**：
```
S0-C 联网查证执行步骤：

Step 1：根据书稿主题生成查证 query 列表（建议 5~10 个）
Step 2：依次执行查证，记录每条结果到 search-ledger.jsonl
  格式：{timestamp, query, url, ok, resultSummary, chapterId, depthLevel}
Step 3：汇总查证结果，标注哪些章节已有充分参考资料
  - 综合评估 ok=true 的查证 → 标记为原料充足，对应章节 {N}/{M} 章获得参考资料
  - 原料不足的章节列出，告知用户补充原料或确认接受模型知识补充
  - 超出查证有效期（数据过期）的结果标记为 过期

Step 4：输出查证摘要
  - 记录 S0 查证时间戳，{N}/{M} 个主题查证，覆盖{N}/{M} 章
  - 写入 .fbs/project-config.json 字段 "s0TimestampBaseline"

Step 5：若所有查证结果 ok=false 均为 = 模型知识替代
  ⚠️ 写入 S0 降级标记，宿主不支持联网查证，100% 使用模型知识
   说明：宿主联网 → 推荐开启 → RSS 订阅查证 → 已全部降级为模型知识查证
  写入 .fbs/project-config.json 字段 "s0SearchStatus": "all-failed-model-knowledge-only"
```

**说明**：
- 联网查证失败不影响后续流程，但需要如实记录降级状态
- 降级后写稿质量风险由用户确认，不得隐瞒降级情况
- 模型知识替代联网查证的结果，需要在 S0 联网查证报告中标注

### S0-E 原料库充分性评估

> **触发条件**：**M1/M2/M3 规模超过20章以上 P0 强制**，5~10 章以下则 P1 强制
> **说明**：S0 充分性评估在 S0 阶段完成，不影响 S1 后续推进，但 S2.5 节点确认时将再次检查

#### 充分性评估输出格式
S0 充分性评估完成后，输出原料充分性报告，格式如下：

```markdown
## ⚡ 原料充分性报告·供参考 S3 写稿前对照

**已录入原料**：{N}条 / {M}章
**充分性目标** ≥ 1000 字/章，建议 3类 ≥ 3个多元来源/章节
**充分性分布**：{A}章充足/{B}章不足/{C}章未匹配

### ⚡ 原料充分性一览表（供 S3 阶段对照）
| 章节范围 | 已匹配原料 | 来源多元度 | 原料充分性 | 备注建议 |
|---------|---------|------------|---------|---------|
| {章节范围} | 充足 | {N}类 | {充足/待补充} | {充足/待补充/原料类型} |
| {章节范围} | 不足 | {N}类 | {不足} | {建议补充类型} |

### ⚡ 待查找清单（S3 写稿前）
- [ ] {待查找原料1} 来源建议：{关键词 query / 推荐数据库/可搜索平台与来源}
- [ ] {待查找原料2} 来源建议：…

> **充分性说明**：以上仅供[参考]，具体来源由用户补充 ≥ 确认后再进入写稿
```

#### 原料充分性阈值
根据 `search-policy.json` 的 `materialSufficiency` 标准（单位统一为素材条数 `items`）：

| 书稿规模 | 推荐原料条数 | 严重不足阈值 |
|---------|-------------|--------------|
| 5~10万字 | ≥30条 | <10条 |
| 10~30万字 | ≥80条 | <25条 |
| 30~100万字 | ≥200条 | <60条 |
| >100万字 | ≥500条 | <150条 |


---



---


# S1 节点

> 来源：section-3-workflow.full.md，自动分节

## 阶段 1：书型确认 + 体裁 + 写作路径选择

**参考** ：`presets.md` + `visual.md` 第1节 + `strategy.md` 第1~3节

### S1 书型确认必检清单（P0 强制）
**进入 S1 前的检查步骤**：
```
1. 确认书稿目标已在 S0 阶段录入 "[S0 原料激活与评估]"
2. 用户描述清晰度确认：S0 交付的原料评估是否完成？如果未完成，返回 S0 补充原料
3. 书型确认完成后，记录书稿类型到对应字段 [类型标签]：[书型]，确认后继续"**书型**：[确认书型]"
4. 将 genreTag 类型确认后，写入 .fbs/project-config.json 的 `genreTag` 字段，格式为 "短篇手册" / "调查报道" / "白皮书" / "学术专著"，参照 `search-policy.json` 的 `chapterWriting.genreCheckPolicy` 进行匹配检查
```

**书型确认注意点**：
- 进入 S1 前，需要确认以下 → 用户S0 确认完成
- 若用户要求直接进入 S3 写稿，则需要告知用户跳级风险，[用户确认]后，[告知跳级] 则 S0 不需要

### 书型识别

#### 书型标签表

| 用户描述关键词 | 推荐书型 | 触发词示例 |
|-------------|---------|---------------|
| **非虚构/叙事类** | 长篇书稿 | "XX作者的XX故事/"白话文"/"记录片"/"XX记" |
| **报告/行业分析** | 调查报告 | "行研报"/"行业报告"/"调查报道"/"XX行业" |
| **指南/手册** | 白皮书/手册 | "操作指南"/"使用手册"/"技术规范"/"方法论" |
| **个人经历/传记** | 传记/自传 | "个人经历"/"人生故事"/"成长记"/"XX传记" |
| **小说/文学** | 小说类 | "长篇小说"/"短篇故事"/"科幻小说"/"推理" |
| **学术研究** | 学术专著 | "论文集"/"学术研究"/"学位论文"/"科研报告" |

#### 书型判断流程

1. 识别用户描述，匹配到最接近的书型标签
2. 判断字数规模：
   - 长篇书稿80%以上 → 推荐使用 A 路径（完整工作流）
   - 中型报告0%-80% → 推荐 B 路径（轻量工作流）
   - 短篇手册50%以下 → 推荐 C 路径（极简工作流）
3. 确认后输出书型选择结果

---

### 写作路径选择（P0 强制，v1.6.5 新增）
> **背景**：此前部分项目不区分书稿类型，一律用 A 路径完整工作流，导致短篇手册也走了一遍 S0/S1/S2/S2.5/S3/S4/S5/S6，浪费大量时间，导致 Chapter Brief、S2 定稿、S2.5 等节点消耗远超预期，用户反馈说"比直接写还慢"

#### 路径说明
| 路径编号 | 适用场景 | 预计字数 | 推荐工作流 | 可略过节点 |
|---------|---------|---------|---------|-----------|
| **A 完整书稿/长篇非虚构** | 长篇叙事、报告、深度专题 | - | S0→S1→S2→S2.5→S3→S4→S5→S6 | 无 |
| **B 中型报告/调研/行研** | 调查报道、行业报告、访谈录 | 3000~10000字 | **S0-lite→S1→S3→S5-lite** | S2/S2.5/S4/S6 可精简 |
| **C 短篇手册/工具/简报** | 操作手册、说明文档、技术简报 | <3000字 | **直接写稿无需完整工作流** | 全部节点可压缩 |

#### 书型标签与路径映射
| 用户描述关键词 | 推荐路径 | 典型触发词 |
|-------------|-------------|---------------|
| **报告/行研** | B 路径 | "调研报告"/"行研报告"/"市场分析"/"调查"/"行业报告"/"简报"/"综述" |
| **简报/FAQ** | C 路径 | "技术FAQ"/"说明文档"/"规范"/"操作" |

### S1 工件清单（按路径）

#### A 路径标准工件
| 工件 | 说明 |
|------|------|
| `[S1] 书型确认.md` | 书型标签、目标读者、写作风格定位 |
| `[S1] 写作路径选择.md` | A/B/C 路径确认 |
| `.fbs/project-config.json` | `genreTag` / `genreLevel` / `s1Confirmed=true` |

#### B 路径工件
| 工件 | 说明 |
|------|------|
| `[S1] 报告简要.md` | 报告目标、受众、范围 |
| `.fbs/writing-notes/report-brief.md` | 报告调研摘要记录 |

---

### S2 进入前检查清单（P0 强制）

> **告知义务**：以下检查清单是进入 S2 前的必检项，不得跳过。若未完成，必须告知用户并等待用户补充

| 检查项 | 处置规则 |
|------|----------|
| **S2.5 节点确认结果（P0 强制规则）** | 若 S2 完成但 S2.5 未完成，须写入 `.fbs/project-config.json` 字段 `"s25ActionPlanStatus": "acknowledged-incomplete"`，告知用户 S2.5 不可跳过，等待确认后再进入 S3 写稿 |
| **书型路径确认（P0 强制规则）** | 进入 S3 前，`.fbs/project-config.json` 必须写入 `genreLevel`（`A/B/C`）与 `genreTag`（对应书型标签）必填，未填时不得执行 S3 |
| **S0 查证基线（P0 强制规则）** | `.fbs/search-ledger.jsonl` 需要记录 S0 查证的所有有效 query 至少一条，查证时间记录完整，写入 `project-config.json` 对应字段 `s0TimestampBaseline`，禁止跳过联网查证 |
| **B 路径工件（P0 强制规则）** | 若 `genreLevel=B`，必须在进入 S3 前生成 `[S1] 报告简要.md`、`[S1] 写作路径选择.md`、`.fbs/writing-notes/report-brief.md`，否则不得推进 |
| **联网查证记录（P0 强制规则）** | 进入 S3 前，检查 `.fbs/search-ledger.jsonl`，确认 联网查证记录是否达标，否则不得进入 S3；S0/S1/S2 阶段，各节点的 S2.5 原料充分性不符合时，立即停止推进，等待用户确认，联网查证记录格式必须包含 `timestamp/query/url/ok/resultSummary/chapterId/depthLevel` 字段，格式违规则报错，执行脚本验证：**执行验证**：`node scripts/enforce-search-policy.mjs --skill-root <技能根路径> --book-root <书稿根路径> --chapter-id <id> --verify-stages --stage-scope pre-s3 --verify-atomicity` |
| **原料充分性（M1/M2/M3 P0 强制规则）** | 若**M1/M2/M3 规模超过20章以上**，推进 S3 时需检查 `search-policy.json` 的 `materialSufficiency` 的 `criticalBelow` 阈值判断，原料不足时不得直接进入 S3，必须告知用户 → 告知 **充分性缺口**，需要提供至少 {N} 篇 {M} 类型的原料，合计缺口约 {T} 万字内容 → 等待用户补充原料或确认接受缺口写作，不得跳过充分性检查；若已补充或接受，记录到 `.fbs/material-library.md` 的原料清单，标注来源 `materialSufficiency.thresholds` 阈值对应规则 → 若充分性不足不可继续写稿，**直到** → 确认用户同意跳过充分性检查 → 充分性不足则告知用户 {N} 篇 {M} 类型原料缺口 / 联网查证 / 已录入原料不足，写入告知并等待，不得在不足情况下推进 Chapter Brief，不得跳过原料检查；**特别说明**：若 S0 联网结果为 `s0SearchStatus: all-failed-model-knowledge-only`，则说明联网查证已全部失败，该项计为 0 条，S0 联网查证失败时不能用模型知识替代，需告知用户注意 |

---

### S2 目录规划过渡说明

> S2 目录规划的最终输出物是书稿章节目录，以及 chapter-status.md 台账
**S2 目录规划注意点**：S2 目录规划完成后，章节名、章节顺序确定后不可随意变更，如果用户要改变目录结构，需要同步更新台账

**目录变更处理**：
| 情况 | 处理规则 |
|------|----------|
| S3 写稿已开始后，S2 目录变更（增删章节） | 必须更新 S2 目录变更 MD，同步更新 `chapter-status.md`，确认新状态为 `S2 变更：{变更内容}：{变更时间}` |
| S3 写稿已开始后，章节顺序调整/合并 | 更新 `chapter-status.md` 状态并重新排序，M3 项目推荐写入 `structure-arbitration-log.md` |
| 章节标题变更 | 不影响台账，仅更新章节文件名与 chapter-status.md 标题列 |
| 删除章节 | 更新台账标注 |

**完整 Chapter Brief 与目录规划输出格式**：`S2·目录变更·{新旧对照 / 更新内容·chapter-status.md：}`，完成后输出 Chapter Brief 变更摘要

---



---


# S2 节点

> 来源：section-3-workflow.full.md，自动分节

## 阶段 2：目录规划 + 细节规划

**参考** ：`templates.md` 架构 + 参考 Mermaid 图

### S2 目录规划规则

#### 目录级别与限制
| 级别 | 适用范围 | 章节数量限制 |
|------|----------|----------|
| **一级目录（章）** | 全书章节 | 不限，按书稿规模 |
| **二级目录（节）** | 章内分节 | 建议每章 2~5 节 |
| **三级目录（小节）** | 节内细分 | 建议不超过 3 级 |

#### Chapter Brief 格式规范
每章的 Chapter Brief 须包含：
```markdown
## [章序号] {章标题}

**核心论点**：{这章要证明/探讨什么}
**叙事逻辑**：{开篇→展开→收尾的逻辑结构}
**关键内容**：
- {要点1：具体场景/数据/故事}
- {要点2}
- {要点3}
**原料关联**：{对应哪些原料文件/来源}
**预计字数**：{N}字
**写作风格**：{本章特有风格说明，如需要}
```

---

### S2 目录规划完成标志
- 全书章节目录确定（章标题、顺序、层级）
- 每章 Chapter Brief 完成
- `chapter-status.md` 台账初始化
- `.fbs/project-config.json` 写入 `s2Confirmed=true`

### S2 目录输出模板
```markdown
# {书名} 目录规划

**版本**：S2 定稿 · {日期}
**总章数**：{N}章
**预计总字数**：约 {M} 万字
**写作路径**：{A/B/C}

## 目录结构

### 第一章 {章标题}
{Chapter Brief}

### 第二章 {章标题}
{Chapter Brief}

...

## 台账初始化声明
chapter-status.md 已初始化，{N}章，状态均为"待写"
```

---

### S2 阶段联网查证规则（P0 强制，v1.9.0）

> **来源**：部分项目在 S2 目录规划时发现某些章节原料严重不足，但未在 S2 阶段记录，导致 S3 写稿时才临时查找，影响连贯性

**S2 阶段联网查证要求**：
```
S2 目录规划完成后，对每章检查原料匹配度：
1. 若某章没有对应原料，标注"待查找"
2. 通过 search-ledger.jsonl 检查对应章节的联网记录
3. S2 阶段联网查证记录需写入 search-ledger.jsonl，字段包含：
   - chapterId：对应章节编号
   - depthLevel：查找深度（shallow/normal/deep）
   - stage：s2
```

**S2 阶段原料充分性预警**：
| 预警级别 | 触发条件 | 处置 |
|---------|---------|----------|
| **P0 缺口** | 超过 30% 章节无原料 | 暂停 S2 定稿，等待用户补充原料后再继续 |
| **P1 缺口** | 10%~30% 章节原料不足 | 告知用户，等待确认是否接受缺口写作 |
| **P2 缺口** | 少量章节（<10%）无原料 | 备注到对应 Chapter Brief，S3 阶段再处理 |

---

### S2 输出工件清单

| 工件 | 路径 | 说明 |
|------|------|------|
| `[S2] 目录规划.md` | 书稿根目录 | 全书目录 + Chapter Brief |
| `chapter-status.md` | `.fbs/` | 台账初始化 |
| `project-config.json` | `.fbs/` | `s2Confirmed=true` |
| `[S2] 原料缺口报告.md`（可选） | `.fbs/` | 若存在 P0/P1 原料缺口 |

---

### S2 → S2.5 过渡规则

S2 目录定稿后，**必须进入 S2.5 节点确认**，不得直接跳入 S3：
```
S2 完成 → S2.5 节点确认：
  - 书稿仰角确认
  - 读者画像确认
  - 原料充分性评估
  - 写作风格定位
  - 获得用户确认 → 方可进入 S3
```

**跳过 S2.5 的条件**（需明确用户同意）：
- 用户主动声明"跳过节点确认"
- C 路径短篇手册（3000字以下），可合并 S2+S2.5
- 紧急写作模式（用户声明时效紧迫）

---



---


# S2.5 节点

> 来源：section-3-workflow.full.md，自动分节

## 阶段 2.5：节点确认 + 原料充分性评估

> **触发条件**：目录定稿后、S3 正式写稿前

**参考** ：`strategy.md` 第2节

### 节点确认模板
```markdown
## 节点确认

### 书稿仰角（核心立场）
[书稿仰角即作者的核心观察视角，用一句话说清楚]

> **节点确认必要性**：节点确认的目的是在正式写稿前，用书稿仰角与目标读者进行对齐，避免仰角偏差导致`.fbs/book-context-brief.md` 的 `corePremise` 与实际写作方向不一致。若跳过此节，S5 质量审校可能无法准确判断"与方向是否一致"，建议在 S0 阶段充分确认。

### 3-5个核心命题
1. [每个命题应该是读者可以感同身受的具体场景陈述]
2. [命题应直接支撑书稿仰角]
...

### 读者画像
- 首要读者：[职业/角色描述]
- 次要读者：[行业/领域]
- 排除读者：[不适合人群]
- 阅读目标：[读者期望收获]

### 写作风格定位（对照实际写稿判断/可修订）
- **语言风格**：深度/轻量/**专业向**··[学术/科普/ToB 商业/大众科普/调查报道]
- **参考风格**：平铺/对比/**综合观点**··[无参考已知作品]
- **信息密度（重要性）**：内容密度高/低/中等,信息中等·· [信息密度/丰富程度/是否S0-C 研究参考材料充足]
- **预估总章节**：[X]章，预计总字数[Y]

### 原料充分性检查（S2.5 会议 P0 强制）
> **来源**：以往项目经常在 S3 写稿时才发现原料不足，导致要回退到 S3 写稿阶段，影响写稿质量不连贯。
**充分性检查标准**：见 `.fbs/material-library.md`，
- 已录入原料：{N}条，细分 {A}篇文章 / 合计 {D}字 / 访谈 {Q}条 / 其他 {O}条
- 联网查证记录：{S}条，分布在 `.fbs/search-ledger.jsonl` kind=material
- 是否达标：**参考 `search-policy.json` 的 `materialSufficiency` 门槛判断**
  - 规则 ≤5万字：文章≥30篇，合计<10万字内容
  - 规则 ≤10万字：文章≥80篇，合计<25万字内容
  - 规则 ≤30万字：文章≥200篇，合计<60万字内容
  - 规则 >100万字：文章≥500篇，**合计<150万字内容**（100字以上才算有效原料）
- **充分性不足的处置**：原料不足时，向用户说明缺口，建议补充，或确认接受以现有原料推进写作，不得跳过此步骤
**原料充分性核查表格**：
| 章节范围 | 已匹配原料 | 待查找原料 | 联网查证数 | 状态 | 备注/建议补充类型 |
|---------|---------|---------|---------|------|---------|
| Ch01~3 | {数量} | {数量} | {N}条 | {状态} | {充足/待补充/原料类型} |
| … | … | … | … | … | … |

**待查找清单**：→ S3 写稿前
- [ ] {待查找原料1} 来源建议：{关键词 query / 推荐数据库 / 可搜索平台与来源}
- [ ] {待查找原料2} 来源建议：…

### 节点确认完成标志（不得重复流程）
以上各项完成确认，全部写入节点确认报告，等待用户确认后推进。
确认**节点确认完成标志**即写入 `.fbs/book-context-brief.md` 的节点确认字段。
```

> **节点确认重要说明**：S2.5 触发条件
> - 进入 S2.5 前须确保目录已完成 S3 写稿前章节 Chapter Brief，充分性评估后再进入 S3
> - 若原料充分性不足，**暂停进入 S3**，等待用户补充原料后 / 用户确认 / 原料不足告知用户 / 写作风格因此调整请在节点确认提示
---



---


# S3 节点

> 来源：section-3-workflow.full.md，自动分节

## 阶段 3：写稿

> **v1.8.1 P0 强化规则（P1-3）**：S2.5 完成确认后才进入 S3 写稿
> **说明**：S2.5 节点确认完成，所有 checkbox 均已确认 `[ ]` 状态，**才能进入 S3**
> **确认步骤**：
> ```
> 确认 ok 才能进入 S3 写稿步骤：
> 1. 读取 [S2.5] 节点确认.md 文件，确认所有待确认项已确认
> 2. 检查 `[ ]` 未确认项：
>    若存在未确认项，告知用户 S2.5 节点确认未完成，不可跳入 S3
>    禁止直接进入 S3
>      - 若已全部确认 `[x]`
>      - 若用户确认跳过则需要说明告知风险，并在相应字段记录
>    写入 .fbs/project-config.json 字段 `"s25ActionPlanStatus": "acknowledged-incomplete"`
> 3. 以上全部完成后，才可以进入 S3 写稿
> ```

> **参考** ：`large-scale-book-strategy.md`，M3/M2/M1 规模 P0 强制
> **多成员模式说明：Team API 可直接用于并行写稿**：WorkBuddy 的 Agent Teams / Sub-Agent 均可用于 S3/S5；问题不在宿主是否支持并行，而在 Skill 是否完成章节拆分、写入隔离、台账更新与心跳编排。
> **多成员协作说明 / team-lead 编排**：默认仍不主动推荐多 Writer 并行；若用户明确要求或章节边界清晰，可直接启用 Agent Teams，并由 team-lead 统一维护台账、术语与交接。

> **书稿规模说明**：S2 规模字数将自动决定 S3 写稿策略，5万字以下 → 15章以下快速写稿，M1（2~5万字 / 1.5~5万字），M2（5~10万字 / 3.5~10万字），M3（超100万字 / 超10万字），见 [`../05-ops/large-scale-book-strategy.md`](../05-ops/large-scale-book-strategy.md)
> **禁止行为（P0）**：禁止跳过节点确认进入 S3，须按照 `large-scale-book-strategy.md` 规模策略执行，S3 写稿前必须完成 S2.5 节点确认，否则强制停止写稿
> **M3 特别规则（P0 强制，v1.8.1 新增）**：超过 M3 规模时，**S0 联网查证至少覆盖 超100万字**，必须满足100章以上查证，**S0 联网查证必须完成**——M3 规模下执行 S3 时须确保完整的 `large-scale-book-strategy.md` 规范，M3 超100万字特别规定：**M3 阶段会议**——强制执行在 S0、S1、S2 各阶段均须完成会议确认进入 S3 方可推进，M3 项目超量检查，S0-E 原料充分性强制覆盖（P0 强制），禁止未充分性检查开始写稿——**M3 项目超量检查** 超过章节数量，逐章检查执行限制 S0-E 原料充分性检查

**说明** ：若使用Task（多成员），超过5章应暂停

### S3 联网查证规则（工具调用超时与速率限制处理）

> **说明**：联网查证每次 query 超时约 15s，单次查证若超时则记录结果，**建议每次不超过单次** query 查证 15s 超时，**工具调用超时** — Read 工具调用超时，**合理处理联网查证超时**，联网查证超时/限速 **`too many requests`（WorkBuddy Error Code 14003）**，需要按照下列规则处理超时与限速

| 情况 | 处理方式（联网查证工具调用限制） |
|------|--------------------------------|
| 单次 超N 章联网查证 | **超时处理规则**，联网查证次数，S3 联网查证禁止超过 **联网超时N 秒**，N 见 `search-policy.json` 超时设置，禁止超时继续等待 |
| 超时30s继续等待 | 联网查证超时规则，**超时30s** 触发超时处理，超时时告知 `SKILL.md` 第10 **超15s** 超时联网，查证降级，每次1/2次超时，继续查证后 `webSearch` 工具降级15s 执行，注意*15s 超时**覆盖**，等待**超时**，继续**写稿**，**联网查证UI 最终执行** |
| **触发14003 / too many requests** | **多次触发 QPS**，触发速率限制后，退避等待 N 秒，N = `rateLimitGuard.backoffOnRateLimitMs`，默认10s，退避后 **继续写稿**，触发超过 `maxRetriesOnRateLimit` 时，默认2 次，记录 `ok=false reason=rate_limit` 到查证记录，禁止无限重试，**速率限制记录**：S0/S3 使用 WebSearch 联网查证时限制单次 QPS 超限最大限制，避免超限 |
| 规范不一致 | **禁止跳过不读取规范**，联网查证超时后，**Read 工具 3 次以内**，再次调用，查阅 [`skill-index.md`](./skill-index.md) 规范查证再读取 |
| 超时降级 | **降级**：仰角联网超时后，降级为模型知识，告知用户降级写稿 |

#### 触发 14003 / too many requests 标准处理流程
> 适用于 **WorkBuddy** 宿主出现 QPS 限速触发

| 步骤 | 说明 | 操作 |
|------|------|------|
| 1 | **检测到限速触发** | 停止继续发送 WebSearch，记录触发时间戳 |
| 2 | **进入退避等待** | 等待 10s（`rateLimitGuard.backoffOnRateLimitMs`），等待期间禁止写稿 |
| 3 | **检查间隔时间** | 确保间隔 Xs（`minIntervalBetweenQueriesMs`）后才继续发送 |
| 4 | **超过重试次数** | 超过 `maxRetriesOnRateLimit` 次数（默认2）时，停止重试，记录 `rate_limit` 到查证记录 |
| 5 | **降级写稿** | 告知用户已触发 QPS 限速，写稿 X/N 章已完成，Y 章将使用模型知识替代联网查证 |
| 6 | **更新配置** | 确认 `search-policy.json` 的 `searchAccessPolicy.s0MaxConcurrentQueries` 并发限制为2，S0 联网并发查证限制，不超过并发限制 |

**实现参考**：`BookWorkflowOrchestrator.execute({ mode: 'chapter_gate', 以及 onProgress })` 和 `chapter_pipeline` 管道均已内置 **退避策略**，参考实现见 `SearchBundle.executeChapterGate` / `MultiAgentPipeline`，负责跟踪 `nextAction`，`gateQueryIndex` 继续查证断点，中断后可恢复，`rateLimitGuard` 自动累计退避等待

#### S3 写稿中联网查证出现 14003 的处置规则
> **背景**：S3 阶段**章节写稿**中途出现限速，若一直等待会大量浪费 token、用户时间，且 WorkBuddy 出现 `too many requests (Error Code: 14003)` 
> **策略**：采用最小中断写稿策略，尽量减少中断时间，最大化利用 token，避免 QPS 触发

**两类常见问题与对策**

| 问题 | 对策 |
|------|------|
| **每章联网查证超5s 时继续等待** | 采用超时记录策略，超过时间后不等待5s 继续下一章，章节联网查证配额2次，3次后降级，继续执行以内2/3章等待，继续超时以内重试 → 降级 ≤5s 继续超时**降级执行** |
| **联网查证超时整章节暂停** | 禁止对 `###` 节点超时00超时00次，超时触发导致章节 token 超过，禁止等待过长超时 |

**最大化写稿连续性原则**

对超过**联网查证 15～0 秒**的写稿，最大化原则是连续写稿，记录超时到查证记录但不让超时中断写稿，超时后继续写稿

**联网查证超时梯度处理表**

| 情况 | 处理方式 | 说明 |
|------|----------|------|
| 联网查证超时触发限速 | 中断 N 秒后，继续写稿 [下一章继续写稿]，不要重复等待，| 联网查证 Read 工具调用超时，**降级**联网查证，**继续**写稿，**降级**联网查证 |
| 单章限速，同时完成其他 | 中断 N 秒后进行 N 章查证 N 次1重试 | 超时后降级写稿，不再查证，参考 S0 联网查证 |
| 重复限速出现 | 触发后暂停写稿，告知用户继续 | 执行脚本（`sync-book-chapter-index.mjs`）继续 |

**联网查证超时注意**：
- 超时处理后必须继续写稿，不得无限等待
- 禁止超时后无限重试联网查证
- 超时后写稿改用 S0 联网模型知识降级

**限速触发后恢复 14003 处置流程**

| 触发场景 | 恢复策略 |
|----------|------|
| 单次 30s超时触发 14003 | 等待 30~60s 后恢复写稿，继续写稿 |
| 多次超时 | 超时进入 WorkBuddy 限速等待，暂停写稿 |
| 写稿降级 | 联网查证降级，继续写稿，使用模型知识补充 |

#### S3 大规模写稿自动断点·Auto-Run Unit 机制

> **使用场景**：大规模书稿超过阈值时，自动触发断点机制，防止单次 token 超限影响章节连贯性
> **执行单位**：以章节 Part 为单位断点，**避免单次处理过多章节一次性提交**

**断点触发条件（M2 项目必须启用，见 `large-scale-book-strategy.md §4.1`）**

写稿进入 Auto-Run 前须满足：
1. 恢复书稿 `.fbs/book-context-brief.md` 上下文记录
2. 加载台账 `.fbs/chapter-status.md` 进行记录，`restoreStateFromDisk` 调用
3. 检查 `.fbs/rate-budget.json` 速率预算，rateLimitRate > 0.3 时触发警告
4. 检查并恢复 `emergency-draft-*.md` 草稿文件，若存在则读取恢复

**Auto-Run 执行单位停顿条件**

| 条件 | 处置 |
|------|------|
| 单章超时5s | 记录超时，继续写 S3 下一章 |
| 写稿异常 | 记录异常 + 更新 `.fbs/chapter-status.md` + 保存紧急草稿 |
| 书稿结构变更 | **暂停写稿**，等待用户确认 Auto-Run 重启（见 `large-scale-book-strategy.md §1b`） |
| 连续写稿超过 20 章 | **必须暂停**，向用户报告进度、请求确认继续，记录到 `.fbs/structure-arbitration-log.md` |
| 超限 rateLimitRate > 0.6 | **强制暂停**，向用户报告速率已触发{rateLimitRate}，建议等待 1分钟后继续 |
| 连续 3 次写稿均失败 | **停止**，向用户报告，等待用户干预 |

**Auto-Run 进度汇报格式**

| 情况 | 输出格式 |
|------|----------|
| 完成一批 | 完成 X 章，已完成 N 章，当前进度写入 .fbs/auto-run-unit-report.md，等待继续 X+1 批 |
| 进度报告 | 已完成写稿约 {X}%，已完成N 章，估计还剩1批 写完后 N+1 批 |
| 骨架检测 | 发现骨架章节 {N} 个，记录到 .fbs/structure-arbitration-log.md，等待用户确认是否继续 |
| 反复失败 | 连续3 次失败，等待用户干预，建议查看 emergency-draft 草稿文件 |

**Auto-Run 执行原则**：
- 断点机制会在触发条件满足时自动暂停
- 暂停后必须等待用户确认才能继续
- 若 rateLimitRate > 0.6 必须强制暂停
- 暂停后必须记录书稿状态，保证恢复时能续写

### S3 写稿质量要求

| 项目 | 标准 | 执行工具 / 参考 |
|----|------|-------------|
| **过渡段缺失** | 每 **200~300 字**节需要过渡段或 C1 级别 P0 | `quality-PLC.md` C1节 |
| **排比堆砌** | **禁止排比**，连续3句以上排比 | 见C2节 |
| **章节标题编号** | `##`/`###` 节点标题含编号，`.` 分隔不含括号 | `node scripts/quality-auditor.mjs --skill-root <技能根> --glob "chapters/*.md" --check-section-ids`，参见章节标题规范 |
| **空泛表述** | 禁止空洞表述 **无案例/无论证**，具体化要求 | 见P1节 |
| **重复词密度** | 禁止同节重复超高频词，**禁止重复** | `quality-PLC.md` B2-B，G4节 |
| **S6 去AI味** | 按 `qualityGate` 执行最终 S 分项通过后输出 S 分项 | `quality-S.md` S6节，`node scripts/quality-auditor.mjs --skill-root <技能根> --inputs 节` + `--dash-density` 以及 `--fail-on-s6-warn` |
| **联网查证记录** | 联网查证记录必须完整记录到 `search-policy.json` `chapterWriting.notes` | 参考 SKILL 第2节 |

**工具调用**：执行 MD 审校工具 `node scripts/quality-auditor.mjs --skill-root <技能根> --glob "chapters/*.md"`，开启 **`--enforce`** 或 **`--enforce-strict`** 模式，以及 `node scripts/enforce-search-policy.mjs --skill-root <技能根> --chapter-file <章节文件>` 加 `--book-root` + `--chapter-id`

### S3 写稿规范（WorkBuddy/Writer 版，多成员写稿规范）

> **重要说明**：以下写稿规范适用于多成员模式，**无多成员时**，均适用于**单 Agent 执行**，**规范不变**，若**规范不一致**，优先 team-lead 执行决定

| 规范项 | 说明 |
|------|------|
| **构建虚拟书房** | 执行 `node scripts/init-fbs-multiagent-artifacts.mjs --book-root <书稿根路径>`，为当前项目建立三层底座：`.fbs/`（内部台账）、`deliverables/`（S5 对外交付区）、`releases/`（S6 发布准备区），并初始化 `.fbs/chapter-status.md`、`.fbs/GLOSSARY.md`、`.fbs/chapter-dependencies.json`、`.fbs/book-context-brief.md`、`.fbs/search-ledger.jsonl`、`.fbs/project-config.json`、`.fbs/member-heartbeats.json`、`.fbs/task-queue.json`、`.fbs/rate-budget.json`、`.fbs/high-quality-domains.json`、`.fbs/material-library.md`、`.fbs/author-meta.md`、`.fbs/insight-cards.md`、`.fbs/esm-state.md`、`.fbs/writing-notes/pending-verification.md` 等书房底座工件；完成后可执行 `node scripts/shared-knowledge-base.mjs --book-root <书稿根路径>` 继续构建知识库 |

| **文件命名** | 每章写稿文件命名格式为 §3.X 节，**`[S3-ChNN] 第N章章节名.md`**，禁止用 `S2-` 前缀命名 |
| **台账更新（强制）** | S2 写稿章节**`台账更新`** / **`chapter-status`** 状态须**同步更新**，禁止落后，更新 `chapter-status.md` 标注章节状态；team-lead 须同步台账确认 |
| **写稿** | 每次 Writer 写稿需：**(1)** 更新 `chapter-status.md` 状态，**(2)** 与team-lead 确认优先级与章节分工，**(3)** 更新 `book-context-brief.md` 的核心论题 / 写作仰角 / `updatedAt` 字段，`updatedAt` 须为 ISO 格式时间戳 |
| **术语** | 书稿写稿术语须来自 **`.fbs/GLOSSARY.md` 的S1/S2 术语表**，Writer 写稿术语不一致时记录到 `book-level-consistency.md` C0-2 词条 |
| **引用** | 联网查证引用须符合 [`citation-format.md`](../02-quality/citation-format.md) 规范，**G4** 伦理项，参照引用规范 `quality-check.md` G节 |
| **联网查证** | team-lead 负责执行联网查证，`node scripts/enforce-search-policy.mjs --skill-root <技能根> --chapter-file <章节>` |
| **章节依赖检查** | 写完每章须更新 `.fbs/chapter-dependencies.json`，以及 `node scripts/sync-book-chapter-index.mjs --book-root <书稿根> --json-out .fbs/chapter-scan-result.json` 并在 **MEMORY 持久化台账**，`node scripts/chapter-scheduler-hint.mjs --book-root <书稿根>` 生成下一章建议 |
| **前置章节依赖门** | `node scripts/chapter-dependency-gate.mjs --book-root <书稿根> --chapter <id>` 结果为 **1** 时才允许继续写，非0时禁止继续，**必须**执行 01、TC-04规范 |
| **引用 / 术语** | `node scripts/citation-format-check.mjs --skill-root <技能根> --chapter-file <章节>`，`node scripts/terminology-gate.mjs --skill-root <技能根> --chapter-file <章节>`，*可选参数* 加 `[--strict]` 严格模式，加上 `--book-root <书稿根>` 书稿根路径 |
| **心跳 / 任务队列** | 写稿中更新 `.fbs/member-heartbeats.json`，读取任务队列 `.fbs/task-queue.json`，确认task-lead 分配，多成员写稿参考 team-lead 规范 `workbuddy-agent-briefings.md` SOP 节 |
| **跨章一致性** | 书稿写稿时执行**CX**，[`cross-chapter-consistency.md`](../02-quality/cross-chapter-consistency.md)，覆盖 C0 / S5 阶段 |
| **异常处理** | 参见 [`./skill-authoritative-supplement.md`](./skill-authoritative-supplement.md)，包括**网络/超时**等，异常处理后恢复写稿策略，见参考 `workbuddy-agent-briefings.md` SOP 节 |

### 章节质量评分阈值
见 `SKILL.md` **第七节 × 去AI味评分** 满分10分（10分制）

| 阈值（10分制） | 说明 | 处置 |
|--------|------|----------|
| **≥7.5** | 去AI味通过 / 高质量 | 台账标注通过，继续下一章 |
| **7.0~7.5** | 通过警告 | 建议再润色，再次输出 toast |
| **<7.0** | 失败 / 强制重写 | 触发重写规则，自动回退章节 |

### §3.3 写稿断点检查机制（P0 强制，v1.9.0 新增）
> **来源**：2026-04-02 某大项目进入 P0-5 写稿后发现多个章节内容不一致，台账状态缺失 P1-1、多章骨架 P1-2
> **策略**：S3 写稿中断点恢复后必须先检查台账状态，确保写稿连贯性

---

#### §3.3.1 写稿断点恢复（P0 强制）
> **说明**：每章写稿完成后须同步 `chapter-status.md` 台账，暂停/恢复写稿时须先恢复台账状态，否则会发生章节重复/遗漏

**断点恢复（P0 强制要求）**：
```
写稿恢复/开始新写稿前，必须执行：

Step 1：使用 write_to_file 创建章节文件前，先确认台账        路径：{workspace}/[S3-ChNN] 第N章章节名.md

Step 2：更新 .fbs/chapter-status.md 记录        写稿前先标注该章节状态为 → 写稿中，确认状态更新
        若             章节字符数明显不足 < 目标 60%，触发 §3.3.2
        写完 章节字符数达到预期，则标注→ 完成
若触发  章节字符数明显不足 → 触发 / 骨架阶段  提示用户确认"章节内容不足警告"
  →继续执行骨架标注写稿
```

**台账标准格式**：`.fbs/chapter-status.md` 台账行格式
```
| ChNN | {章标题} | 写稿状态 | {字符数} | {ISO时间戳} | {说明} |
```

**禁止绕过台账更新的方式进行写稿**，见 `SKILL.md` v1.9.0 强化说明1 第D节

---

#### §3.3.2 骨架检测与字符数不足警告（P0 强制）
> **说明**：章节字符数低于目标字数的60%时触发骨架警告，超过2000字差距是骨架章节是 P0 警告
> 超过目标字数的 60% 差距是骨架章节，进入 S6 转化/发布准备时必须显式标注

**骨架警告（P0 强制）**：
```
写稿字符数检查触发骨架判断

Step 1：读取章节文件，检查当前字符数与 Chapter Brief 目标字数
Step 2：对照 Chapter Brief 目标字数判断

  若  字符数 ≥ 目标字数 × 80%
  →  无骨架警告  继续写稿  
  若  字符数 ≥ 目标字数 × 60% 但未到 目标字数 × 80%
  →  触发骨架预警  软警告  →  字符数 {已写} / 目标 {目标}，{已完成}%，进入下一章后续写
  若  字符数 < 目标字数 × 60%
      触发骨架强警告
      骨架阶段标注        告知用户 [骨架章节] {章名} {N}字，目标 {目标}字，         字符覆盖率 {目标} 字60%，{完成}% 警告         触发骨架标注，等待用户确认继续或补写骨架
      禁止自动补写骨架，需等待用户确认
        > ⚠ 骨架章节 目标{目标}字/ 当前{字数}字，{完成}%
        > 请确认是否继续写稿

若触发  字符数 < 60% ，触发骨架标注 骨架阶段  → 禁止在 S6 转化或发布准备中标注为已完成
```

**S6 骨架章节说明**：见第3.6 节收口规则，骨架章节进入 S6 时必须标注：
- 骨架章节须在第3.6 节 `⚠ 骨架章节汇总` 中标注

---

#### §3.3.3 书稿类型对应写法（P1 强制，建议执行）
> **说明**：书稿类型决定写法风格，如报告类、非虚构叙事类各有不同写法规范
**书型对照**：见 `[S2]书型确认.md` 和 `project-config.json` 字段 `genreTag` 映射：
- 非虚构叙事类：`非虚构/叙事/报告/散文/人物`
- 调查报道类：`报道/新闻写作/调查/记录`
- 行研报告类：`行研/学术/商业/分析`

**写法差异 P1 建议（M2/M3 项目推荐 P0）**：
```
写法对照检查—— Chapter Brief 书型标签对照写法执行

Step 1：读取 .fbs/book-context-brief.md 核心论题与书型标签        确认当前书稿类型是否已匹配到特定写法风格 S3 章节中
Step 2：对照 Chapter Brief 核心论题标签/书型/写法  若  叙事类章节 Chapter Brief 标签
  
    告知用户 [叙事类写法注意]
     写法推荐/建议/参考书型     - {叙事写法1}：推荐{风格}
     - {叙事写法2}：推荐{风格}
     
     提供格式选项     A. 使用推荐风格书型/叙事写法标准化写法
     B. 按用户风格写稿{N}章     C. 保持现有风格不强制推荐（可忽略）
     
     **格式选项必须提供 A，加优先+提供写法建议，B 和 C 是备选项**

Step 3：将书型/写法/叙事风格确认写入 .fbs/book-context-brief.md 对应字段  书型确认/写法/叙事风格{书型} | Ch{NN} | {字数范围} | {ISO时间戳}
```

**`book-context-brief.md` 书型写法记录**：
```markdown
## 书型写法/叙事/风格确认清单

| 章节标签 | 写法类型 | 说明 | 时间戳 |
|---------|---------|---------|---------|
| {书型/叙事/写法} | Ch{NN} | {字数范围} | {ISO} |
```

---

#### §3.3.4 台账字符数强制实测（P0 强制，2.0.1 新增）
> **来源**：2026-04-02 台账 `chapter-status.md` 中记录的字数仅凭估算约"~4千字"等占位表述，最终实际字数差异导致 S6 骨架误判 4 章，进入 S6 转化/发布准备时误判"166页"实际只有 35~40 页
> **措施**：从台账字符数角度强制实测，通过读取实际文件字符统计，不依赖估算

**台账实测（P0 强制要求）**：
```
台账字符数实测要求
1. 每章写稿完成后，必须实测字符数：使用 read_file 读取对应章节文件
   台账记录必须是实测字数，禁止
   
   错误示例：| Ch01 | 章标题 | ~8000字 |     估算占位
   正确示例：| Ch01 | 章标题 | 8,234字（实测）|
   
2. 若无法读取实测字符数，禁止写入 ~"估算字数
   S5 审校时必须实测字数
   必须 read_file 读取实际文件字符数
3. 若 PowerShell 可用，允许使用 Node/Shell 脚本实测
   推荐使用脚本实测章节字数（Windows PowerShell兼容）
   
   Get-ChildItem "{路径}" -Filter "*.md" | 
     Where-Object {$_.Name -match "S3"} | 
     ForEach-Object { 
       "$($_.Name): $((Get-Content $_.FullName -Raw -Encoding UTF8).Length)字符"
     }

4. 台账格式（2.0.1 强制标注实测）   - 台账字符数{N}字（实测）而不是 {N}字（估算）
   - 汇总：{N}章，字数合计：{M}字，{比例}%   - 禁止提报估算字数，不可以写台账
```

**台账字符数格式（对照第3.3.1 格式升级）**：
```markdown
| 章序列 | 章名 | 章节状态 | 实测字符数 | 时间戳 | 说明 |
|---------|------|---------|---------|------|------|
| Ch01    | 章标题 | 完成 | 12,456字（实测） | 8,000 | 156% | |
| Ch02    | 骨架 标注 | 1,234字（实测） | 8,000 | 15%  | 骨架 |
| Ch03    | 待写 | 无 | 8,000 | 0% | |
```

> **阈值说明**：A达成≥80%，B警告80%~69%，D骨架≤10%

---

### 单章写稿流程（Agent 执行版本）
```
→ Agent 写稿流程
  0. 读取项目状态，确认未重复写稿，chapter-dependencies 确认
  1. 读 Chapter Brief，确认核心仰角与本章核心论点，确认联网查证资料
  2. 执行联网查证（如果需要），2 次以内，rateLimitGuard 退避
  3. 查证超时15s 后降级，继续联网查证降级记录
  4. 执行写稿，章节内容完整写出，不止列提纲
  5. 写完 [S3-ChNN] 第N章章节名.md + 台账更新
  阈值评估：
  若  ≥7.5 分，台账标注通过，继续下一章
  若  7.0~7.5 分，台账通过警告
  若  <7.0 分，触发重写，台账标注失败
```

#### 写稿结尾钩子（G9）、P2 写法建议
> **写稿注意**：写稿后须检查结尾是否有收尾钩子 QM-4，章节结尾需要有衔接下一章的过渡性语句，每章 5~10 字内 outlining（freewriting）写法，构成叙事连贯性
> **叙事建议**：叙事类章节后建议衔接下一章，不要突然中断，每3 章确认一次叙事连贯性
> **结尾规范**：章节结尾加入叙事自然过渡，完整叙事节奏

**章节结尾钩子（结尾连贯）执行**：
```
章节结尾检查
  步骤1：读取 endHook，检查 .fbs/book-context-brief.md 是否有         叙事仰角，上章结尾引用钩子是否连接到本章
  步骤2：对照 Chapter Brief 叙事节奏，叙事连贯性
         是否 S2 写出了完整结尾叙事
  步骤3：生成本章结尾钩子（叙事衔接到下章）         叙事 N 与{叙事钩子}
          参考主题{叙事主题}
          结尾过渡{endHook 结尾过渡}
          衔接钩子（3 句话以内）完整叙事结尾
          确认叙事连贯性，不要突然中断
```

**说明**：结尾钩子需包含叙事衔接，避免每章突然终止，建议每章结尾含自然过渡到下章
> **token 预算提示**：章节写稿建议控制在200~300 token 以内，字数上限控制不超过长度

#### 章节写稿 Chapter Brief 执行规范（P0 强制）
> **执行说明**：写稿规范来自于 QM-1 核心论题执行，以及 QM-2 章节 Brief 执行规范，每章写稿须对照 Chapter Brief 逐项执行叙事结构
> **记录路径**：每章 Chapter Brief 须写入 `.fbs/writing-notes/{chapterId}.brief.md`，以及 `BookWorkflowOrchestrator._saveChapterBrief()` 方法写入，Agent 写稿时须读取
> **Brief 粒度**：写稿规范需要参照 **Brief 粒度设置**，通过 `briefGranularity=volume/chapter` 确认 Brief 粒度，若无 Brief，则写稿 Brief 粒度内容须减少到**30 字**以内，否则写稿 Brief 过于详细，章节 C1 分项低分

##### Brief 执行格式（根据章节写稿规范执行）
```
写稿前必须确认 Chapter Brief 是否已创建 Ch{NN} 章节的 Brief
核心论题{内容}
写作仰角（20字内）{内容}
核心论点 {论点1} / {论点2} / {论点3}
叙事结构{线性叙事 / 比较分析 / 问题解决}
联网查证{联网查证结果 / 模型知识}
作者风格约束{参考 .fbs/author-meta.md 风格标签，确认写法风格与约束}
结尾钩子{有 / 衔接下章叙事过渡内容}
跨章引用记录（v1.8.0新增）{路径 .fbs/跨章引用记录.md / 若无则留空}
确认 Chapter Brief 满足上述要求后，才可以开始写稿
回答 OK/继续/确认或自定义，若不满足，停下等待用户确认后再写稿
```

```markdown
## ★ Chapter Brief ★ [写稿阶段 S3-ChNN]

### 核心信息
- **核心论题**：{S2 确认的核心论题}
- **写作仰角**（20字内）：{书稿核心论题概括，体现写稿仰角与叙事立场}
- **重点论证项**：___ （核心论证点，三点以内）
- **目标字数**：{预期字数}

### 作者风格约束（来自 `.fbs/author-meta.md`）
- **文风**：{根据 author-meta.md 风格标签，确认文风特点与约束}
- **禁忌**：{根据风格标签，禁止特定写法、用词、表达方式}
- **写法**：{根据风格标签，体现1~2个作者标志性写法，每个写法1句话}
- **若 author-meta.md 不存在**：按照用户最近反馈的写法偏好执行

### 核心论点
- **章节核心论点（3条以内）**：
  1. {核心论点1}
  2. {核心论点2}
  3. {核心论点3}
- **叙事结构（来自 S2 目录规划）**：{来自 S2 确认的叙事结构}
- **重点展开节点**：{需要特别展开/深化的论证部分}

### 原料
- **原料充分性**：{充分 / 基本够用 / 原料不足，见 `search-policy.json 的 materialSufficiency` 字段}
- **联网查证记录**（来自 `.fbs/material-library.md`）：
  - 查证资料 {N} 条（联网查证 1次 以上）
  - 补充 {N} 条（模型知识补充 1次 以上）
  - 待查 / 降级记录 {N} 条
- **查证记录路径**：{N} 条记录 `.fbs/search-ledger.jsonl`，kind=material，chapterId={章节ID}
- **联网查证执行状态**：{已完成联网查证 / 联网降级模型知识 / 查证不足补充查证}
- **联网查证说明**：{联网查证结果说明 / 降级原因 / 无法联网说明 等}

> **联网查证不足警告**：若联网查证 2 次以内且覆盖比例不足50%，必须告知用户，提示重新执行联网查证或确认降级写稿

### 结尾钩子
- **叙事衔接钩子**：{本章结尾引出下章叙事自然过渡内容 endHook}
- **叙事连贯确认**：{本章结尾与下章开头叙事连贯，3句以内过渡语句}

### 书型写法 G7 标签
- **书型标签（来自 S1 书型确认）**：{书型标签名称}
- **叙事风格/写法模板确认**：{非虚构叙事 / 行研报告 / 调查报道}以及具体写法
- **风格注意**：与书型标签对应的写法禁忌/写法说明
```

> **说明**：以上 Brief 执行格式适用于 A 类书稿，`Chapter Brief 格式` 适用于 `briefGranularity=volume/chapter` 设置，若无 Brief 则 C1 分项可能低分，建议执行

#### Report Brief（B 类报告）执行规范（P0 强制，v1.6.5 新增）
> **执行说明**：B 类报告书稿（行研/分析报告）不使用章节叙事结构，Chapter Brief 不适用，改用 Report Brief，用于执行行研报告的分析结构，Report Brief 是 Chapter Brief 的 B 类替代规范

**适用条件**：`genreLevel=B` 时，行研报告类书稿须改用 Report Brief

**Report Brief 执行格式**：
```
写稿前确认 Report Brief 是否已创建，适用行研/分析报告场景
报告主题{内容}
报告摘要（30字内）{核心仰角，含报告目的/核心结论/应用场景}
核心议题 {议题/观点1} / {议题/观点2} / {议题/观点3}，受众目标{报告受众}
章节架构{执行摘要 N页 / 正文章节 N页 / L1分析 N页 / L2深析N页}
报告结论{报告结论}
作者风格约束{参考 S0-lite 风格标签，确认写法风格与约束}
结尾钩子{有 / 衔接下章叙事过渡内容}
确认 Report Brief 满足上述要求后，才可以开始写稿
回答 OK/继续/确认或自定义，若不满足，停下等待30秒后再次确认
```

**与 Chapter Brief 对比**：
| 维度 | Chapter Brief（A 类型） | Report Brief（B 类型） |
|------|----------------------|---------------------|
| 适用 | 叙事类书稿章节写法 | 行研报告类分析写法 |
| 结构 | 核心论点 3条以上 | 分析议题/报告结论|
| 写法 | 叙事类 | 分析报告类|
| 路径 | `.fbs/writing-notes/{chapterId}.brief.md` | `.fbs/writing-notes/report-brief.md` |
| 字数 | 30字以内 | 30字以内 |

**说明**：
- B 类报告类书稿需要确认 Report Brief 是否创建
- Report Brief 可跨章节使用，适用于完整报告 L1/L2/L3

#### 最小可交付报告（B 类报告）规范（P0 强制，v1.6.7 新增）
> **说明**：B 类报告书稿特定情景下需要最小化可交付成果（Minimum Viable Deliverable, MVD），这是报告写作的最基本成果，确保一定质量前提下尽快交付
> **适用情景**：B 类书稿使用 S0-lite + S1 快速路径时，最小化可交付，**核心**：Report Brief 是 MVD 的纲领性说明

**最小可交付（Minimum Viable Deliverable, MVD）**：
```
写稿前确认 MVD 成果清单是否已标注，适用 B 类报告写作

★ 核心成果 ★（最小化交付）
  ★{成果1}：{内容描述}
  ★{成果2}：{内容描述}
  ★{成果3}：{内容描述}
  受众目标{描述}

★ 核心结论 ★（2版本）
  结论版本A ：{核心结论，一句话"关键发现摘要"}
  {200-300字版本}

  结论版本B ：{执行摘要，一句话"精炼摘要"}
  {200-300字版本}

★ 核心发现
  {发现1} / {观点1}，证据来源 {F-ID}
  {发现2} / {观点2}，证据来源 {F-ID}
  其余内容 详见正文

核心问题列表（3-5 条问题）
  Q1: {核心问题1}
  Q2: {核心问题2}
  Q3: {核心问题3}

★ 原料清单（-6 条以内）
  文献{来源描述}，字数{N} 字，证据来源{F-ID}
  调研{来源描述}，字数{N} 字，证据来源{F-ID}
  （以上）
确认 MVD 清单后，在写稿台账登记 OK 后，再写稿，若不满足，停下等待10分钟后再确认 Report Brief 再继续
```

**路径**：`{workspace}/[S1] 书型确认.md`，B 类报告 P0 强制确认

**说明**：MVD 清单是最小化成果，而非 Report Brief 的全量展开，MVD 清单对照 Report Brief 内容核对，MVD 主要指核心成果/结论/关键发现，Report Brief 是纲领性框架

**注意**：
- 所有行研 B 类书稿须记录 MVD 清单，Report Brief 是配套说明
- MVD 清单须标注清单 ID
- 禁止不登记 MVD 清单就直接写报告正文

#### 结构访谈章节（B 类报告）规范（P1 规范，v1.6.7 新增）
> **说明**：B 类报告中，特定情形下需要结构化访谈章节，这是对报告中涉及访谈/人物/案例的章节做结构化处理，帮助报告结构更清晰
> **用途**：当 B 类报告涉及具体案例/人物/访谈时，将访谈章节做结构化设计

**适用**：当 B 类报告有访谈章节，尤其是多章节多人物情形，结构化整理访谈节点

```
访谈章节结构化确认
  章节 访谈报道类章节，L2 提问框架确认
  章节 访谈章节，整体访谈叙事
  章节 补充访谈，额外细节补充 中间章节
  
  受访次数 3 个以上 2 个确认范围
```

**访谈节点格式**：`[访谈] {访谈者名}.md`

**处理步骤**：
1. 整理访谈章节 + 执行结构化
2. 访谈人物确认结构化
3. 访谈正文写稿确认，符合 Report Brief 报告正文规范

**访谈来源质量矩阵（参考原料质量）**：
| 来源 | 质量等级 | 说明 |
|------|---------------|------|
| 专家访谈 | 一手资料 + 二次核实 | 访谈权威性 |
| 版本/数据文献 | 文献数据 + GitHub 来源 | 数据权威性 |
| 官方媒体 | 媒体来源报道 | 报道可信度 |
| 内部资料 | 企业来源内部 | 内部资料 |
| 行业会议资料 | 会议资料来源 | 业内认可度 |

**说明**：
- 访谈章节必须区分一手资料/二手资料，P0 要求 A 类资料作为核心
- 访谈质量须说明访谈场景、人物身份等

#### 章节写稿单章清单（A 类书稿，≥3000 字标准版，P0 强制）

> 适用 Agent 写稿每章完成后，token 预算约 1k/章，执行约 8k/完整章节
```markdown
## ★ 单章清单 ★ [章节标题]

**S 项（去AI味，P0）**
- [ ] B 项 buzzword = 0（禁止：赋能/驱动/深度/引领/智慧/一站式/生态等）
- [ ] `无意义` 分析项 名词/概念堆砌 > 3 / 无案例无论据
- [ ] 章节40 字以内开头 删除率 0%

**P/C 逻辑结构规范**
- [ ] 每节300字以内没有过渡段，叙事不连贯标注
- [ ] 章节字数目标 {600}{800} 字
- [ ] 章节内容逻辑完整，无骨架骨架章节

**B/G 原料质量规范**
- [ ] 联网查证覆盖必须大于 2 次，低质资料标注
- [ ] 目录 # 级标题内容必须与章节标题一致
- [ ] 引用格式符合 引用规范 `search-policy.json` 要求

**Chapter Brief 规范**
- [ ] Chapter Brief 必须已写入文件 `.fbs/writing-notes/{chapterId}.brief.md`
- [ ] 核心论题/写作仰角/核心论点 Brief 内容完整，符合 Brief 格式要求
- [ ] **联网查证确认**：联网查证已覆盖本章核心论点，覆盖 author-meta.md 风格约束

**原料规范**
- [ ] 已读取 Brief，联网查证原料已完整读取，搜索结果完整覆盖
- [ ] **联网查证格式符合**：联网查证格式须与查证类型/查证链接/查证时间戳完整（结构化联网查证记录符合规范，`联网查证结果完整格式正确` 等）与搜索结果/链接/原料库内容匹配
- [ ] 来源格式符合 citation-format.md 规范，引用格式完整
- [ ] 原料库格式符合 `.fbs/material-library.md`

**写稿结果**
- [ ] `[S3-ChNN] 第N章章节名.md` 已成功写入，实测字数确认
得分：___/10 | S:___ P:___ C:___ B:___

**结尾钩子**：（叙事衔接下章）
> {章节结尾叙事过渡，结尾钩子 1句，衔接下章，叙事钩子 3句话以内}
> 叙事过渡 [叙事连贯] 过渡到下章叙事，叙事衔接是否自然，叙事结尾
**叙事特别提醒**：P1（叙事类）写稿建议
> 写完叙事类章节后，写1句 以内 叙事节拍，叙事衔接到下章自然过渡，叙事结尾 OK
> 叙事结尾方式：Q：[叙事衔接下章] 叙事下一章 [叙事 / 写法 / 书型格式]
> 叙事结尾方式 Q：叙事衔接下章，叙事连贯，叙事结尾 Q：[写法类型] 叙事衔接连贯，叙事结尾格式
**思维俯仰（H4）**：P2 规范，鼓励执行
> 写完每章后，是否有高维思考洞见？ 写1句 以上 高维叙事，叙事仰角 30字以内
> 原始记录到 `.fbs/insight-cards.md`，记录洞见卡片，后续 S6 可提取汇总
> 示例：[洞见] 洞见类型（思维/观察/角度）：{洞见描述内容}
> 示例格式（简洁）：跨章引用记录，避免叙事断裂，叙事结尾可供下章引用
```

#### 写稿评分清单（B/C 报告）& 原料 ≥3000 字版本（P0 强制，v1.6.5 新增）
> **说明**：适用 B/C 类报告书稿写稿单章清单，与 A 类叙事书稿有区别，B/C 类需要特别注重原料质量和分析深度，AI 写作模式禁止，需要特别注意报告类型
> **用途**：当 `genreLevel=B/C` 时，报告类书稿须替换 A 类写稿规范，执行 ≥3000 字标准版 **核心**：原料质量和分析深度强化
```markdown
## ★ 报告清单 ★ [报告标题/报告节/子报告章节]

**S 项（去AI味，P0）**
- [ ] B 项 buzzword = 0（禁止：赋能/驱动/引领/智慧/一站式/协同等）
- [ ] 无意义分析项（空洞描述/堆砌名词）> 3 / 无案例无论据
- [ ] 章节40 字以内删除率 0%
- [ ] 禁止同质段落（相同结论重复表述）连续 3 个以上段落

**分析结构规范（P0）**
- [ ] 报告每节论点必须有数据/案例佐证/文献来源佐证
- [ ] 报告分析结构完整（问题/原因/结论/建议/来源结构）
- [ ] 报告章节论点与整体 Report Brief 一致，不跑题，符合+无结论冗余
- [ ] 禁止只有观点/无分析/无佐证段落，以及空泛结论

**原料质量（P0）**
- [ ] 联网查证来源必须是 一手资料 或 权威来源，B 类优先一手资料
- [ ] 查证记录完整，所有联网查证已记录 search-ledger.jsonl
- [ ] 原料质量符合 B 类报告要求，联网降级已标注（L2类）

**字数要求（P0）**
- [ ] 报告每节达到 3000 字以上，不足则使用 write_to_file 补写

得分：___/10

**结尾格式说明**：（简洁）
> {每节结尾提炼报告核心发现 1句，叙事结尾 [报告节]，结尾 OK}
> 叙事过渡 [写报告节] 结尾过渡到下节叙事连贯鲹，L2 补充分析
```

**执行特别说明**：适用 B/C 报告类规范，**禁止**使用 B/C 叙事类规范，P0 要求执行 A 类书稿叙事规范以外内容

#### H5 跨章引用记录（写稿连续性记录，P1）
> **说明**：书稿写稿中第8章以上，章节数较多时，书稿写稿连续性记录须记录跨章引用，确认叙事连贯性
> **用途**：在书稿写稿过程中跨章引用连续性记录，保持叙事连贯

**格式说明**：跨章引用记录是章节写稿连贯性记录，字段对照

**格式模板**：
```markdown
## ★ 跨章引用记录 ★ {报告节}（{ISO日期}）
### 基础信息
- **所在阶段**：{S0/S1/S2/S3（第N章）/S4/S5/S6}
- **章节序列**：{N}/{总章节数}，完成约 {完成比例%}
- **更新时间**：{ISO}
- **写稿评分**：目前约 {X}/10，{通过/警告/失败}
### 叙事路径
- **叙事主题**：{N}字（简洁），叙事路径为 {叙事 / 叙事路径 / 叙事结构}
- **叙事类型**：{叙事类 / 报告类 / 多线叙事}
### 洞见记录
- **洞见卡片**：{N}条记录 `.fbs/insight-cards.md`
### 下章引用
- **叙事衔接下章**：从{当前章节结尾}到{下章开头描述}
- **叙事联系记录**：{叙事衔接描述/简洁}
### 跨章引用（AI写法规范）
A. 下一章 {N+1} 叙事衔接说明
B. 回顾上章核心论点（约{M}字）
C. 叙事连贯确认，叙事衔接{确认/叙事是否连贯}
D. 查看叙事衔接确认
请选 A/B/C/D 执行或输入其他要求
```

#### 写稿台账更新规则（S3 写稿台账，P0 强制）

> **说明**：写稿中台账是连续性记录，每章写完后须同步更新台账，确保台账状态实时

**台账更新触发场景**：

| 触发场景 | 台账更新方式 | 说明 |
|--------|---------|------|
| **写稿开始** | 台账标注写稿中[章节名] 写稿状态=写稿中 | 台账实时更新 `.fbs/material-library.md`，确认`materialStatus=写稿中`|
| **写稿进行中** | 台账更新章节进度说明：章节进度 [章节完成状态] | 台账实时记录章节内容进度，完整记录|
| **写稿完成后** | 台账字符数标注实测 | 台账更新 `.fbs/material-library.md`，`materialStatus=写稿完成` |

**原料库格式**：来自 `.fbs/material-library.md`

```markdown
## 原料库条目 {ID}

- **类型**：文献 / 报道 / 数据 / 案例 / 访谈 / 分析结果 / 模型知识
- **来源**：{来源 / WebSearch:{query} / 模型知识（未联网查证）}
- **关联章节**：{chapterId 章节标识}
- **摘要**（200字内）：{摘要}
- **状态**：已使用 / 待用，关联{chapterId}，使用时间{时间}
- **时间**：{ISO}
```

---

### 写稿质量评分标准（Writer 多成员写稿规范）

> **强制说明**：以下评分格式适用于多成员 Agent Teams 写稿，5章以上书稿强制启用，并发执行须控制并发数量
```
→ Agent 写稿流程（6.4版本）
  ↑ 开始写稿前确认
  ↓ 单章写稿
  ↓ Critic-S 执行（S1-S6 + V1分项执行 S 分项）
  ↓ 单章清单自检
  ↓ 调用 Critic-L1（P 逻辑分）
  ↓ 调用 Critic-L2（C 叙事分）+ 判断章节叙事连贯性（使用 `quality-PLC.md` 的C5 叙事方向）
  ↓ 调用 Critic-L3（B 原料分）+ 联网查证覆盖率确认
  ↓ 调用 Proofer（全字段审校）+ 跨章记录 + 结尾钩子
  ↓ 写稿结尾 → Writer完成
  ↓ 评分 ≥7.5 章节通过
  ↓ 评分 7.0～7.5 通过警告，建议润色
  ↓ 评分 <7.0 触发重写规则（2次上限）
      若 2 次重写后 <7.0 强制暂停，等待用户确认
  ↓ 章节完成后 + 台账更新
```

### 单章写稿结果汇报格式

```markdown
## ★ 写稿进度报告

总体进度：{X}.7/10 分 | S:9.0 P:8.5 C:8.8 B:8.5

写稿进度说明：
- 已完成章节：{N}章（含台账实测字数，覆盖率{N}%）
- 当前章节状态：{当前章节状态说明，字数/目标达成率}

查看写稿报告用语："查看写稿进度报告"
```

---

### §3.6 S3 收口规则（供 S5 / S6 接续）

> **说明**：S3 写稿完成后，须按照以下规则整理收口工件，供 S4 排版构建、S5 交付与 S6 转化/发布准备接续使用

#### §3.6.1 S3 收口工件清单（P0 强制）

| 工件 | 路径格式 | 说明 |
|------|----------|------|
| 章节文件 | `[S3-ChNN] 第N章章节名.md` | 每章一个文件，命名含序号 |
| 台账 | `.fbs/chapter-status.md` | 台账实测字数，含骨架标注 |
| Chapter Brief | `.fbs/writing-notes/{chapterId}.brief.md` | 每章 Brief，A 类书稿必须 |
| 原料库 | `.fbs/material-library.md` | 联网查证原料汇总 |
| 跨章引用 | `.fbs/跨章引用记录.md` | 跨章连贯性记录（8章以上） |
| 洞见卡片 | `.fbs/insight-cards.md` | 高维洞见记录（可选） |
| 查证记录 | `.fbs/search-ledger.jsonl` | 联网查证记录（必须完整） |

#### §3.6.2 骨架章节汇总（进入 S6 时必须标注）

> **来源**：§3.3.2 骨架检测规则，触发骨架警告的章节须在此汇总

**骨架章节输出格式**：

```markdown
## ⚠ 骨架章节汇总（S3 收口 / 供 S6 使用）

| 章序列 | 章名 | 实测字数 | 目标字数 | 完成率 | 状态 |
|---------|------|---------|---------|--------|------|
| Ch{NN} | {章名} | {N}字（实测） | {目标}字 | {N}% | 骨架 ⚠ |

> 骨架章节需在 S4 排版构建前由用户确认：是否补写骨架章节，或标注为骨架输出
> 禁止骨架章节直接进入 S4 排版，须先告知用户并等待确认
```

**骨架章节处置规则**：
- 骨架章节须在 S4 合并前告知用户，提供选项：A. 补写骨架章节，B. 标注骨架章节直接输出
- 禁止骨架章节在 S6 最终输出时标注为"已完成"
- 若全书有 3 章以上骨架，须强制暂停并请用户确认写稿策略

#### §3.6.3 S3 → S4 进入条件检查（P0 强制）

```
S3 写稿完成 → 进入 S4 前须确认：

1. 台账实测字数完整（禁止估算占位）
2. 骨架章节已告知用户，用户确认处置策略
3. 所有章节文件已正确命名 [S3-ChNN]
4. Chapter Brief 完整，联网查证覆盖率已记录
5. `.fbs/chapter-status.md` 台账状态全部为 完成 / 骨架（需确认）
```

> **禁止行为**：台账含估算字数直接进入 S4；骨架章节未经用户确认直接排版

---





---


# S4 节点

> 来源：section-3-workflow.full.md，自动分节

## 阶段 4：排版构建 + 多格式交付输出

**参考** ：`typography.md` + `build.md` + `visual.md`

### §3.4 S4 强制合并预检（P0 强制，v1.9.0 新增）
> **来源**：2026-04-02 某大项目进入 P1-3 阶段后，100章约 25 万字在合并时因单章文件拼合混乱导致章节顺序错位，耗费大量 token 处理修复，最终用户放弃该稿。
> **限制约定**：合并前强制预检，超过20章必须确认，超30章建议 M2/M3 分卷

**合并预检（P0 强制）/ M2/M3 项目合并前必须执行**：
```
S4 合并前强制预检步骤：

Step 1：读取 .fbs/chapter-status.md 核查
  - 检查是否有骨架章节 → 警告
  - 检查是否有章节状态不一致或台账缺失

Step 2：章节文件列出，逐一确认完整性与顺序
  如果 章节数量超过 20 章（M2/M3 项目）
  如果 字符数合计超过 30 万字

Step 3：给出合并建议（用户确认后才执行）
  输出以下[S4 合并方案]内容：
   合并总章：{N}章 / 约{字数}字 · 合并策略建议如下：
   合并策略：

   A 单文件合并（推荐）
      执行（跨平台，避免 bash/`$` 在 Windows 宿主下失效）：
      `node scripts/merge-chapters.mjs --book-root <本书根> --output deliverables/[S4]书名.md`
      （可选 `--glob "chapters/**/*.md"`）
      将所有 [S3-ChNN] 章节文件
      合并为一个 [S4]书名.md 文件

   B  分卷合并
      按 Part/卷 分别合并后多个文件
      分卷格式为 [S4-Vol{N}]：{N}部分.md
      同步目录/附录说明

   C  仅作章节文件检视
      不合并，所有章节文件独立维护
      单章文件 [S4]章节名.md，供排版使用
      后续视具体工具链需求再合并

   方案 A/B/C 请用户确认：推荐A方案

Step 4：用户确认 A 方案才执行合并脚本
```

**合并命令（唯一推荐）**：
```bash
node scripts/merge-chapters.mjs --book-root . --output "deliverables/[S4]书名.md" --glob "chapters/**/*.md"
```

**说明**：
- 对 M2/M3 项目，强制执行预检，不得跳过，否则合并顺序混乱将消耗大量 token 修复
- 合并后全文检视确认章节顺序、目录匹配
- 骨架章节需要在合并之前告知用户，不得掩盖骨架情况

---

### 交付格式

| 格式 | 工具链 | 说明 |
|------|------|------|
| **纯 Markdown** | 无需额外工具 | 直接MD交付，含Mermaid图、注脚、代码块 |
| **HTML（D1 标准）** | Node + `markdown-it`，见 `build.md` | **`node assets/build.mjs`** 完整排版，含 `markdown-it-footnote` 插件和 Mermaid |
| **HTML（D3 精装）** | 同上 | **进阶**规范排版·超过标准D1限制，见 [`html-deliverable-gate.md`](../05-ops/html-deliverable-gate.md) |

**其他格式说明**：
- **PDF**：通过浏览器打印 HTML→PDF（Ctrl+P）
- **DOCX**：推荐通过第三方工具 CloudConvert 转换、Word/WPS 打开，或 `html-to-docx` 工具或 Pandoc 转换，不保证完美还原

### S4 构建常见故障排查表

> **背景**：在 S4 输出阶段，部分项目调用 **`node assets/build.mjs`** 时遇到 *Chromium 启动超时*，`page.setContent` 需要 **`networkidle0`（超时 90s）**，*Mermaid CDN 加载需约 45s*，而**DOCX 转换**不兼容 Bash，导致排版工具链调用失败

| 故障 | 原因 / 解决方案 |
|------|-------------------|
| 构建命令无法执行 | 检查 `node` 路径，**先**确认在书稿工程目录执行，不要在 MD 章节目录下执行；检查 HTML 输出路径，PDF/DOCX 格式选择 **不同输出目标** 请分别指定；目录路径包含空格请加引号 |
| 构建进度卡死 | `build.mjs` 输出带有 **`[S4/build][进度id]`** 的进度标志，若进度超过 **超时90s** 则中断，见 `SKILL.md` 第1节说明 |
| 规范不一致 | 进入 S4 **前**先阅读参考规范 **Read 文档 3 份**：`typography` / `build.md` 等 **参考** 索引，查看 skill-index 索引 |
| 丢失 MD | 确认章节合并后 MD，**才能**执行 Puppeteer，不能跳过合并步骤，否则图文书章节顺序混乱 |

**注意**：`assets/build.mjs` 所有进度标志带 `[S4/build]` 前缀，可过滤该标志监控进度，不要在此阶段调用 UI 截图。

### S4 HTML 交付规格（D1 / D3）

> 交付规格详见 `FBS-BookWriter·交付规格说明.md` 附件，*规范 HTML 格式 = `assets/build.mjs` 构建**，具体调用 `parseMarkdown`

| 规格 | 说明 |
|------|------|
| **D1 标准** | 默认交付，`books.config.mjs` 配置，执行 `node <项目根目录>/assets/build.mjs`，HTML 含 `meta generator` 的 FBS 元信息 |
| **验收** | 禁止 `fetch('*.md')` + 在线动态加载，**必须**自包含 HTML，供 D3 及 S6 离线使用 |
| **检验** | 生成 D1 后运行 `node scripts/html-delivery-smoke.mjs --html <文件.html> --strict --fail-on-warn`，*推荐* `--strict` 模式视为 P1 级别，exit 0 才算交付合格 |
| **规格** | [`html-deliverable-gate.md`](../05-ops/html-deliverable-gate.md) |

### 各阶段工具调用清单（对比 S3/S4 说明）

| 阶段 | 工具调用场景 | 调用方式与注意事项 |
|------|------------|-------------------|
| **S0** | 联网查证 | 搜索查证，输出查证 query 记录，见 `search-policy` / `SearchBundle` |
| **S3** | 写稿章节文件 | 新建章节文件，S3 写稿过程需及时更新台账，不能跳过 |
| **S4** | 合并 / Puppeteer / Mermaid | 排版构建 |
| **S5** | 审校 + 质量评分 | 综合审校报告，不得省略，**超时5s** 继续执行 |

---



---


# S5 节点

> 来源：section-3-workflow.full.md，自动分节

## 阶段 5：质量审校

**参考** ：`quality-check.md` 第1节 · **C0** · 全量审校 SOP

### §3.5 S5 审校流程

```
审校流程：
  调用 Proofer（审校角色），启动全量审校 + Mermaid图 + 脚注 + 注释一致性
  调用 Proofer（语言层审校，拼写检查）+ 错别字检查 + 过渡段 + 去AI味
  调用 Researcher（原料回溯审核，确认来源引用是否完整）
  分级审校·按章节重要性分 S/P/C/B 四级
  调用 CX（跨章一致性审核），见 cross-chapter-consistency.md
  调用 C0-1（全书去AI味扫描）→ 确认通过后进入 S6，见 book-level-consistency.md
  调用 C0-2（重复内容 / 冗余表述检查）→ S1、S2 定稿后的二次检查
  输出质量审校报告（综合打分）
  调用 Proofer（最终核查）+ B 层评分（B2）+ 输出审校通过通知
  完成 **S5 审校结束**
  等待 用户确认
  等待 确认进入 S6
  等待 确认继续
```

### S5 审校入场单（强制）+ 说明
| id | 入场条件 | 检查方式 | 通过标准 | 备注说明 |
|---|---|---|---|---|
| S5-G1 | 全量审校 | 审校报告完成 | `qualityReport=true` | 审校报告必须包含所有章节 |
| S5-G2 | 全量 | 数据新鲜度表 | `dataFreshnessTable=true` | 联网数据有效期检查 |
| S5-G3 | 全量 | 去AI味 | `overall>=7.5` | 去AI味综合分达标 |
| S5-G4 | 全量 | B 层审校 | `bLayerScore>=6.7` | 篇级一致性达标 |
| S5-G5 | 全量 | C0 全书一致性 | `bookLevelC0Pass=true`（含 C0-1 去AI味通过 + C0-2 重复检查） | 输出更新 `book-level-consistency.md` 文件 |
| S5-U1 | 用户确认 | 删除风险内容 | `deletionRiskConfirmed=true` | 涉及删减章节需用户同意 |
| S5-U2 | 用户确认 | 学术使用来源 | 引用合规确认 `academicUseConfirmed=true` | 引用来源需确认合规 |
| S5-U3 | 用户确认 | 发布确认 | `publishConfirmed=true` | 最终发布前需用户确认 |

---

### §3.5.1 S5 数据新鲜度必报规则（P0 强制，2.0.1 新增）
> **来源**：2026-04-02 某大数据项目在 S5 审校结束后，"最新数据"标注了 2020 年，S5 审校未覆盖数据时效性检查，导致交付后书稿有 ~5 年时效缺口，20% 章节数据已过期，被投诉误导读者
> **教训**：数据密集型书稿（含统计数据/调研数据/事件时间线），S5 审校必须覆盖数据新鲜度，不得跳过

**数据新鲜度必报（P0 强制）**：
```
S5 审校结束时，强制输出数据新鲜度表（P0 强制）：

════════════════ → S5 审校 ════════════════
数据新鲜度总表（{M}章，含数据引用章节：{N}章）
数据截止时间：{ceil(M÷0.2)}章，达标（80%以内）：{N}章，达标率：{N/M×100}%
数据新鲜度分布（高时效性风险）：

  各章需注意：  时效风险章节清单（需标注更新）：
  如N < ceil(M÷0.2)，表示有不足20% 章节  存在过期数据风险，建议检查最新数据：read_file 重新确认数据出处
```

**数据新鲜度章节格式模板**：
```
数据新鲜度：[S3-ChNN] 章N.md | 数据来源：{数据来源名称} | 数据时效：{数据截止时间/标注来源}
```

**数据时效性分级阈值**：
| 时效级别 | 适用场景 | 数据新鲜度要求 |
|-----------|------------|
| 低时效 | 历史类 | 历史数据不要求100% |
| 中时效（1~5年） | 通用商业/科普 → 数据年份不超过5年 |
| 高时效（1~3年） | 11~20章，数据年份不超过3年 |
| 极高时效 | 21~30章，不超过 ceil(M÷0.2) 章 |
| 最高时效 | 超31章 | 超0章内时效风险 → 全量1章 |

> **时效说明**：超时效风险章节1章后，推荐重新确认来源→ 1次数据声明

---

### 审校角色编排

```
审校：
  角色 Proofer（语言层审校）：  调用语言审校 + Mermaid图 + 注脚 + 注释模板
  角色 Proofer（拼写语言审校）：  调用拼写检查 + 过渡段检查 + 去AI味审核
  角色 Researcher（原料回溯）：  调用原料来源回溯（确认引用合规来源）
  分级审校级别细分 S/P/C/B 分级，按分级安排重点审校 S5 审校时间
  角色 CX（跨章一致性）：  调用跨章一致性 cross-chapter-consistency.md
  角色 C0-1（全书去AI味）→ 确认通过后进入 S6，见 book-level-consistency.md
  角色 C0-2（重复/冗余内容）→ S1·CS2 定稿后二次检查
  输出质量报告综合打分
  角色 Proofer（最终核查）+ B 层审校（B2）+ 审校通过通知
  完成 **S5 审校结束**
  等待 用户确认
  等待 确认进入 S6
```

### S5 审校入场单清单（强制）+ 说明
| id | 入场条件 | 检查方式 | 通过标准 | 备注说明 |
|---|---|---|---|---|
| S5-G1 | 全量 | 审校报告完成 | `qualityReport=true` | 审校报告必须包含所有章节 |
| S5-G2 | 全量 | 数据新鲜度表 | `dataFreshnessTable=true` | 联网数据有效期表 |
| S5-G3 | 全量 | 去AI味 | `overall>=7.5` | 去AI味综合分达标 |
| S5-G4 | 全量 | B 层评分 | `bLayerScore>=6.7` | 篇级一致性达标 |
| S5-G5 | 全量 | C0 全书一致性 | `bookLevelC0Pass=true`，含 C0-1 去AI味通过 + C0-2 重复检查 | 输出更新 `book-level-consistency.md` 文件 |
| S5-U1 | 用户确认 | 删除风险内容 | `deletionRiskConfirmed=true` | 涉及删减章节需用户同意 |
| S5-U2 | 用户确认 | 学术来源合规 | 引用合规 `academicUseConfirmed=true` | 引用来源需确认合规 |
| S5-U3 | 用户确认 | 发布确认 | `publishConfirmed=true` | 最终发布前需用户确认 |

---



---


# S6 分卷说明

> 本分卷面向 S6 阶段。目标不是把作品丢出书房，而是把书稿从**虚拟书房的完成区**推进到**虚拟书房的转化区**，并在需要时继续推进到**发布区**，形成可传播、可产品化、可外部使用且可回流修订的成果。

## S6 目标

- 明确本轮转化目标。
- 沉淀可复用的转化资产，并在需要时关联 S5 交付物。
- 把转化结果映射回资产面板。
- 在发布区记录外部使用状态与反馈闭环。
- 给出下一步执行动作。

## 必备输入

- 已完成的章节状态台账。
- 已通过的质量检查结果。
- 当前版本的发布范围说明。

## 必备输出

- `[S6]-content-units.md`：内容单元清单。
- `[S6]-product-roadmap.md`：产品化路线图。
- `story-bank.md`：故事库归档状态更新。
- `sessions-summary.md`：追加 S6 决策记录与后续动作。
- `[S6]-release-map.md`：发布映射内部台账（按需，但进入发布区时必须生成）。
- `releases/<chapterId>-release.json`：发布区初始清单，记录待发布状态、交付物引用与渠道信息。


## 执行顺序

1. 读取 `chapter-status.md` 与 `.fbs/chapter-status.md`。
2. 核对完成度、风险项、未闭环事项。
3. 生成内容单元与路线图草案。
4. 更新 `story-bank.md` 归档状态，并向 `sessions-summary.md` 追加本轮 S6 决策摘要。
5. 复核后将内部转化记录落盘到 `.fbs/`，将对外交付物保持在 `deliverables/`。
6. 若存在可外用成果，补做发布映射，并同步写入 `releases/` 的发布区初始状态。
7. 发生真实外部使用后，按 `待发布 → 已发布 → 反馈中 → 回流修改` 四态更新发布区记录。

## 通过标准

- 状态结论清晰。
- 输出文件齐全。
- 发布状态可追踪。
- 风险与后续动作可执行。
- 若发生反馈回流，能明确回到转化区或写作区的后续动作。

## 关联文档

- `references/01-core/section-s6-transformation.md`
- `references/05-ops/search-policy.json`
- `references/02-quality/quality-check.md`

