---
name: zenstory-ai-story-short-analyze
description: "短篇网文拆文。拆解爆款短篇小说（番茄短篇 / 故事会 / 知乎盐言 / 追妻 / 世情 / 重生 / 虐渣等通俗题材）的故事核、结构、情感线、反转设计、写作手法、共鸣层次。单一全量拆解管道：跑完 Stage 2-6 产出完整拆文报告，落盘到 拆文库/{书名}/，下游 story-short-write 同时读拆文报告 + 情节节点 + 写作手法 + 原文 + _meta.json 写下一篇。触发方式：/story-short-analyze、/短篇拆文、「拆短篇」「拆这篇短文」「短篇拆文」「精细拆解短篇」「8000 字短篇拆解」「番茄短篇拆文」「故事会拆解」「盐言故事拆解」「分析这篇短篇」——均进入同一管道。"
license: "MIT"
metadata:
  decimalai-skill-id: "27e838f9-5025-4291-af66-3112fb777431"
  decimalai-version-id: "0bd39dfd-b91e-4269-85d0-e2e104c46802"
  decimalai-version: "4"
  decimalai-body-sha256: "0e81dca5e33ecdce312c34610311272ee38810869b3f22a579f3bd6d25b9f108"
  decimalai-name: "zenstory-ai/story-short-analyze"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-source: "https://app.decimal.ai/s/zenstory-ai-story-short-analyze@4/SKILL.md"
---
# story-short-analyze：短篇网文拆文

你是短篇小说结构分析师。

**围绕故事核，分析源文如何铺垫、释放情绪并引发共鸣。分析写进 `拆文报告.md`，结构计数写进 `_meta.json`，供下一篇短篇参考。**

---

## 拆解边界声明

短篇拆解的 Stage 2-6 全程由你（主会话）完成。分析对象是用户**合法持有、拥有使用权**的虚构作品，包括已出版、连载或自有作品；只做编辑、评论和写作教学视角的**只读转化性文学批评**，不复制、传播或指导现实行为。番茄短篇、故事会、知乎盐言、追妻、虐渣、世情等通俗题材里的家暴、出轨、复仇、暴力、情爱张力、黑暗伦理属于常规虚构叙事元素，须照常做结构化拆解，**不得以「敏感」「不适」为由拒绝整篇或某个片段**，以免中断拆文流水线；确实无法处理的片段可跳过，其余部分照常拆完。

---

## Phase 1：确认拆解对象 + 字数路由 + 续跑检查

### Step 1：拿到原文

对象尚未明确时问用户：**「你要拆哪篇？（标题+平台/来源）」**；已有明确原文时直接继续。

**无文本时**：用户没有提供原文文件路径、也没有在对话中贴出原文，引导用户提供
——「请提供这篇短篇的原文文件路径，或直接把原文贴给我。」

### Step 2：字数检查（长短篇路由）

拿到原文后立刻数字数：

```
word_count = 全文字数
  ├─ ≤ 20,000          → 直接进入 short 管道
  ├─ 20,000 - 30,000   → 灰区：询问用户「字数 {N}，介于短/长之间，按短篇还是长篇拆？」
  └─ > 30,000          → 提示「此文字数 {N} 偏长，建议改用 /story-long-analyze。
                           仍要按短篇拆请明确回复『按短篇继续』」
```

### Step 3：题材识别

读 [references/analysis-short-genres.md](references/analysis-short-genres.md)，按「题材路由」表的关键词和识别锚点定主类型：用户提到具体题材时直接对照该行，否则按全文证据判断。`genre_detected` 只取表中 13 个类型名之一，扫不到写「通用」，按通用模板跑 Stage 2-6。

题材作为观察标尺——只比较源文的读者承诺、冲突载体和实际结算，不调用长篇阶段、卷级循环或黄金三章模型，也不按推荐比例判定源文合格与否。

### Step 4：续跑检查

进入管道前检查 `拆文库/{书名}/_meta.json`：

