# 快速起步与路由（Intake & Routing）

> **版本**：2.1.2（与 SKILL.md frontmatter version 对齐）
> **用途**：定义 FBS-BookWriter v2.1.2 **快速起步三条路径**，帮助 AI 在首轮就把用户推进到正确阶段，降低空转追问。本文件是 Skill 的核心入口文件。

> **重要约束**：本文件和 ESM 的 INTAKE 状态直接绑定。进入 INTAKE 后请结合 `section-3-workflow.md` 的 RESEARCH 相关步骤执行，不要在此阶段跳转到写作。

**环境预检落盘**：`intake-router --intent inspect`（或任意 intent 加 `--with-env-preflight`）会在书稿 `.fbs/env-preflight.json` 刷新 `env-preflight.mjs` 的 JSON 输出，供宿主展示「环境受限」；失败**不阻断** intake（见 `section-6-tech.md`）。

---

## ⚡ 新用户入口（P0-2 修复：S0.5 先行）

> **P0 强制规则**：**首次使用本 Skill 的用户，必须先走 S0.5 新手引导，再进入路径判断。** 已有书稿或已建虚拟书房的用户可直接跳过 S0.5，进入路径判断。

**新用户判断条件**（满足任一即为新用户）：
- 当前目录无 `.fbs/` 目录（虚拟书房未初始化）
- 当前目录无 `chapter-status.md`
- 用户明确说"第一次用"或"不知道怎么开始"

**新用户流程**：
```
S0.5 新手引导（2轮对话）
  第1轮（轻松开场）：
    「想写什么呢？随便说说就行——
      比如"想写一本理财入门书"、
      "有一堆访谈记录想整理成报告"、
      "想写白皮书但不知道怎么开始"都可以。
      手头有没有现成的材料也可以顺便说一声。」
  第2轮：AI 根据回答说明当前打算怎么做（用日常语言），直接开始；
          不要求用户确认，不展示系统术语（虚拟书房/路径A/B/C/S0）
  → 完成后进入路径判断（继续阅读本文件后续内容）
```

**续写用户（老用户）流程**：直接读取 `.fbs/chapter-status.md`，确认当前进度，说明下一步，**不重复引导**。

---

## ⚡ 触发词 → 路径快速映射（P0-3 修复：桥接声明）

| 触发词 / 用户说法 | 直接路由 | 说明 |
|-----------------|---------|------|
| 激活原料 / 原料盘点 / 整理素材 | **路径 A** | 有素材信号，跳过 WP1 询问，直接进入素材盘点 |
| 我有文档/PDF/资料/笔记/访谈 | **路径 A** | 同上 |
| 写书/写手册/写白皮书 + 有主题 | **路径 B** | 有主题无素材，直接进入情报收集 |
| 写书/写长篇（无其他信息） | **路径 C** | 无信号，触发新手引导或探索问卷 |
| 继续写稿 / 接着写 / 继续上次 | **续写路径** | 读取 `chapter-status.md`，从上次断点继续 |
| 质量自检 / 去AI味 | **质检入口** | 直接进入 `quality-auditor-lite.mjs` 执行，不重走路径判断 |

> **规则**：收到"激活原料/原料盘点/整理素材"等素材类触发词时，**禁止走完整 WP1 问询流程**，直接进入路径 A 素材盘点，第一句说「好，我们先整理你的材料」。

---

## ⚡ 续写路径完整路由（UX-P1-02 修复：补全断点恢复逻辑）

> 触发词：「继续写稿」「接着写」「继续上次」「继续第X章」「还差几章」

**完整续写流程**：

