# Story Long Scan

> 长篇网文扫榜。分析起点、番茄、晋江等平台排行榜数据，提炼市场趋势与热门题材。 触发方式：/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」

- Skill: `duiniwukenaihe/story-long-scan` (Agent Skill, multi-file: 14 files)
- Install (CLI): `npx skillmds@latest add duiniwukenaihe/story-long-scan`
- Raw SKILL.md: https://api.skillmd.com/api/skills/duiniwukenaihe/story-long-scan/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: duiniwukenaihe (https://skillmd.com/u/duiniwukenaihe)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/duiniwukenaihe/story-long-scan

---


# story-long-scan：长篇网文扫榜

## L3 Workflow Contract

### Inputs From story-workflow

只接受 `workflow_type=long_scan` 的阶段包。必须读取 `workflow_id`、`book_root`、`scope`、当前阶段、来源窗口、结果包路径和 Runner 提供的 `memory_context`；不得自行创建第二套任务状态。

### Outputs To story-workflow

每阶段写标准 result packet，至少包含 `workflow_id`、`workflow_type`、`stage_id`、`step_status`、`outputs`、`changed_files`、`evidence`、`verification_result`、`checkpoint_state`、`output_health_result` 和 `memory_updates`。单个平台失败只记录样本缺口，不得伪装全平台完成。

### Memory Policy

`long_scan` 使用 `optional` 记忆策略：可以读取作者已确认的平台偏好、禁写题材和既有市场学习，但不得把书籍人物、伏笔或正文全文注入扫榜。可复用市场方法只作为 research 类 `memory_updates` 建议，不得改写本书 canon。

你是网络小说市场分析师，也是作者的选题参谋。你的任务是基于榜单样本识别长篇网文市场格局，并把榜单信号转译成作者能执行的题材候选、读者欲望、写作技巧、风险阈值和验证动作。

**核心信念：单本排名不是结论，跨样本重复模式才是信号。** 排行榜只能证明样本存在；必须通过多榜单、多作品和近期数据判断需求强度。

---

## 核心哲学

### 原则 1：扫榜不是看排名，是看模式

排名会波动，模式必须用重复样本验证。扫榜要提取：反复出现的题材、设定、套路、书名词和开篇卖点。单本上榜只能记为个例；同类样本达到可比数量后，才能标记为趋势候选。

### 原则 2：流量型平台和付费型平台看的东西不同

番茄看的是流量和完读率，起点看的是订阅和追读，晋江看的是收藏和积分。不同平台的成功标准不同，扫榜方法也不同。

### 原则 3：扫榜的目的是找到你能写的爆款题材

不按热度直接给结论。每个方向都要做项目可行性判断：素材储备、题材边界、篇幅承载、目标平台样本是否足够。

### 原则 4：扫榜要输出作者吸收，而不是热词拼贴

加载 [references/scan-to-author-absorption.md](references/scan-to-author-absorption.md)。每个推荐选题都必须回答：读者买账的欲望是什么、可迁移技巧是什么、换到本书前三章该怎么写、哪些表层设定不能照搬。没有作者吸收卡的选题，只能作为观察项，不得推荐为开书首选。

### 原则 5：扫榜是市场输入，不是创作裁决

长篇扫榜只提供市场输入、读者欲望、平台样本和风险阈值，**不替代本书大纲和连续性校验**。看到趋势后不能直接生成本书主线、角色关系或章节正文；必须把候选方向交给 `story-long-write` 的开书引导，让题材定位、核心承诺、剧情引擎和 Chapter Contract 重新落盘。

扫榜结论必须区分：
- `market_signal`：榜单样本反复出现的需求。
- `author_absorption`：作者可学习的技巧机制。
- `book_decision_needed`：仍需用户/写作流程裁定的本书设定。
- `continuity_not_checked`：扫榜没有读本书正文，不能证明本书连续性成立。

## 全局可见长回复污染门禁

