---
description: "吸收新知识到课程体系。读取材料，比对 course-map.yaml 的 topics，生成差距报告，直接执行整合，然后自动同步导航和 SKILL.md。"
---

# /absorb — 知识吸收命令

你是 cc4pm 课程体系的知识整合引擎。用户提供一份新材料（文件路径或 URL），你要**一气呵成**地完成知识吸收，不要中途询问确认。

## 工作流程

### Step 1: 读取材料
- 读取用户指定的文件（支持 .md、.txt、.html、URL）
- 提取所有可教学的知识点，每个知识点标注：
  - `topic`: 英文 kebab-case 标识符（如 `git-worktree`、`agent-teams`）
  - `name`: 中文名称
  - `depth`: 该材料中的覆盖深度（mention = 提及 / explain = 解释 / hands-on = 实操教学）
  - `relevance`: 与课程受众（产品主理人/独立开发者/创业团队）的相关度（high / medium / low / none）

### Step 2: 比对 course-map.yaml
- 读取 `guide/course-map.yaml`
- 对每个提取的知识点，检查是否已在某节课的 `topics` 中存在
- 生成差距矩阵：

```
┌─────────────┬──────────┬───────────┬──────────────────┐
│ 知识点       │ 材料深度  │ 课程现状   │ 动作              │
├─────────────┼──────────┼───────────┼──────────────────┤
│ xxx         │ explain  │ 未覆盖    │ 新增到 LN / 新课  │
│ yyy         │ hands-on │ L3 提及   │ 扩充 L3          │
│ zzz         │ mention  │ L5 详解   │ 跳过（已覆盖）    │
│ aaa         │ explain  │ 未覆盖    │ 跳过（与受众无关） │
└─────────────┴──────────┴───────────┴──────────────────┘
```

### Step 3: 决定动作（自动，无需确认）

对每个需要整合的知识点，按以下规则决定：

| 条件 | 动作 |
|------|------|
| relevance = none/low | 跳过 |
| 课程已详解 | 跳过 |
| 课程已提及，材料更深 | 扩充该课对应段落 |
| 课程未覆盖，可归入现有课 | 在最相关的课中新增一个 ### 段落 |
| 课程未覆盖，内容足够独立（3+ 个知识点） | 创建补充课 lesson-X.Y.md |

### Step 4: 执行整合

对每个动作：

1. **扩充已有课**：
   - 读取目标课文件
   - 在最合适的位置插入新段落
   - 段落风格与课程现有风格保持一致（有学习目标、有示例、有 FAQ）

2. **创建补充课**：
   - 补充课编号：在最相关的主课之后，使用 `.1`、`.2` 后缀
   - 文件格式参照现有补充课（如 lesson-3.1.md、lesson-7.1.md）
   - 包含：学习目标、核心内容、FAQ、导航页脚

3. **更新 course-map.yaml**：
   - 给扩充的课添加新 topics
   - 如果创建了补充课，在对应 stage 的正确位置插入新 lesson 条目

### Step 5: 同步

运行 `node scripts/sync-courseware.js` 自动更新所有导航页脚和 SKILL.md。

### Step 6: 输出总结

```
📥 吸收完成: [材料名称]

提取知识点: N 个
├── 已覆盖（跳过）: X 个
├── 与受众无关（跳过）: Y 个
├── 扩充到已有课: Z 个
│   ├── L3: 新增 "xxx" 段落
│   └── L5: 扩充 "yyy" 段落
└── 新建补充课: W 个
    └── L7.2: "新课标题"

同步结果: node scripts/sync-courseware.js ✅
健康报告: [有无超行数预警]
```

## 重要约束

- **不要中途询问确认**，直接执行所有动作
- **保持课程风格一致**：二人称、有代码示例、有操作步骤
- **不要虚构内容**：只整合材料中实际存在的知识，不要编造功能描述
- **行数预算（严格执行）**：
  - 在向已有课插入内容**之前**，必须先检查目标课当前行数和 `max_lines` 限制（默认 400）
  - 如果插入后会超限：**优先拆分为补充课**，而非强行塞入已有课再精简
  - 如果仅超出 10 行以内且内容不可独立成课：允许就地插入但必须同步精简该课其他冗余段落，确保最终行数 ≤ max_lines
  - 绝不允许提交超限的课程文件——sync 健康报告中不应出现因本次吸收导致的新增 OVERSIZE 警告
- **补充课编号不冲突**：检查现有 .1 .2 编号，使用下一个可用编号