```
Step 1：读取进度台账
  → 优先读 .fbs/workbuddy-resume.json（v2.1.1 会话快照，含 currentStage/nextSuggested/wordCount）
    如快照存在且 updatedAt 在 24 小时内：直接使用快照信息跳至 Step 4，无需读取全部文件
  → **时间窗对照（避免与记忆摘要混淆）**  
    - **恢复卡** `workbuddy-resume.json`：**24 小时内**视为「热恢复」，intake 可优先减少全量扫盘。  
    - **记忆摘要** `.fbs/smart-memory/session-resume-brief.md`：**48 小时内**在 team-lead 首响中优先加载（见 `fbs-team-lead.md`）。二者为不同工件，阈值不同是**刻意设计**，不是文档冲突。  
  → 次优先读 .fbs/chapter-status.md（内部真值层）
  → 若不存在，读根目录 chapter-status.md
  → 若均不存在，说明书房未初始化，提示先运行 init-fbs-multiagent-artifacts.mjs

Step 2：确认当前断点
  → 找到状态为 in_progress / writing / partial 的章节 → 这是"断点章节"
  → 若无断点章节，找最后一个 completed 章节后的第一个 pending 章节

Step 3：加载断点章节上下文
  → 读 .fbs/book-context-brief.md（书稿背景简报）
  → 读 .fbs/smart-memory/session-resume-brief.md（记忆摘要，若存在）
  → 读断点章节文件（若存在）

Step 4：向用户说明状态，直接告知而不追问
  AI 首响模板（自然语言，有温度）：
  「上次写到第[N]章《[章节名]》，[已有X字/刚开了个头/写到一半]。
   我接着写，从[具体段落/位置]继续。
   [如有术语锁定：有 N 个专有名词已锁定，风格保持一致。]」

Step 5：直接开始写，不等待用户确认
  → 按 section-3-workflow.md §S3 执行章节写作
  → 写完当章后，由 team-lead 统一更新 .fbs/chapter-status.md
  → 只有遇到结构分歧（如章节顺序需要调整）或原料明确不足时，才暂停说明，其余情况直接推进
```

**断点章节定位优先级**：
1. 状态 `in_progress`（最高优先级，明确在写）
2. 状态 `partial`（已有内容但未完成）
3. 状态 `pending`（排在已完成章节之后的第一个）
4. 若全部 `completed`，说明书稿已完成，提示进入 S5/S6 交付阶段

**记忆恢复**：
- 若 `.fbs/smart-memory/session-resume-brief.md` 存在，将其内容纳入上下文
- 若不存在，可运行 `node scripts/apply-book-memory-template.mjs --book-root <本书根>` 生成
- 不要求用户手动操作；新会话默认先做三级恢复检测，用户说「继续上次」时直接进入本续写路径

---

## WorkBuddy 实测复盘（2026-04-13）：首屏 · 确认 · 退出

> 来源：宿主侧会话复盘；与 `intake-router` 的 `firstResponseContext.openingGuidance` 对齐。

### 首屏三秒（P0）

- 用户只说「福帮手」时：**不要**首屏平铺 5 条以上同级菜单。
- 先给**一句话状态** + **最多 3 个主动作**：写新书、接着写、质检或整理素材；更多能力等用户说「其他」再展开。
- **宿主展示**：优先使用 `intake-router --json` → `firstResponseContext.userFacingOneLiner`（已含「这次想做什么？」），**禁止**把完整 JSON 或 SKILL 规范全文塞进用户可见区。
- **禁止元指令泄露**：勿向用户复述「按版本规范」「JSON 输出」「不重复读文件」「干净首屏」等——属 Agent/宿主内部约定，**不是**用户文案。
- **禁止**在恢复检测后无目的地 `list_dir` 整个 `.fbs/`（动辄上百文件，仅增加噪音）；用户要看目录结构或排障时再按需列举。
- 与 [`ux-optimization-rules.md`](./ux-optimization-rules.md)「首屏三秒原则」一致。

### 文件工具与 dot-directory（2026-04-14 复盘，P0）

> 来源：WorkBuddy Windows 会话复盘（`search_file` 对 `.fbs/` 内文件返回 Found 0，但磁盘上文件存在）。

- 在部分宿主上 **`search_file` 默认不进入**以 `.` 开头的目录（`.fbs/`、`.workbuddy/` 等）。因此 **禁止**用 `search_file` 探测 `workbuddy-resume.json`、`esm-state.md`、`session-resume-brief.md` 是否存在于书稿下——会得到 **0 结果**，易误判为「未检测到 FBS 工作区」。
- **正确做法**：
  - **读取台账**：对固定相对路径使用 **`read_file`**（例如 `<bookRoot>/.fbs/workbuddy-resume.json`）；不存在时再走无恢复卡分支。
  - **确认是否有 `.fbs/`**：对 **书稿根** `list_dir`（非递归 `.fbs` 内部），看列表中是否含 `.fbs`。
