---
name: chapter-split
description: >-
  把 echo-reading 里一个章节的原文，按内容理解切成若干
  「阅读单元」，每个单元生成独立的 9 段笔记骨架（原文灌满、2-7 段占位、8/9 留白）+
  一份卷层面的 00-导读.md，并把 progress.md 改成「章→单元」两层。当用户说「读《X》第 N 章 /
  下一章」而该章【尚未切分】、或说「把这章切成单元 / 这章太长读着累 / 分一下段」时使用。
---

# chapter-split — 把过长的章切成读得舒服的阅读单元

在**读某章之前**，把一章过长的纯原文 `chNN/raw.md` 切成若干**阅读单元**——每个单元是一个能独立站住的完整场景 / 论证回合，配 9 段骨架，让「打开一个文件 = 一份可承受的注意力」。单元和 `raw.md` 同处 `chNN/` 目录：长章切成 `00-导读.md` + `01.md…NN.md`，短章本身就是一个单元，写一个 `chNN/01.md`（铺一次 9 段）即可。`raw.md` 是源头底本，本 skill 只读它、绝不改它、不删它。

## 最重要的一条：判断不写死，长度不是规则

切在哪、切成几个、各叫什么——**全靠读懂这一章的内容来判断**，依据是注意力 + 语义自足 + 信息密度三层标准，**不是字数**（拿 `wc` 量字数定切点是把因果搞反了）。**先读 `references/segmentation-principle.md`，那是本 skill 的灵魂。**

固化成脚本的只有两头确定性脏活：取原文（`extract_source.py`）、按锚点搬运+校验（`write_units.py`）。中间「怎么切」每章都不同，是判断，不复用。

## 工作流

记 `SKILL` 为本 skill 目录，`ROOT` 为 echo-reading 项目根。

### 第 0 步 · 分诊：要不要切

```bash
python3 SKILL/scripts/extract_source.py ROOT/books/<书>/<章>/raw.md
```

看原文有多少段、大致多少字、是什么文体。判断：
- 短章（本身就是一个完整单元，如道德经一章）→ **不切**。spec 里只放 1 个单元（锚点 = 原文第一段），脚本把 9 段骨架写成 `chNN/01.md`，结束。
- 长章（一个文件就是一堵墙）→ 进第 1 步。

### 第 1 步 · 通读，画结构图

**完整读这一章的原文**（用 Read 读 `chNN/raw.md`，或看 extract 的分段列表），不是扫。产出一张结构图：这是什么文体（对话 / 论证 / 叙事 / 说理）？里面有哪几个场景 / 论证回合 / 叙事段？每段从哪句**起**到哪句**止**（记下起始**原句**做锚点）+ 一句「这段在干嘛」+ 密度高低。**没读懂不准往下切。**

### 第 2 步 · 提落缝方案

按三层标准（见 principle）把结构图落成单元清单：每个单元 = 标题 + 起始锚句 + 「是什么」+「为什么能独立站住」+ 密度备注。**显式标出「长度会骗人」处**（长但连贯不切 / 短但密度高必须独立）。

### 第 3 步 · 子 agent 冷读闸（不可跳，替代人审）

用户没读过这本书，让他审落缝是假动作；而你自评必然感觉良好。所以**起一个独立子 agent** （Task / Agent 工具）做冷读：

- 只把**各单元原文（按序、带标题）**喂给它，**绝不**附上你「为什么这么切」的理由；
- 让它当纯读者逐单元回答 principle 里那 5 问（完整吗 / 悬空吗 / 是不是两件事黏一起 / 是不是密度墙 / 相邻该不该合）；
- 据它的报告**修订落缝** → 再起一个子 agent 冷读一轮 → **收敛了才放行**（至多 2 轮）。

### 第 4 步 · 脚本搬运 + 回装校验

落缝定了，写 spec JSON（格式见 `write_units.py` 头部）喂进去：

```bash
cat spec.json | python3 SKILL/scripts/write_units.py \
    --book <书> --chapter <章> --root ROOT
```

`write_units.py` 会：从 `chNN/raw.md` 取原文 → 按锚句定位 → 切片 → 每片写一个 9 段骨架单元文件，全部落进 `chNN/`（多单元写 `00-导读.md` + `01.md…NN.md`，progress 展开两层；单单元写 `01.md`，progress 保持单行）→ **把所有切片拼回跟原文逐字比对**。`raw.md` 原样不动。

**回装校验必须报「✓ 零差异」**。报差异说明锚点切错（漏段 / 重复 / 串行），别用结果，回去查锚点。脚本绝不改写原文一个字——它只搬运。

### 第 5 步 · 回报

简短告诉用户：切成几个单元、各叫什么、校验通过、可以开始读单元 1 了。`raw.md` 留在 `chNN/` 里作源头底本（供溯源 / 日后重切），不用删、也别让用户删——它和单元同处一个目录，各司其职。

之后用户读单元、说理解、跟 LLM 聊——**2-7 段的内容在那时才长出来**（深读主流程，见项目 CLAUDE.md），本 skill 只铺空骨架，不预先生成注疏。

## 不变量

- 切分依据是**理解**，不是字数；长度只在切完当事后提醒铃（见 principle）。
- 缝锚在**原句**上，不锚行号。
- **只在「骨架态」章上跑**：若某章 2-7 段已做过深读（不是 `<!-- 待生成 -->`），切分会毁掉成果 → 先警告、别动。
- 9 段结构模板与项目 CLAUDE.md 一致；多单元时第 5 段是「与上一单元的连接」（首单元为「与前章的连接」）。
- 单元一律落进 `chNN/`，原文 `chNN/raw.md` 只读不改不删。
