# Textbook Outline

> 教材项目要做教学设计时用它：产出教学定位、UbD 预期结果五件套（大概念 / 持久理解 / 核心问题 / 迁移目标 / 学习目标）、章节树与例题 Bloom 梯度规划，写入 00-教材设计.md。触发语如"设计教材大纲"、"教材规划"、"课程体系设计"。通常由 textbook 调度，也可单独运行。不负责写章节正文，也不负责生成习题。需与 textbook 系列其余 skill 装在同一 skills 目录下。

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

---


# textbook-outline

以 UbD 逆向设计完成教材的阶段 1–3：教学定位 → 预期结果设计（核心 gate）→ 评估与章节设计（次要 gate），产出 `00-教材设计.md`。本 skill 是"先想清楚学生该带走什么，再倒推章节和例题"的落地执行者。

## 何时不触发

- 写章节正文（用 textbook-chapter）
- 生成例题/习题（用 textbook-exercises）
- 单篇教程的大纲（用 tutorial-writer）

## 两种调用模式

- **被 textbook 调度**（常规）：输入为 `{教材项目目录, 教材名}`；产出写入该目录，阶段 1 判定出的 `学科档案` 与两个 gate 的确认结果回报主 skill（`.progress.json` 由主 skill 维护，本 skill 不碰）。
- **独立触发**：先用一轮提问确认教材名与落盘目录（默认 `./<教材名>/`），后续流程完全相同，产出 `00-教材设计.md`；不建 `.progress.json`——那是主 skill 的职责。

交接契约、落盘布局、进度打印与 gate 停点格式的权威定义见 [../textbook/references/handoff-contract.md](../textbook/references/handoff-contract.md)，下文简称"契约文档"。本 skill 的进度行 `▶ 阶段 N/3` 是子 skill 内层标尺（契约文档第 5 节：N/M 中 M 为当前 skill 自身的阶段总数）；被调度时全局的 `▶ 阶段 N/5` 行由主 skill 打印，两级并存。

## 阶段 1/3：教学定位确认

打印进度：`▶ 阶段 1/3：教学定位确认`

用 AskUserQuestion **一轮**收集四项（对应契约的前四项；第五项 `学科档案` 由学科判定得出，不问作者）：

1. **学科**：具体到分支（如"线性代数"而非"数学"）。用户触发时若已说明，此项不再问。
2. **读者认知起点**：零基础 / 有先修（注明先修什么）
3. **教材深度**：入门 / 进阶
4. **篇幅规模**：6–8 章 / 8–12 章 / 12 章以上

若当前环境没有 AskUserQuestion 工具，降级为编号提问并等待文本回复：

```text
请回答以下问题（回复格式如 "1 线性代数 2a 3a 4b"）：
1. 教材学科（请具体到分支）？
2. 读者认知起点？ a) 零基础  b) 有先修（请注明）
3. 教材深度？ a) 入门  b) 进阶
4. 篇幅规模？ a) 6–8 章  b) 8–12 章  c) 12 章以上
```

按语义宽松解析回复，能定位到各项即可；无法判断时只就有歧义的一项追问。

**判定学科档案**（契约第五项）：按学科到 [../textbook/references/subject-profile-spec.md](../textbook/references/subject-profile-spec.md) 第 5 节索引表定位档案 id。判定一次、全流程沿用，后续阶段不重判。

- 索引里有匹配项 → 取该 id；
- 找不到匹配项（如历史/哲学/文学等答案取决于论证与立场的学科）→ 按该文档第 7 节处理：向作者说明「本学科暂无专属档案，将按 `<最接近的 id>` 档案处理」并指出已知差异（哪些题型在该档案里没有对应验证手段、章内段义是否需要调整），由作者决定继续或改学科范围，**不得静默套用**。作者决定继续则照该档案执行，`学科档案` 记录实际使用的 id。

**档案有前置输入要求时，追加一轮材料提问**：判定出的档案第 1 节若写有「前置输入要求」（`humanities`、`economics` 有，`stem` 没有），在写盘前**追加一轮提问**，按该档案点名的类别向作者索要材料。这一轮之所以必要：四问里第 1 问才问到学科，问完才判定得出档案，届时才知道本学科要不要材料——所以它只能发生在第一轮之后。

**这一轮不是 gate**：作者答"没有"、答不全、或直接跳过，一律照常放行进入阶段 2，**绝不等待确认**。它换来的不是许可，是让作者在动笔前就知道代价。两条出口都要落盘：

- 作者提供了 → 把材料清单（书名与版本 / 数据库与口径 / 文献目录）写进「## 一、教学定位」的子节，后续各章据此核对；
- 作者未提供或给不全 → 把该档案第 1 节的降级纪律与**预期代价**写进同一子节（如「无史料输入时预期约三分之一的题挂 `⚠️ 需作者确认`，定稿前需逐条核定」）。

**为什么必须落盘、不能只在对话里说一句**：各章在不同会话里独立写成（上下文隔离），`00-教材设计.md` 是唯一能传到阶段 4 的载体。只说过没写下的纪律，写第 3 章时等于不存在。

产出写入 `00-教材设计.md` 的「## 一、教学定位」，其中**必须含一行 `学科档案：<id>`**——不设 gate，让作者看见即可：档案决定全书的验证纪律与章内段式，选错一次会歪一整本书，而作者是唯一有资格判断「这个近似可以接受」的人。写完**不停顿**，直接进入阶段 2。

## 阶段 2/3：UbD 预期结果设计（核心 gate）

打印进度：`▶ 阶段 2/3：UbD 预期结果设计`