- **禁止**：仅凭 `search_file` → Found 0 得出「未初始化」结论；须换工具复核。全文见 [`skill-full-spec.md`](./skill-full-spec.md) §2.4。

### 一次性确认 + 分步执行（P0）

- 书名 / 字数 / 读者 / 结构等**信息收齐后**，先**汇总成清单**，请用户说「开始」或「改第几项」再进入长链路；避免连续多轮只让用户选「下一步选哪个数字」。
- 小决策（如改一个词）可直接执行后汇报，不必再开一轮总确认。

### 退出前软询问（P0）

- 用户说「退出 / 先到这」时：可先问**是否还有其他需要**或说明**进度会保存**，再执行 `session-exit`；见 `session-exit` JSON 的 `agentGuidance.beforeExit`。

### 意图外输入（P1）

- **状态类**（乐包余额、进度、文件在哪）：可直接简短回答，再回到主流程。
- **探索类**（某工具是什么）：先澄清「想了解概念」还是「要在本书里用」再展开检索。

### 「继续」与 S0 阶段推进（2026-04-13 复盘，P0）

- 用户说「继续 / 继续完成未完成的任务」时：**不得**默认等于「继续补 S0 素材」。若素材条数已达本书约定充分线，须**提议进入 S1/S2**（需求确认/大纲），见 [`s0-material-phase-guard.md`](./s0-material-phase-guard.md)。
- 外部技能（如 `wechat-article-search`）**批量入库后**，若条数从不足变为达标，须做一次 **S0 退出评估**并给出阶段推进话术。

---

## 阶段推进门禁（v2.1.1 新增，P0）

> **背景**：实测发现 S0 阶段可被静默跳过，AI 直接进入 S3 成文，导致 author-meta 全空、术语漂移、承诺遗忘。v2.1.1 将门禁从「纸面规则」升级为「执行锁」。

### 门禁检查矩阵

AI 在每次推进阶段前，**必须**读取 `esm-state.md` 并逐条检查前置条件。不满足时向用户说明缺失项，**禁止静默跳过**：

| 推进方向 | 前置条件 | 不满足时的 AI 行为 |
|---------|---------|-----------------|
| **S0 → S1** | `author-meta.md` 核心主张已填写（非空）| 「先确认几个关键点，写出来才不会跑偏」，引导补填 |
| **S1 → S2** | 大纲已用户确认 + `story-bank.md ≥ 3 条` | 「还缺几个案例故事，补完再定目录更稳」 |
| **S2 → S3** | 目录已用户确认 + `commitments.md` 已创建 | 「先建一张承诺清单，后面写完能对账」 |
| **S3 → S4** | `chapter-status.md` 中全部章节标「成文」 | 列出未完成章节，询问是否先跳过 |
| **S4 → S5** | S4 20+3 条质检勾选表全部通过 + 字数完成度 ≥ 50% | 列出❌项和字数缺口，禁止以高分掩盖 |

### 脚本不可用时的降级方案（P0）

当 `intake-router.mjs` 无法执行（Node.js 不可用 / 脚本报错 / 宿主限制）时，AI **必须**手动引导用户完成 S0 最小集，**完成前不得进入 S3 成文**：

```
S0 最小集（脚本降级手动版）

Step 1：author-meta.md
  → 引导用户说出：「这本书想解决什么问题？」「目标读者是谁？」「你的写作风格偏……（举例）？」「预计写多少字？」
  → 写入 .fbs/author-meta.md，保留用户原话

Step 2：术语锁定记录.md
  → 「书里会出现哪些专业词汇？哪些容易被说成好几种叫法？」
  → 写入 .fbs/术语锁定记录.md，格式：标准写法 | 禁用变体

Step 3：character-registry.md（预制人物）
  → 「书里打算用什么类型的案例人物？给我提供几个名字和背景，我来帮你安排」
  → 写入 .fbs/character-registry.md（3–5 个）

Step 4：commitments.md（创建空表）
  → 「这本书会对读者做什么承诺？比如『每个赛道有行动挑战』？」
  → 写入 .fbs/commitments.md 的承诺注册表，即使为空也要建文件

完成后：
  - esm-state.md 标记 phase: S0_done, s0ManualFallback: true
  - 向宿主写入系统记忆：FBS-{书名}-主题锁 / 术语锁 / 字数目标
  - 告知用户：「好，基础信息确认完了，我们开始定大纲」
```