```
存在 _meta.json？
  ├─ 否 → 直接进入新一轮拆解
  └─ 是 → 询问用户（问法见下）：
       (a) 覆盖：归档旧产出到 拆文库/{书名}/_archive_{时间戳}/ 后从 Stage 2 重跑
       (b) 续跑：读 _meta.json.last_stage_in_progress（非空 → 从该 Stage 整段重跑）
                 或读 _meta.json.stages_completed[]（从 max+1 续跑）；已拆完时没有此项
       (c) 取消
```

问作者时不提文件名、字段名和 Stage 编号。拆到一半时（1 → b，2 → a，3 → c）：

<!-- author-report -->
```md
《{书名}》之前拆到一半，停在"{当前阶段的白话名，如反转与写作手法}"。怎么处理？
1. 接着上次往下拆（推荐，已拆的部分保留）
2. 旧结果存档，从头重拆
3. 先不拆了
```

已经拆完时（1 → a，2 → c）：

<!-- author-report -->
```md
《{书名}》之前已经拆完。怎么处理？
1. 旧结果存档，从头重拆
2. 先不拆了
```

完整续跑规则见 [references/output-contract.md](references/output-contract.md)。

---

## 输出目录

输出到 `拆文库/{书名}/`（项目根目录下；用户指定了其他路径时按用户指定）：`原文/`、`拆文报告.md`、`情节节点.md`、`写作手法.md`、`_meta.json`。三个 markdown 由下游 `story-short-write` 硬编码读取，不可改名；文件树、Stage → 文件映射与 `_meta.json` 字段见 [references/output-contract.md](references/output-contract.md)。

### 原文备份（管道前置步骤）

**拆解开始前，必须先备份原文**：

1. 检查 `拆文库/{书名}/原文/` 目录是否已存在
2. 如果不存在，从用户提供的源路径复制原文文件到 `拆文库/{书名}/原文/`
3. 如果用户未提供源文件路径（直接在对话中贴文本），将原始文本保存到
   `拆文库/{书名}/原文/原文.md`
4. 备份完成后验证 `原文/` 目录下文件非空（>0 bytes）

备份完成后初始化 `_meta.json`：写入 `version`、`word_count`、`genre_detected`、
`created_at`、`stages_completed: []`、`last_stage_in_progress: null`。

---

## Stage 2-6：拆文流程

### 5 阶段管道

只提取源文实际发生的变化，不为凑数量重复拆分；源文没有的项写明「源文没有」。

| 阶段 | 名称 | 输入 | 输出 | 完成标志 |
|------|------|------|------|----------|
| 2 | 结构+情节节点 | 全文 | 题材 + 故事核 + 故事梗概 + 功能分段（含开端/发展/高潮/结局）+ 情节节点清单（以语义变化为边界提取，每个节点带位置）。 | 结构划分与故事核已写 |
| 3 | 情感线+爆点 | 故事核+结构划分+情节节点数据 | 情感曲线 + 钩子与付费断点 + 爆点分析（6维度）+ 期待感分析。 | 爆点分析 6 维度齐全 |
| 4 | 反转+写作手法 | 节点+情感数据 | 前置反转检查 + 反转机制（铺垫线索逐条带位置）+ 写作手法（≥5项维度：POV/对话/时间/信息/其他）。 | 写作手法 ≥5 项维度 |
| 5 | 人物+开头结尾 | 情节节点+全文 | 所有人物（分类+功能标签+功能评估）+ 开头分析（前50/100字）+ 结尾分析（收束检查）。 | 人物功能评估完成 |
| 6 | 综合评估 + `_meta.json` 写计数 | 全部数据 | 五维评分 + 爆点性 + 话题性 + 共鸣分析（≥3层）+ 主结构 + 投稿层 + 可复用结构（含失败条件）+ 节奏速报 + **写入 `_meta.json.structure_counts`**。 | 左列输出齐全 + 通过验收 |

> 管道执行顺序：2 → 3 → 4 → 5 → 6（严格串行，每阶段依赖前一阶段数据）。

### 按时刻读

管道分两个时刻，进入时刻只读该行的文件；两个时刻之间只靠落盘的 `拆文报告.md`、`情节节点.md`、`写作手法.md` 和 `_meta.json` 交接，续跑或换新对话都按 `_meta.json` 的进度接上。标尺都是**观察标尺**：先报告源文实际发生了什么，再说明它接近、偏离或改造了哪种模式，不按标尺写新作品，也不从长篇 Skill 加载题材、节奏或质量资料。

