# 篇幅分流判断规则

Phase 1「基本信息确认」环节使用本规则判定导入书是长篇还是短篇，判定结果决定后续走哪条迁移路径。

---

## 判定优先级

判定按以下顺序执行，命中即停止，不再向下判断。

| 优先级 | 信号来源 | 判定规则 |
|--------|---------|---------|
| 1 | 用户显式声明 | 用户说「这是长篇 / 短篇」→ 以用户为准，直接锁定 |
| 2 | 结构信号 + 字数校验 | 检测到明确章节分隔符且章节数 ≥ 5 → 长篇；全文无章节分隔、单文件单篇 → 按下方细则表按字数分三档判定（字数阈值沿用优先级 3 的建议值） |
| 3 | 字数兜底 | 仅在 1、2 均不明确时启用，见下方「字数兜底规则」 |
| — | 冲突处理 | 信号之间发生矛盾时，不自动决策，回到 Phase 1 向用户复述并请用户拍板 |

---

## 优先级 1：用户显式声明

Phase 1 信息确认时向用户提问：**「这是长篇还是短篇？」**

- 用户明确回答 → 锁定类型，跳过后续检测。
- 用户未回答或说「不确定」→ 进入优先级 2 结构信号检测。

---

## 优先级 2：结构信号 + 字数校验

### 章节分隔符识别

复用 `structure-mapping-long.md` 的分隔符识别表：

| 分隔符模式 | 示例 |
|-----------|------|
| `第X章` / `第X章 ` / `第X章：` / `第X章 XXX` | 第1章 初入江湖 |
| `Chapter X` | Chapter 1 |
| 纯数字编号 + 标题 | 1. 觉醒 |

### 判定规则

| 检测结果 | 判定 |
|---------|------|
| 有明确章节分隔符，且识别到章节数 ≥ 5 | 强长篇信号 → 判定为**长篇** |
| 全文无任何章节分隔符，单文件单篇，且总字数 < 20000 | 强短篇信号 → 判定为**短篇** |
| 全文无任何章节分隔符，单文件单篇，20000 ≤ 总字数 < 30000 | 判定为**短篇**，但 Phase 1 复述时告知：已超过短篇拆解管道 20000 字的建议上界，请用户确认仍按短篇导入 |
| 全文无任何章节分隔符，单文件单篇，但总字数 ≥ 30000 | 结构与字数信号相反 → 不自动判定，见下方「冲突处理」请用户拍板 |
| 有章节分隔符，但章节数 < 5 | 结构信号不明确 → 进入优先级 3 字数兜底 |
| 分隔符模式模糊（如仅有单个标题行） | 结构信号不明确 → 进入优先级 3 字数兜底 |

---

## 优先级 3：字数兜底

**仅在优先级 1、2 均无法给出明确判定时使用。** 当前导入契约按短篇通常 8000-20000 字的区间取 30000 字作建议上界，并保留题材差异余量。

| 条件 | 判定 | 备注 |
|------|------|------|
| 总字数 < 30000 且无章节结构 | **短篇** | — |
| 总字数 ≥ 30000 | **长篇** | — |
| 章节数 ≥ 5（任意字数） | **长篇** | — |
| 总字数 < 30000 但章节数 ≥ 5 | 初判**长篇**，但须提示用户 | 见下方「分章短篇连载」 |

> **建议值说明**：30000 字阈值是估算值，不同平台和题材的短篇上限有差异。执行时列入 open-questions，建议用户复核是否适用于当前导入书。

### 分章短篇连载

检测到总字数 < 30000 但章节数 ≥ 5 时，在确认环节提示用户：

> 「检测到分章结构（共 {N} 章），但总字数约 {X} 字，低于 30000 字。可能是分章短篇连载。确认按长篇导入，还是按短篇处理？」

用户拍板后锁定类型。

---

## 冲突处理

当不同信号之间出现矛盾时，**不自动决策**，回到 Phase 1 向用户复述检测结果：

| 典型冲突场景 | 处理方式 |
|------------|---------|
| 用户说「短篇」但检测到 20 章 | 复述：「检测到 20 章章节结构，通常属于长篇。确认按短篇导入？」由用户拍板 |
| 用户说「长篇」但全文无章节分隔且字数 < 30000 | 复述：「全文无章节分隔，总字数约 {X} 字，通常属于短篇。确认按长篇导入？」由用户拍板 |
| 用户未声明、全文无章节分隔、单文件单篇，但字数 ≥ 30000 | 复述：「全文无章节分隔，但总字数约 {X} 字，已超过短篇常见上界。按长篇导入建工程，还是仍按短篇处理？」由用户拍板 |
| 结构信号与字数信号方向相反 | 展示两项信号，请用户决定 |

用户拍板的结果记入 Phase 1 上下文，后续步骤以此为准，不再重新判定。

---

## 判定结果与后续路径

判定完成后，迁移路径按以下对应关系分流：

| 判定结果 | 迁移路径 | 映射规则参考文件 |
|---------|---------|----------------|
| **长篇** | 长篇迁移路径（Phase 3-L） | `structure-mapping-long.md` |
| **短篇** | 短篇迁移路径（Phase 3-S） | `structure-mapping-short.md` |

> 注：`structure-mapping-long.md` 对应长篇迁移映射规则，`structure-mapping-short.md` 对应短篇迁移映射规则。

---

## 快速判定流程图

```
Phase 1 问用户：「长篇还是短篇？」
         │
         ├─ 用户明确回答 ──────────────────────────► 锁定类型
         │
         └─ 未回答 / 不确定
                  │
                  ▼
         检测章节分隔符
                  │
                  ├─ 有分隔符且章节数 ≥ 5 ──────────► 长篇
                  │
                  ├─ 无分隔符，单文件单篇，< 20000 ─► 短篇
                  │
                  ├─ 无分隔符，单篇，20000 ≤ 字数 < 30000 ─► 短篇（复述时告知超出建议上界）
                  │
                  ├─ 无分隔符，单文件单篇，≥ 30000 ─► 提示用户裁定
                  │
                  └─ 信号不明确
                            │
                            ▼
                   字数兜底判定（30000 字阈值）
                            │
                            ├─ < 30000 且无章节结构 ─► 短篇
                            ├─ ≥ 30000 ─────────────► 长篇
                            ├─ 章节数 ≥ 5 ──────────► 长篇
                            └─ < 30000 但章节数 ≥ 5 ─► 提示用户裁定
```