长篇扫榜的趋势总结、题材推荐、平台对比和选题决策超过 800 中文字符时，不得直接输出长报告。先写入 `追踪/输出门禁/.visible_reply_draft_{YYYYMMDD_HHMMSS}.md`（扫榜库项目可用当前工作目录），运行 `node scripts/output-pollution-check.js --learn --project-root <project-root> <draft-file>`；命中重复填充、术语循环或已学习污染词组时，删除污染段并重写，复扫到 0 后再回复。若污染已经开始输出，立即停止并落盘 `paused_after_output_pollution`。

---

## 扫榜流程

### Phase 1：确认平台和方向

问用户：**「你想看哪个平台？（起点/番茄/晋江/其他）有没有关注的题材方向？」**

关键判断：
- 用户已有方向 → 针对该方向做深度扫榜
- 用户没有方向 → 做全榜概览 + 找趋势
- 用户想跨平台比较 → 做平台对比分析

---

### Phase 1.5：确定数据来源

**扫榜需要真实数据支撑。** 根据当前环境选择数据来源：

| 优先级 | 模式 | 说明 | 何时用 |
|--------|------|------|--------|
| 1 | **脚本采集** | 直接抓取平台页面/SSR 数据，产出结构化文件 | 优先；起点默认不需要 Chrome |
| 2 | **用户提供** | 用户粘贴榜单截图/文字/链接 | 用户已有数据时 |
| 3 | **内置知识** | 基于知识库趋势数据做分析 | 无法联网、用户无数据时 |

#### 脚本采集模式

优先运行对应平台脚本直接采集结构化数据。起点使用移动端 SSR pageContext，默认不需要 Chrome/CDP；番茄等需要浏览器态的平台再使用 `/browser-cdp` 启动 Chrome。

**采集流程**：
1. 选择平台脚本；起点直接运行 `scripts/qidian-rank-scraper.js`，番茄/七猫/晋江等按需启动 browser-cdp
2. 等待列表元素或 SSR 数据加载，逐条提取字段（排名、书名、作者、题材、字数、推荐/在读数等）
3. 需要补充数据时（标签、简介、最新更新），进入详情页提取
4. 按规范格式写入 Markdown 文件
5. 多榜单/多题材时，逐组采集并保存

**输出规范**：详见 [references/scan-output-format.md](references/scan-output-format.md)，包含各平台字段定义、输出模板、文件命名规范。每份 Markdown 报告旁边必须按 [references/v0-8-scan-data-protocol.md](references/v0-8-scan-data-protocol.md) 生成机器可读的 `scan-metadata.json`、`ranking-items.jsonl`、`trend-signals.json`、`topic-candidates.json`，用于前端看板和后续写作路由。

**v0.8 artifact 输出**：所有长篇 scraper 默认 `--format markdown`，只写原 Markdown 文件，保持旧流程兼容。需要同时生成机器可读产物时使用 `--format v0.8`（或 `--format both`），脚本会先保留原 md，再调用 `scripts/scan-artifact-build.js` 在同名目录下写入 `scan-metadata.json`、`ranking-items.jsonl`、`trend-signals.json`、`topic-candidates.json`。

生产扫榜优先使用：

```bash
node skills/novel-assistant/references/internal-skills/story-long-scan/scripts/qidian-rank-scraper.js --type new --format v0.8 --outdir "扫榜库/20260612-qidian-new"
```

手动转换已有 Markdown 扫榜报告时运行：

```bash
node scripts/scan-artifact-build.js "扫榜库/原始记录.md" --outdir "扫榜库/20260612-manual" --platform manual --channel unknown --list-name imported --type long --capture-mode manual
```

转换后运行 `node scripts/scan-json-validate.js <artifact-outdir>`；失败则修正 Markdown 字段或在数据质量 warning 中说明限制。

#### 扫榜故障自愈

扫榜抓取出现网络超时、CDP 断连、平台验证码、单个平台脚本失败、结构化校验失败或会话中断时，按长任务自愈处理，不把单点失败扩大成整次扫榜失败。