> **为什么不能跳过**：LLM 在 S3 写作时，S0 确立的约束（目标读者、作者声音、术语标准）因上下文漂移已不可见。7 锁文件是将这些约束「钉住」到磁盘的唯一机制，脚本降级时靠手动补全，不靠 AI 自觉。

---

## 入口表达合同（先说人话，再引入术语）

- **首响先说用户动作**：优先使用「先整理现有材料 / 先明确主题 / 先一起找方向」这类日常表达，不要把「虚拟书房 / 路径A/B/C / S0」直接作为首句入口文案。
- **术语后置**：确需引入内部术语时，先用白话说明，再在第二句或括号中补一句内部名词，例如「我先把这次写作工作区准备好（内部叫虚拟书房）」。
- **路径字母只做内部路由**：`路径 A/B/C` 主要用于内部判路与文档说明，不要求用户在第一轮自行理解字母系统。

## WP1 / WP2 双工作面绑定

| 工作面 | 时机 | 面向用户的说法 | 内部动作 |
|--------|------|----------------|----------|
| `WP1` 起步工作面 | `INTAKE` 首响 | 整理材料 / 明确主题 / 一起找方向 | 锁定 `路径A/B/C`，但不展开内部术语 |
| `WP2` 书稿工作面 | `INTAKE → RESEARCH` | 当前工作区已就绪，资料/进度/交付都在这里 | 绑定 `.fbs/`、`deliverables/`、`releases/` 三层目录与当前阶段动作 |

**切换顺序固定**：

1. 在 `WP1` 先判断用户属于材料驱动 / 主题驱动 / 探索驱动。
2. 宣告搜索前置合同（为什么查、查什么、查完去哪一步、离线如何降级）。
3. **初始化虚拟书房**（WP1→WP2 过渡必做）：运行 `node scripts/init-fbs-multiagent-artifacts.mjs --book-root <本书根>` 构建 `.fbs/`、`deliverables/`、`releases/` 三层底座及基础工件；首次使用或书根变更时执行，已初始化可跳过（详见 [`workbuddy-agent-briefings.md`](./workbuddy-agent-briefings.md) §S3 写作前 team-lead 必做）。
4. 再进入 `WP2`，说明首个可用工作面已经准备好。

## 搜索前置合同（进入 RESEARCH 前必须说清楚）

进入任意 `S0/S1/S2` 调研前，必须先向用户说清：

- **为什么现在要查**：本轮检索要解决什么问题；
- **要查哪几类内容**：如主题现状、同类内容、目标读者、时间基准；
- **查完马上进入哪一步**：如素材盘点、目录草稿、章节写作；
- **离线时如何降级**：无法联网时明确告知为离线降级，而非静默改用模型知识。

推荐口径：

> 我先查一下当前主题的同类内容、目标读者和时间基准，查完就给你整理出下一步写法；如果现在不能联网，我会明确标注为离线降级。

---

## 快速起步（Quick Start）总逻辑


### 三步触发流程

> **零步前置动作**：用户输入触发 Skill 后，AI 先用一句简单自然的话说清**现在打算做什么**——不要一上来就给出菜单或追问，也不要说「技能已加载」类套话。感知到用户有素材就直接说「好，我先看看这些材料」；有主题就说「好，我先查查这个方向的同类内容」；都不确定再问一句。

用户输入触发 Skill 后，AI **先完成起步判断，再不询问、直接锁定入口路径**：



1. **有素材信号**：用户提及"原料 / 文档 / PDF / 资料 / 笔记 / 访谈 / 讲义 / 书稿" → 路径 A
2. **有主题信号**：用户有明确想写的主题，但没有现成素材 → 路径 B
3. **无信号**：用户输入模糊，无主题无素材 → 路径 C

### 路径选择决策矩阵

AI **直接给出"已确定路径，进入 X"**，而非列菜单等待选择：