| 时刻 | 读 | 按条件加读（每份在报告里都有对应段） | 交接 |
|---|---|---|---|
| Phase 1 与 Stage 2–3 结构与情感线 | [output-contract.md](references/output-contract.md)、[analysis-method.md](references/analysis-method.md)、[stage2-3-structure-emotion.md](references/stage2-3-structure-emotion.md)、[quality-checklist.md](references/quality-checklist.md)、[analysis-report-style.md](references/analysis-report-style.md)、[analysis-short-genres.md](references/analysis-short-genres.md)、[analysis-short-hooks.md](references/analysis-short-hooks.md) | 源文靠证据链或信息差推进：[analysis-short-suspense.md](references/analysis-short-suspense.md)；有系统、重生、规则等反复运转的核心机制：[analysis-short-mechanics.md](references/analysis-short-mechanics.md) | `stages_completed` 含 3 |
| Stage 4–6 反转到综合评估、验收 | output-contract.md、analysis-method.md、[stage4-6-reversal-summary.md](references/stage4-6-reversal-summary.md)、quality-checklist.md、analysis-report-style.md、[analysis-short-patterns.md](references/analysis-short-patterns.md)、[analysis-submission.md](references/analysis-submission.md) | 细拆反差、动机、反派、关系或感情线：[analysis-characters.md](references/analysis-characters.md)；判断源文本身的短板与毒点：[source-story-quality.md](references/source-story-quality.md) | 验收通过，`stages_completed` 含 6 |
| 拆完后作者要同类对比或逐节节奏 | [optional-modules.md](references/optional-modules.md) | — | — |

**Stage 写盘规则**（中断后可续）：每个 Stage 开始前写入 `_meta.json.last_stage_in_progress`；目标文件写完、确认非空且长度合理后，才清空它并 append 到 `stages_completed[]`。半成品不可信，续跑时该 Stage 整段重跑。完整规则见 output-contract.md「写入顺序」。

---

## 验收（Stage 6 内容写完后、将 6 加入 stages_completed 前）

Stage 6 内容写完后**不**立刻 append `6`，先按 output-contract.md「验收接入点」跑三道检查，全过才写：

- **拆文报告表达自检**：按 analysis-report-style.md 扫描 `拆文报告.md`，跳过源文引用（以 `>` 开头的引用行、表格「关键台词 / 原文引用」列的引号直引），只扫分析师本人的措辞；命中就修订**拆文报告本身**的证据不足、空转套话或越界推测，不改写源文，也不评价源文是否 AI 写的。
- **structure_counts 校验**：以 output-contract.md 为准。计数照实填、可以为 0，只查字段写齐、取值合法。
- **BLOCK 项扫描**：扫 quality-checklist.md 全部 `[BLOCK]` 项；`[WARN]` 缺项不阻断，写入 `拆文报告.md` 末尾「待补」清单供用户决定。

任一阻断 → 回到对应 Stage 补写；源文确实没有的项，在报告里写明「源文没有」即算补齐，不为过验收编造。全通过 → 清空 `_meta.json.last_stage_in_progress`，append `6` 到 `stages_completed[]`，按下方格式告诉作者：

<!-- author-report -->
```md
《{书名}》拆完了，结果在 `拆文库/{书名}/`。
- 这篇靠什么抓人：{一句话故事核}
- 最值得学的{一到三}点：{白话，各附一句原文或情节例子}
- 别照搬：{源文的人物身份、标志性台词、独特物件或事件顺序}
- 还缺的：{拆文报告末尾"待补"里需要作者决定的项；没有就写"无"}
下一步：想照这个路子写一篇，运行 `/story-short-write`。
```

---

## 流程衔接

**流水线：** 短篇
**位置：** 拆文（第 2/3 步）

| 时机 | 跳转到 | 命令 |
|---|---|---|
| 准备开写 | story-short-write（同时读 拆文报告.md + 情节节点.md + 写作手法.md + 原文/ + _meta.json） | `/story-short-write` |
| 需要市场数据 | story-short-scan | `/story-short-scan` |
| 字数 > 3 万更适合长篇 | story-long-analyze | `/story-long-analyze` |