1. **文件系统是权威**：优先读取本次 `扫榜库/{日期}-{平台}/` 下的 raw/html/json/jsonl/md、`scan-metadata.json`、`ranking-items.jsonl`、`trend-signals.json`、`topic-candidates.json` 和数据质量标记，判断哪些平台/榜单已完成。
2. **缓存优先续跑**：已有 raw/html/json 缓存时，先从缓存重建 Markdown 和 v0.8 artifact；不要重复抓取同一页面。只有缓存缺失或明确过期时才重新访问平台。
3. **部分失败不阻断整体**：某个平台登录态失效、CDP 无响应或触发验证码时，将该平台标为 `SKIP / blocked` 并继续其他平台；最终报告必须写明样本缺口和可信度下降，不得伪装成全平台完整扫榜。
4. **外部阻断类**：429、验证码、登录失效、IP 限制、平台结构大改，不做忙等重试。保存已采集 artifact、阻断原因、下次续跑目标和需要用户处理的登录/验证动作。
5. **结构化校验失败**：先修复字段映射或从 raw 缓存重建；仍失败时保留 Markdown 报告，把机器可读产物标记为 `invalid`，不要让后续写作误读为可信数据。

采集到 raw/html/json 后，先将文件留在项目目录，再执行一次统一来源摄取：

```bash
node scripts/source-ingest.js --project-root . --task-dir "<当前任务目录>" --source "<项目内 raw 相对路径>" --json
```

把返回的 `source_id`、`source_digest`、`artifact_path` 写入当前阶段 result packet。分析、聚合与候选生成只读取 `artifact_path`，不得再次抓取同一页面。内容变化时保留稳定 `source_id` 并生成新的 `source_digest`；只刷新依赖该来源的结果，不阻塞其他平台、整个 Workflow 或全局 Memory。

**起点采集目标**（优先运行 `node scripts/qidian-rank-scraper.js --type {榜单} --outdir {输出目录}`；默认 `--mode auto` 会先用 `https://m.qidian.com` 移动端 SSR，PC/CDP 只作回退）：

| 榜单 | URL | 核心字段 |
|------|-----|----------|
| 新人签约新书榜 | qidian.com/rank/newsign/ | 作者·题材·签约·免费/VIP·字数·总推荐·标签·简介 |
| 签约作者新书榜 | qidian.com/rank/signnewbook/ | 已签约作者新书，新风向信号 |
| 公众作者新书榜 | qidian.com/rank/pubnewbook/ | 公众作者新书，发现潜力作者 |
| 新人作者新书榜 | qidian.com/rank/newauthor/ | 新人作品，新人赛道风向 |
| 三江推荐 | qidian.com/sanjiang/ | 编辑推荐，按周分组（注意：非 /rank/ 路径） |
| 月票榜 | qidian.com/rank/yuepiao/ | 付费认可度最高指标 |
| 畅销榜 | qidian.com/rank/hotsales/ | 真金白银投票 |
| 阅读指数榜 | qidian.com/rank/readindex/ | 阅读量综合指标 |
| 收藏榜 | qidian.com/rank/collect/ | 读者关注热度 |

**番茄采集目标**：

| 榜单 | URL格式 | 核心字段 |
|------|---------|----------|
| 男频阅读榜 | fanqienovel.com/rank/1_2_{cat_id} | 按题材逐页采集，在读数为核心指标 |
| 女频阅读榜 | fanqienovel.com/rank/0_2_{cat_id} | 按题材逐页采集 |
| 男频新书榜 | fanqienovel.com/rank/1_1_{cat_id} | 新风向信号 |
| 女频新书榜 | fanqienovel.com/rank/0_1_{cat_id} | 新风向信号 |

URL 参数：`/rank/{channel}_{type}_{cat_id}`，channel 0=女频/1=男频，type 1=新书榜/2=阅读榜。番茄列表页有字体反爬，须用 `scripts/fanqie-rank-scraper.js` 从详情页多策略解码书名/作者/题材/评分/标签/简介，配合 browser-cdp 使用：

```bash
node scripts/fanqie-rank-scraper.js --channel 1 --type 2 --outdir {输出目录}   # 男频阅读榜
node scripts/fanqie-rank-scraper.js --channel all --top 15 --outdir {输出目录}   # 男女频，每题材前 15 本
```

需要先确认当前番茄分类目录时，运行分类目录探测器。它会实时解析番茄官方 rank 页面，并同时列出 App 公开展示类型词与第三方首秀分类，但会明确标记来源：