```
路径 A（有素材）
  素材信号 → 用户提及"原料 / 文档 / PDF / 资料 / 笔记 / 访谈 / 讲义 / 书稿"
  处理逻辑 → 直接进入素材盘点流程，输出 material-inventory.md
  终点     → 进入 S0 素材激活

路径 B（有主题）
  主题信号 → 用户有明确想写的主题，但没有现成素材
  处理逻辑 → 锁定 topicLock，进入快速情报收集
  终点     → 进入 S0/S0-B 情报收集

路径 C（探索驱动）
  无信号   → 用户输入模糊，无主题无素材
  处理逻辑 → 触发探索问卷，3-5 题引导出主题
```

**决策原则**：
- 素材信号优先级最高，有素材信号即走 **路径 A（激活原料）**
- 主题信号次之，无素材但有主题即走 **路径 B（快速情报收集）**
- **兜底路径 C**：若 A/B 条件均不满足，触发探索问卷

| 条件组合 | 置信度 | 推荐路径 | 说明 |
|------|--------|------|------|
| A✓ B✓ C✓（有素材+有主题+联网可用） | 高 | **路径 A（激活原料+情报收集）** | 素材信号优先，情报收集作为补充 |
| A✓ B✓ C✗（有素材+有主题+离线） | 高 | **路径 A（激活原料，离线情报降级）** | 素材信号优先；P0-7修复：原错误路由至路径B |
| A✓ B✗ C✗（有素材+主题模糊+离线） | 高 | **路径 A（素材盘点先行，从素材中提炼主题）** | P0-7修复：原错误路由至路径B |
| A✗ B✓ C✓（无素材+有主题+联网可用） | 中 | **路径 B（快速情报收集）** | 主题驱动，联网补充情报 |
| A✗ B✓ C✗（无素材+有主题+离线） | 中 | **路径 B（快速情报，离线降级）** | P0-7修复：原错误路由至路径C，有主题应走路径B |
| A✗ B✗ C✗（无素材+无主题） | 低 | **路径 C（全探索模式，引导式问卷）** | 兜底路径 |

### 特殊：AI 无法直接搜索时的降级策略

```
宿主无内容搜索时（路径 A 或 B 均有降级）

    终止节点 → 告知"我目前无法联网搜索，
    但我们可以进入 [素材清单/文档盘点] 先梳理您已有内容"
    路径被迫降级 → 走 路径 C，或 [仅本地规则] 补充写作
```

**兜底策略**：
- 素材信号高且索引内容不可检索时，**直接进入**路径 A/B 但标注"未验证"
- 主题信号高但检索无结果时，**直接进入**路径 B 但标注"待查证"
- **优先路径** A/B/C 均以"先给素材盘点再说"为兜底动作

---

## 路径详解

### 路径 A（有素材：激活原料）

**适用场景**：用户已有材料（PDF、文档、笔记、访谈录音整理等），希望 AI 帮助结构化。

**关键动作（原子步骤）**：

```
路径 A 流程：

[S0-A 素材激活]
    ① AI 说："请直接告诉我您有哪些素材（原料 / 文档 / PDF 等）"
    ② 用户列出清单，AI 按「格式/内容/来源/新鲜度」分析
    ③ AI 自动标注每份素材的可用度、缺口
    ④ AI 写出 .fbs/material-inventory.md

[S0 情报收集]
    ⑤ 根据素材缺口判断 = 素材完整度得分，补充缺口 / 提示用户补材料
    ⑥ 执行 L3/L4 级情报 + 触发内容策略（竞品、读者画像、时间标签）

[S0-B 深度情报（可选）]
    ⑦ 结合情报收集 2-4 轮问题，补充认知

[进入 PLAN → 目标路径生成至 S1/S2]
```

**路径 A 注意事项**：

- 素材盘点完成后进入 S0 情报，AI 主动问："希望本书的读者是谁（职业/年龄/目标读者群），重点写哪个方向？"
  - `时间标签` 标注每份素材的"新鲜度（近一年/一年前/已过时）"
  - `关键内容` 标注"待验证 → 执行 L4 情报 + CR 补证"
  - 检查→ 对用户提供的素材"可信度打分"

- 宿主支持 S0 时，AI 主动说："已完成素材盘点，进入 S0 情报，检索 [主题 X] 相关内容，已找到 [N] 个角度：[标题一，标题二，标题三...]"

### 路径 B（有主题：快速情报）

**适用场景**：用户没有素材，但有明确想写的主题（书名/方向/大纲草稿）。