严格按 [references/ubd-framework.md](references/ubd-framework.md) 设计五件套（此段与学科无关，任何档案下逐条要求相同）。学习目标动词查 [references/bloom-levels.md](references/bloom-levels.md) 第 2 节的通用基线，再补所用档案第 3 节的本学科特有动词：

1. **大概念**：3–7 个，每个是"主张"不是名词；
2. **持久理解**：一律"学生将理解：……"句式，是洞见不是知识点复述；
3. **核心问题**：2–5 个开放性问题，能贯穿多章；
4. **迁移目标**：情境必须是教材没直接教过的；
5. **学习目标**：每条用 Bloom 动词 + 层级标注（格式：目标句 +（Bloom：应用）），可出题检验。

五件套**逐条带编号**呈现并写入设计文档（前缀 `B`/`U`/`Q`/`T`/`O`，约定与"编号不重排"纪律见 ubd-framework.md 第 2 节）——阶段 3 的章节树要靠编号引用持久理解与学习目标。

呈现前先过 ubd-framework.md 第 5 节的快速自查清单（七问）和第 3 节一致性检查——**自查不过先修再呈现**，gate 是给作者确认方向的，不是让作者替 skill 做质检的。

完整呈现五件套后停下：

`⏸ 等待确认：UbD 五件套（回复"确认"进入章节设计，或直接提出修改）`

**Gate 规则（不可绕过）**：

- 作者提出修改 → 更新后**重新完整呈现**五件套（每次重新呈现前同样先过第 5 节自查与一致性检查——修改可能破坏追溯关系），再次等待确认，循环直到作者明确确认；
- **明确确认**的判定见契约文档第 5 节：明确表示通过且不附带修改要求（"确认/通过/OK"等）；"确认，但把 X 改一下"按修改分支处理（修改优先）；答复含糊时追问而不是自行判定为确认；
- 未确认绝不进入阶段 3；
- 确认后将五件套写入 `00-教材设计.md` 的「## 二、UbD 五件套（已确认）」。

## 阶段 3/3：评估与章节设计（次要 gate）

打印进度：`▶ 阶段 3/3：评估与章节设计`

依据已确认的五件套设计四项产出（对应契约 `{章节树[], 例题习题计划[], 表现性任务[], 梯度报告}`）：

1. **章节树**：每章 `{章号, 章标题, 一句话定位, 承载的持久理解编号[], 承载的学习目标编号[]}`，章数符合阶段 1 的篇幅规模。
   **对齐检查（双向，硬性，两组编号各查一遍）**：
   - 持久理解：某章承载不了任何持久理解 → 砍掉或改造该章；某条持久理解没有任何章承载 → 补章，或向作者明示放弃该条；
   - 学习目标：某章一条学习目标都不承载 → 它的章首写不出"读完这章你能做什么"，改造该章或并入相邻章；某条学习目标没有任何章承载 → 分配进某章，或与作者商定删除（ubd-framework.md 第 3 节留待本阶段校验的两项之一）。一条目标可被多章承载（跨章递进），一章通常承载 1–3 条——超过 4 条通常说明这一章装了太多东西。
   
   检查结果随章节树一并呈现。
2. **例题习题计划**：每章三类题的 `{主题, Bloom层级}` 列表，数量参考四段式配额（示范例题 1–3 / 引导练习 1–3 / 独立习题 3–8，见 [../textbook-chapter/references/chapter-template.md](../textbook-chapter/references/chapter-template.md)）；层级分布参考**所用档案第 3 节**的章内分布建议——各学科不同（bloom-levels.md 第 7 节只留通用部分与指路）。
3. **梯度报告**：按 bloom-levels.md 第 5–6 节生成"层级×章节矩阵 + 合计 + 占比 + 检查结果"，执行三条检查规则。**有告警必须连同"建议在第 N 章补 X 层级题目"的可操作建议一起呈现**，不许只报问题不给出路。
4. **表现性任务**：1–3 个综合性任务，按 [references/performance-task-rubric.md](references/performance-task-rubric.md) 设计——每个任务用 GRASPS 六要素写清情境（情境须是教材没直接教过的），并附一张评价标准表（维度 3–5 个 × 水平 3–4 级，维度从持久理解或迁移目标推出，每格写可观察的表现描述）；每个注明对应哪条迁移目标（每条迁移目标至少被一个任务覆盖，否则回到五件套与作者商定取舍）。呈现前过该文档第 5 节自查清单。
   **动机**：没有评价标准的任务只是一句口号——作者无法评，学生不知道"好"长什么样，而表现性任务是迁移目标在全书唯一的检验落点。

完整呈现四项后停下：

`⏸ 等待确认：章节树与梯度规划（回复"确认"完成大纲设计，或直接提出修改）`

Gate 规则与阶段 2 相同：修改后重新完整呈现，确认前绝不放行。确认后写入 `00-教材设计.md` 的「## 三、章节树与梯度规划（已确认）」与「## 四、表现性任务」。

## 产出与交接

- **落盘物**：完整的 `00-教材设计.md`，固定二级标题结构见契约文档第 3 节；
- **回报上游**（被调度时）：阶段 1 完成即回报 `学科档案`（供主 skill 写入 `.progress.json` 的 `subject_profile`），阶段 3 完成回报契约 `{章节树[], 例题习题计划[], 表现性任务[], 梯度报告}` + 两个 gate 均已确认的显式声明；
- 独立触发时，最后向作者说明：可用 textbook 从此设计文档继续逐章写作。

## 真实性约束

五件套和章节树是设计产物，无需运行验证；但若作者在阶段 1 提供了学科材料（讲义、笔记、课程标准），设计必须与材料一致，不虚构材料中不存在的学科内容；材料未覆盖处按学科公认体系设计。