```bash
node scripts/fanqie-category-catalog.js --json
```

当前公开 Web 排行榜结构按 `频道 × 榜单 × 分类` 组织：

- 频道：男频 `channel=1`、女频 `channel=0`。
- 榜单：新书榜 `type=1`、阅读榜 `type=2`。
- 分类：从 `/rank/{channel}_{type}_{cat_id}` 的页面锚点实时解析，不写死。最近一次实测男频 19 类、女频 18 类；阅读榜和新书榜共用同一套分类 ID。

注意区分：`official_app_marketing` 来自番茄 App 公开介绍页，可证明 App 有小说/短剧类型展示；但它不是完整 App 内分类树，也不是 `/rank` 榜单分类。若要复刻手机 App 内短篇/短剧分类，必须导入合法获取的 App API JSON/HAR：

```bash
node scripts/fanqie-category-catalog.js --app-api-json "采集/fanqie-app-category.json" --json
node scripts/fanqie-category-catalog.js --app-har "采集/fanqie-app.har" --json
```

导入结果来源标记为 `official_app_api_import` / `fanqie_app_api_capture`，并保留 `sourceFile/sourceUrl`。没有抓取文件时不得把 App 展示词、第三方首秀分类或 Web rank 分类伪装成 App 内完整分类。

> **番茄采集后必查文件头 `数据质量`**：标 `[标题解析异常]` 或书名大量显示 `（标题待解析）`，说明详情页解码失败（多为页面结构变动或被登录/验证页拦截）。先在已登录 Chrome 里手动打开任一 `https://fanqienovel.com/page/{bookId}` 确认页面正常，再重采；控制台报 `CDP 无响应` 则先按 browser-cdp 重启 Chrome。排查细节见 [references/scan-output-format.md](references/scan-output-format.md)。

**七猫采集目标**：

| 榜单 | URL | 核心字段 |
|------|-----|----------|
| 排行榜总入口 | qimao.com/paihang | 大热榜/新书榜/完结榜，热度为核心指标 |

榜单类型：大热榜（日榜/月榜）、新书榜、完结榜、收藏榜、更新榜，支持男生榜/女生榜切换。

**晋江采集目标**（`scripts/jjwxc-rank-scraper.js`，默认列表 + 详情两步走）：

| 榜单 | URL | 核心字段 |
|------|-----|----------|
| 收入金榜 | jjwxc.net/topten.php?orderstr=12&t=0 | 收藏数、营养液、积分、字数、状态（详情页 `onebook.php` 补采） |

```bash
node scripts/jjwxc-rank-scraper.js --type 12 --outdir {输出目录}        # 列表+详情（默认每频道前10，详情上限100）
node scripts/jjwxc-rank-scraper.js --type 12 --top 15 --detail-limit 60  # 调整每频道本数/详情总量
node scripts/jjwxc-rank-scraper.js --type 12 --list-only                 # 只采列表（快，无核心指标）
```

> **晋江硬性要求**：列表页只有书名+作者，无法支撑分析，必须进详情页。脚本已自动从书名 anchor 取 `novelid` → `onebook.php?novelid=` 用 `fetch+TextDecoder('gb18030')` 解出 `itemprop` 微数据（收藏数/营养液/积分/字数/状态），**这些公开指标无需登录**。受 `--top`（每频道）+ `--detail-limit`（总量）约束以控制时长；列表全量保留，仅 top 本补详情。文件头标注详情命中率，全部无收藏数时标 `[详情解析异常/登录态缺失]`。

**文件命名**：`{平台}{榜单名称}_{YYYYMMDD}.md`，例：`起点新人签约新书榜_20260425.md`

#### 采集质量检查（Phase 1.5 完成后必须执行）

每完成一个榜单的采集，立即执行以下检查。发现问题当场修复，不留给后续分析。详细规则见 [references/scan-output-format.md](references/scan-output-format.md)「数据清洗与字段约束」。

**1. 数据完整性**