```
路径 B 流程：

[S0 情报收集（快速）]
    ① 锁定 topicLock + 标注时间 + 情报收集 + 读者画像 + 关键词分析
    ② 执行 L4 同类书情报 + L5 深度情报（异步）
    
[S0-B 深度情报（可选）]
    ③ 结合情报收集 2-4 轮问题

[生成目录草稿（含 AI 主动触发 A 路径素材探问）
    ④ 提示约 10-15 个章节标题，按「核心/进阶/实操」分层
    ⑤ 写出 .fbs/story-bank.md

[进入 PLAN → 目标路径生成至 A 路径素材 / S1/S2]
```

### 路径 C（探索驱动）

**适用场景**：用户想写书但主题模糊，如"想写点什么但不知道写什么主题 / 想写家谱 / 有很多事想记录"。

```
路径 C 流程：

[激活探索问卷（异步）→ 触发 Path-C 探索问卷机制
    ① 3 个 Agent 发出 10 道问题，3 个不同角度
    ② 收集用户答案，标注 topicLock
    
[后续进入 S1（根据问卷结论分流）]
    ③ 若问卷确认有素材 → 进入路径 A → S0 素材激活 → S1
    ④ 若问卷确认有主题 → 进入路径 B → S0 情报收集 → S1
    ⑤ 若仍无明确方向 → 以探索模式直接进入 S1（以宽主题开始）
```

---

## 特殊场景：S0-B 深度情报

**触发场景**：路径 A 或路径 B 均在 S0 执行情报时，若 A 路径素材不足或 B 路径情报不够，则触发 S0-B 深度情报。

**关键角色**：Researcher Agent 执行，每个 Agent 角色独立搜索。

### 深度情报分级

Researcher 角色分级，AI 自动分析主题，触发对应级别（**原则上不超过 200 个搜索词**）：

当用户说出"职业规划的书该怎么入手写，有哪些关键内容 / 如何写好，什么值得参考"：

```
深度情报收集策略（举例）：

结合主题逐一 + 每类搜索词 → 含 主题关键词
    
[200搜索词

---
收集 2-3 个关键问题（可含关键词盘点搜索）
执行 L4 情报（同类书情报），按级别搜索
深度情报 → 自动补充到目录草稿，修改 + 完善
```

### 素材盘点完成信号的 AI 后续写出规划进 INTAKE 状态

素材盘点完成后，AI 自动生成 `.fbs/work-intelligence.md`：

- 标注每个章节的情报来源（待处理/待补）
- 确认读者语言与目标族群
- 判断情报缺口是否影响目录，补充后续动作（修改或不修改）

### 工件输出

- `.fbs/work-intel-{slug}.md`（路径 A/B）情报搜索写入
- `.fbs/work-intelligence.md`（路径 A/B）标注情报+确认读者群
- `.fbs/story-bank.md`（路径 B/S0 路径 A/B）目录草稿/情报汇总

---

## 搜索分级策略与说明

遵循 `search-policy.json` 配置，情报收集按以下级别执行：

| 搜索级别 | 适用场景 | 触发阶段 | 约束 |
|------|------|---------|------|
| L1 主题确认 | 书名/主题关键词/专业词 | S0/S3/S5 | 必须执行 |
| L2 内容竞品 | 同类书/报告/同类项目 | S0 | 必须执行 |
| L3 深度情报 | 结合章节标题+关键问题+相关案例 | S0-B | 建议执行 |
| L4 同类情报 | 搜索同一主题不同角度/市场数据 | S1/内容补充 | 建议执行 |
| L5 深度读者情报 | 用户口语+论坛问题+关键词 | S0 情报补充 | 建议执行 |

### L4 同类情报搜索策略

根据 Chapter Brief 执行同类书情报，收集"同类书目录"

```
搜索词结构举例：  "主题关键词 + "同类书目录" / "主题" / "方向" / "关键问题"
搜索逻辑补充：同类书情报注重"读者期望"而非单纯"关键词"，多检索"有读者认为有价值的内容"
工件输出 → Chapter Brief 补全后须包含 200 搜索词
执行者 A 搜同类书目录，B 搜主题问题结构，C 搜读者真实表达
```

### L5 深度读者情报（S0 情报补充）