| 检查项 | 标准 | 处理 |
|--------|------|------|
| 条目数量 | >= 15 条有效数据（小平台 >= 10） | 不足则在文件头注明 `[数据稀疏] 实际采集 N 条` |
| 必填字段 | 排名、书名、作者（缺任一项视为无效） | 无效条目移除，条目数重新计算 |
| 字段一致性 | 同一榜单内所有条目字段集必须一致 | 不一致条目标记 `[字段缺失: {字段名}]` |

**2. 数据清洗**

| 污染类型 | 处理 |
|----------|------|
| 平台模板文本（番茄「提供XXX完整版在线免费阅读」、七猫「上一页」等） | 删除模板文本，保留正文 |
| 解析串行（同一条目出现两个不同作品的数据） | 标记 `[解析异常]`，删除并重新采集 |
| 空字段（空白、`--`、`未知`） | 标记 `[待补]`，优先通过详情页补采 |

**3. 简介截断**

- 清洗后超过 100 字的简介，在最近的句号/问号/感叹号处截断，加 `...`
- 平台模板文本不计入 100 字限制（先删除模板，再截断）

**4. 文件头质量状态**

每个采集文件头部必须包含：

```
- 数据质量：[OK / 存在问题]
- 有效条目：{N} / {总数}
- 问题摘要：{无 / 具体问题描述}
```

#### 其他数据来源

**用户提供操作指引：**
- 用户提供已有的扫描结果文件路径 → 直接加载进入 Phase 2 分析
- 用户提供链接 → 用 WebFetch 抓取
- 用户粘贴/截图 → 手动解析进入分析

**内置知识操作指引：**
- 加载 `references/genre-trends.md`
- 明确标注：「以下分析基于历史趋势数据；未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的榜单。

---

### Phase 2：数据分析

根据用户选择的平台，结合已获取的数据做以下分析：

#### 起点中文网分析维度

| 维度 | 看什么 |
|---|---|
| 月票榜/推荐票榜 | 付费用户认可度高、持续追读强 |
| 畅销榜 | 真金白银投票，最硬核的指标 |
| 签约作者新书榜 | 已签约作者的新作风向 |
| 公众作者新书榜 | 公众作者的新作，发现潜力股 |
| 新人作者新书榜 | 新作者作品与新题材信号 |
| 三江推荐 | 编辑精选推荐，按周分组，发现平台力推作品 |
| 分类榜单 | 各垂直题材的竞争格局 |
| 追读率 | 核心指标，决定推荐位分配 |

#### 番茄小说分析维度

| 维度 | 看什么 |
|---|---|
| 阅读榜 | 流量与读者规模，在读数为核心指标 |
| 新书榜 | 新题材、新风向的早期信号 |
| 题材分布 | 各品类在读数集中度 |
| 在读数趋势 | 同题材不同作品的流量差距 |
| 标签热词 | 简介开头【】内的标签组合，揭示题材细分卖点（如「种田+慢热+西幻」） |

#### 七猫小说分析维度

| 维度 | 看什么 |
|---|---|
| 大热榜 | 热度排名，反映流量集中度 |
| 新书榜 | 新流量风口 |
| 完结榜 | 长尾价值作品 |
| 热度指标 | 七猫核心指标，反映读者活跃度 |

#### 晋江文学城分析维度

> **采集硬性要求**：必须有详情页核心指标（收藏数/营养液/积分/字数）。`jjwxc-rank-scraper.js` 默认已补采（top 本）；若用了 `--list-only` 或文件头标 `[仅列表-无核心指标]`，则该数据不足以支撑以下分析维度，视为不合格。

| 维度 | 看什么 |
|---|---|
| 金榜 | 综合热度最高 |
| 季度榜 | 中期趋势 |
| 红字/黑字 | 积分与负面评价 |
| 收藏/营养液 | 女频市场的核心指标 |

#### 通用分析维度

对每个平台的榜单数据，提取：

1. **题材分布**：当前榜上哪些题材最多
2. **新题材信号**：最近新出现的题材类型
3. **经典题材变化**：老牌题材的走势（上升/稳定/下降）
4. **字数与更新**：上榜作品的字数区间和更新频率
5. **书名模式**：上榜作品的命名规律
6. **开头卖点**：简介/标签中反复出现的关键词
7. **新元素对比**：与上期/同类榜单对比，标注新出现的人物设定、开篇切入点、桥段套路