```
搜索词结构举例：  用户口语 + [目标读者 + 关键词 / 论坛问题 + 关键词]
搜索逻辑补充：
  › 深度读者情报：按读者"真实问题"结构化搜索 → 不强调专业词
  › 情报收集：根据关键词 → 尝试在搜索中融入"读者口语/问题"
  › 结果收集：找"论坛帖/知乎问答/读书会讨论" → 补充到读者语言档

工件输出：fbs/reader-language.md（关键词 + 读者口语 + 反向验证）
```

**关键说明**：如果宿主没有 JS 搜索端点，则检查 Bing RSS 降级策略，基于搜索词执行 `effectiveEndpointStrategy` 路由至可用搜索节点，再补充写入 `reader-language.md`

---

## 会话摘要与工件管理

### 每次 INTAKE/启动后须写入虚拟书房工件


> **路径工件说明**：路径工件写入目录在 `.fbs/sessions/` 下，建议参考 2.0.1 优化，配合 `session-protocols.md` 与 `search-policy.json` `outputFile` 路由。

| 工件名 | 生成阶段 | 路径 | 说明 |
|------|---------|------|------|
| `material-inventory.md` | S0-A | A | 素材盘点 + 可用度/缺口打分 |
| `work-intel-{slug}.md` | S0-B | A/B | 深度情报搜索写入（配合 `search-policy.json` `s0WorkIntelPolicy.outputFile`，默认 `.fbs/work-intel-{slug}.md`，`{slug}` 根据搜索词+情报轮次命名） |
| `work-intelligence.md` | S0-B | A/B | 情报汇总 + 读者群确认 |
| `story-bank.md` | S0-B/S0 | A/B | 目录草稿/情报汇总 |
| `reader-language.md` | S0 L5 | A/B | 深度读者口语 + 反向验证 |
| `GLOSSARY.md` | **S0-A完成后，路径确认时**（P0-5修复：明确生成阶段） | 全路径 | 术语锁定文件；触发条件：用户提到专业术语/行业词汇/内部名词时，由 AI 主动创建并在后续写作中维护一致性；`workbuddy-agent-briefings.md` 要求的术语写入目标 |
| `sessions/creative-session.md` | 创意会 | 全路径 | 创意会记录（2.0.1 迁移到 `sessions/` 下） |
| `sessions/reader-session.md` | 写作阶段 | A路径 | 读者会记录（2.0.1 迁移到 `sessions/` 下） |
| `sessions/adversarial-session.md` | 对抗会 | 全路径 | 对抗会（与 v2.0.1 的 `argumentation-test.md` 相互对应） |
| `sessions/review-session.md` | 评审会 | A路径 | 评审会（2.0.1 迁移到 `sessions/` 下） |
| `sessions-summary.md` | 每次会话 | 全路径 | 每次工作流结束后写入 |
| `[S6]-content-units.md` | S6 | A/B | 内容单元资产化，具体见 `section-3-workflow.md` §S6 |
| `[S6]-product-roadmap.md` | S6 | A/B | 内容资产化路线图，具体见 `section-3-workflow.md` §S6 |
| `[S6]-release-map.md` | S6 发布映射 | A/B | 内部发布映射台账，记录待发布 / 已发布 / 反馈中 / 回流修改 |
| `releases/<chapterId>-release.json` | S6 发布准备 | A/B | 发布区初始清单，关联 S5 交付物与对外渠道 |

---

## S0 联网检索强制说明（P0）

> 优先级高于上方原有 S0 一般说明。

在任何写作流程启动前，**S0 联网检索阶段必须完成并留有记录**：

- 宿主支持 CLI 时：查看 `.fbs/search-ledger.jsonl` 确认存在 S0 阶段记录（`stage: "S0"` 或 `workflowStage: "S0"`）
- 宿主为对话模式时：显式声明"S0 已完成"或"S0 离线降级（原因：xxx）"
- 未完成 S0 且无离线降级声明 → ❌ 禁止进入 S1

**违规后果**：`s3-start-gate.mjs` 会检查 `search-ledger.jsonl` 中的 S0 时间戳检索证据，未完成 S0 将导致 S3 启动门禁失败（`process.exit(1)`）。

**专项深化**：为何必须联网、如何锚定最新时间、如何做时态验证、如何把检索反哺方法论与知识库，见 [`references/05-ops/web-search-strategy-deep.md`](../05-ops/web-search-strategy-deep.md)。