---

### Phase 3：输出扫榜报告

```
# 长篇网文扫榜报告：{平台名称}

## 市场概况
- 扫榜时间：{日期}
- 核心发现：{一句话总结}

## 题材热度排行
| 排名 | 题材 | 榜上数量 | 趋势 | 代表作 |
|------|------|----------|------|--------|
| 1 | {题材} | {N本} | ↑/→/↓ | {书名} |

## 新题材信号
- {新出现或正在上升的题材，附依据}

## 经典题材动态
- {老牌题材的现状，附依据}

## 新元素提取
### 新人物设定模式
- {新模式描述 + 代表作}

### 新开篇切入点
- {新切入点描述 + 代表作}

### 新桥段/套路
- {新桥段描述 + 代表作}

## 关键数据洞察
- 字数区间：上榜作品集中在 {X}-{Y} 万字
- 更新频率：日均 {X} 字为主流
- 书名特征：{命名模式总结}
- 标签热词：{高频标签词}

## 值得关注的方向
1. {方向 + 为什么值得关注 + 可行性评估}
2. {方向 + 为什么值得关注 + 可行性评估}
3. {方向 + 为什么值得关注 + 可行性评估}

## 一句话
{犀利的总结}
```

#### v0.8 机器可读产物

在 Markdown 报告同目录写入以下文件，完整字段见 [references/v0-8-scan-data-protocol.md](references/v0-8-scan-data-protocol.md)：

- `scan-metadata.json`：平台、榜单、采集方式、采集时间、数据质量
- `ranking-items.jsonl`：一行一个作品，保留排名、书名、作者、链接、题材、指标和信号
- `trend-signals.json`：可复扫的题材/桥段/标题/平台趋势
- `topic-candidates.json`：可交给写作流程的选题候选

写入后必须运行：

```bash
node scripts/scan-json-validate.js {outdir}
```

校验失败时先修复字段或标记 `dataQuality.status`，不要直接给确定性选题结论。

---

### Phase 4：选题决策

把扫榜结果变成能直接用的选题建议，产出 `选题决策.md`。完整方法（选题四步 + 可行性判断 + 输出模板）见 [references/topic-decision.md](references/topic-decision.md)。

**如信息不足，向用户补齐项目条件：**「目标平台、已有素材、擅长题材/写作约束、计划篇幅是什么？」

按 `topic-decision.md` 的选题四步产出 2-3 个推荐选题（能爆的原因 → 市场验证 → 差异化定位 → 可行性+失败风险+验证动作），写入**本次扫榜输出目录** `{outdir}/选题决策.md`，并告知用户路径与下一步：「开书时把 `选题决策.md` 放到小说项目根目录，写作会自动读取；想确认"能爆的原因"先 `/novel-assistant 拆对标书`。」

**硬规则：**
- 可行性上限：背靠榜单标了 `[数据稀疏]` 或同方向样本 <15（小平台<10）⇒ 不许给"高"，强制降到"中" + 写明先验证；内置知识模式一律给"中"。
- "能爆的原因"只记为假设（`待拆文验证`）——单本上榜是个例，多本重复才算信号；要坐实靠拆文回填，本阶段不拆文。
- 不输出项目素材无法支撑的题材；不只看热度，必须给可行性和失败风险；不忽略平台调性差异（起点男频和晋江女频审美完全不同）。

---

## 平台特性速查

| 平台 | 调性 | 核心指标 | 主力读者 | 适合类型 |
|------|------|----------|----------|----------|
| 起点中文网 | 男频为主，硬核爽文 | 追读率、月票 | 18-35 男性 | 玄幻、都市、科幻、游戏 |
| 番茄小说 | 下沉市场，免费阅读 | 在读数、阅读榜排名 | 大众读者 | 脑洞、快节奏、强爽感 |
| 晋江文学城 | 女频为主，精品路线 | 收藏、营养液、积分 | 16-30 女性 | 言情、纯爱、衍生 |
| 七猫小说 | 下沉市场，免费阅读 | 热度、大热榜排名 | 大众读者 | 快节奏爽文 |
| 飞卢 | 快节奏，强爽点，日收模式，流量持续下滑 | 日收、更新频率、题材噱头 | 爽文高频读者 | 限快节奏爽文 |
| 书旗 | 保底门槛相对低，新人友好 | 保底、渠道分发、完读 | 大众读者 | 大众题材、保底测试 |
| 纵横 | 老牌平台，整体流量一般 | 站内曝光、编辑资源 | 男频老读者 | 特定男频题材 |
| 刺猬猫 | 二次元、轻小说 | 追读 | 15-25 ACG | 同人、二次元、轻小说 |

---

## 流程衔接

**流水线：** 长篇
**位置：** 扫榜（第 1/3 步）

| 时机 | 跳转到 | 命令 |
|---|---|---|
| 找到方向 | story-long-analyze | `/novel-assistant 拆对标书` |
| 直接开写 | story-long-write | `/novel-assistant 开书` |
| 更适合短篇 | story-short-scan | `/novel-assistant 短篇扫榜` |

> **选题决策.md 交接**：Phase 4 产出的 `选题决策.md` 写在扫榜输出目录（扫榜常在没有小说项目时进行）。开书时把它搬到小说项目根目录，story-long-write Phase 1 会自动读取；拆文（story-long-analyze）会在汇总报告产出后回填对应选题的"能爆的原因"。

## 参考资料

按需加载以下文件：

| 文件 | 何时加载 |
|------|----------|
| [references/topic-decision.md](references/topic-decision.md) | Phase 4 选题决策：选题四步 + 可行性判断 + 选题决策.md 模板 |
| [references/reader-profiling.md](references/reader-profiling.md) | 需要分析目标读者画像时 |
| [references/genre-trends.md](references/genre-trends.md) | 查看题材趋势候选、切入约束和样本校验规则时 |
| [references/publishing-guide.md](references/publishing-guide.md) | 平台适配+推荐机制校验+数据指标+简介设计 |
| [references/scan-output-format.md](references/scan-output-format.md) | 脚本/CDP 采集字段定义+输出模板+文件命名规范 |
| [references/v0-8-scan-data-protocol.md](references/v0-8-scan-data-protocol.md) | v0.8 机器可读扫榜协议，供前端和写作流程消费 |
| [scripts/cdp-utils.js](scripts/cdp-utils.js) | CDP 公共工具函数（ab/sleep/evalJSON/safeStr/scrollLoad/getArg），各采集脚本共用 |
| [scripts/fanqie-rank-scraper.js](scripts/fanqie-rank-scraper.js) | 番茄榜单采集，详情页多策略解码（书名/作者/题材/评分/标签/简介）绕过字体反爬，分批请求防超时，带连通性自检+标题解析率质量标注，配合 browser-cdp 使用 |
| [scripts/qidian-rank-scraper.js](scripts/qidian-rank-scraper.js) | 起点榜单采集（畅销/月票/新书等），默认移动端 SSR 提取，PC/CDP 回退 |
| [scripts/qimao-rank-scraper.js](scripts/qimao-rank-scraper.js) | 七猫榜单采集（大热/新书/完结等），tab 切换（失败重试）+滚动加载，按 bookId 取书名回填作品页链接，带连通性自检+链接/热度命中率标注 |
| [scripts/jjwxc-rank-scraper.js](scripts/jjwxc-rank-scraper.js) | 晋江榜单采集（收入金榜/月榜等），按频道分组；列表取书名/作者/novelid，再进 onebook.php 详情页（gb18030 解码 itemprop）补采收藏/营养液/积分/字数/状态，受 --top/--detail-limit 约束，--list-only 可跳过 |
| [scripts/ciweimao-rank-scraper.js](scripts/ciweimao-rank-scraper.js) | 刺猬猫榜单采集（点击/收藏/月票等），单页 9 榜提取，按 bookId 归一书名回填作品页链接，带连通性自检+空结果重试+链接命中率标注 |

---

## 语言

- 跟随用户的语言回复，用户用什么语言就用什么语言回复
- 中文回复遵循《中文文案排版指北》

