---
name: reading-analysis
version: 2.1.8
description: 当用户说"分析这篇阅读""这道题为什么选X""我阅读总错""投喂案例/理论""阅读复盘""七选五怎么做""长难句拆一下""全文拆解这篇""对撞书解析""闭卷做题"时使用。适用于高考/四六级/考研英语阅读题的讲解与训练。功能与铁律见正文，动工前必须读完正文。
agent_created: true
---

# 阅读分析助手

一套原理内核 + 可累积的知识库。高考和四六级共用同一套底层原理，只在词汇门槛、篇幅、题型组合上有差异。

## 四条铁律（做不到就别用这个 skill）

### 铁律零：出处必核实（2026-08-31 立，血泪教训）

**任何写进知识库的条目，若标注具体书目章节，必须是自己亲自读到的。**

| 来源类型 | 怎么标 |
|---|---|
| 自己读原书读到的 | 标书名 + 章节 + 页码 |
| 用户口述的 | 标「**用户口述，出处待核**」，**禁止写成确定的书目章节** |
| 自己的推测 | 标「**推测**」，并写明推测依据 |

**编造出处比不写更糟** —— 它会让知识库看起来很扎实，实际是假的，后面引用它的人全跟着错。

背景：2026-08-31 曾把用户口述的"信息层级"概念直接归到《概括的力量》某章节下，而当时该书正文几乎未读（四本书正文合计仅读约 12 页 / 1295 页）。已修正，并把此条立为铁律，置于最前。

### 铁律零附：答案串可验、解析不可引用（2026-09-02 立 · 找源规则）

**找答案源时，答案串与逐题解析必须分开验证。机构名气大 ≠ 内容可信，不能整套采信。**

| 部分 | 能不能用 | 怎么验 |
|---|---|---|
| **答案串**（如 46-50 DACBC） | ✅ 可交叉验证后使用 | 至少 2 个独立来源一致；不一致 → ⏸ 待编者裁决，该题不做对撞 |
| **逐题解析 / 题目讲解** | ⚠️ **默认不可引用** | 必须自己回原文逐句核对，对得上才用；对不上就是编的 |

**判定解析不可信的三条信号（中任一条即弃用）**：

1. 解析讲的内容**原文根本没有**（例：说某题考「野生熊猫 vs 圈养熊猫对比」，原文无此对比）
2. 解析与题干问的东西**对不上**（题干问「能做什么」，解析答「建议是什么」）
3. 同一来源多篇解析**句式雷同、泛泛而谈**（AI 批量生成特征）

**找源优先级（在同为可信源时）**：带**定位句/原文引用**的解析 > 只给答案不给依据的 > 只给答案还给错解析的。

背景：2026-09-02 CET 真题对照批，新东方 4 个页面的**答案串**三方一致可信，但其**逐题解析**与原文明显不符（Q49/Q50 解析内容原文均无），系 AI 批量编造；夜雨聆风（带定位句）、奇速英语（贴原文核对）的解析可用。

### 铁律一：投喂必入库
用户每次投喂理论资料或真题案例，**必须**提炼成结构化条目写进 `references/` 对应文件，并在 `CHANGELOG.md` 记一笔。
**只在对话里讲一遍 = 没做。** 这是这个 skill 能"进化"的唯一机制。

### 铁律二：分析必检索
分析任何新题之前，先读：
1. `references/QUESTION-TYPE-MAP.md` — **先判题型，再按题型查「必查卡序列」**
   （该表给的是**按调用顺序**排的卡链，如「选词填空：B081 → B012 → B013 → B072」）
   **为什么它必须在最前**：题型决定**调哪些卡**。不先判题型就翻卡库，
   等于「生成式调卡像抽卡」——那正是这张表要堵的漏。
2. `references/cards/INDEX.md` — 检索本题用得上哪些方法卡（跳过＝零挂卡＝不合格交付）
3. `references/cases/INDEX.md` — 找相似旧案对照
4. `references/my-patterns.md` — 对照这个人反复踩的坑

**5. `references/KNOWLEDGE-GRAPH.md` — 按「关系类型」反查卡（篇章级分析时必读）**
前 4 项是**按题型/案例/个人坑**找卡；这一项是**按语篇关系**找卡 ——
图谱把卡按 **17 个关系大类**（并列 / 转折 / 因果 / 递进 / 总分 / 词汇衔接 / 指称与指代 /
逻辑连接 / 概括与保主舍次 / 主旨题 / 论证 / 言外之意 / 词义与语境 / 空白与读者 /
三维框架 / 选词填空 / 长篇匹配）重新聚合，每条关系都标了类型
（【题型关联】/【概括关联】/【本体·深挖】/【论证关联】）并指向具体卡号。

**什么时候读它（判据是「这题考不考关系」）**：
- ✅ **该读**：全文拆解（工作流 F）、多题篇章分析、复盘（工作流 E）、
  以及**题干问段间/句间关系**时（转折怎么拐、因果看因还是看果、总分怎么概括）
- ⏭️ **可跳过**：单题定位型（细节题 / 词义题），`cards/INDEX.md` 已经够

**读法（不是通读）**：先判断这段话是什么关系 → 直接在图谱里找那个**关系大类** →
读该大类下的条目（每条 = 一句话定义 + 一个实例 + 卡号）→ 取卡。
**比在 127 张卡里翻要聚焦得多。**

**另（条件触发，非常读）**：这个人自述了错误 / 提交了错因时，加读 `references/ANTI-PATTERNS.md` 做反模式匹配（见「反模式响应」节）。
> 分工：1-4 项**每次分析必读**；第 5 项**篇章级/关系题必读、单题定位题可跳过**；
> ANTI-PATTERNS 只在有自述/错因时读——普通解析不必读。
>
> ⚠️ **注意这个清单本身的教训**：`QUESTION-TYPE-MAP.md` 和 `KNOWLEDGE-GRAPH.md`
> 都曾**只被登记在文件树里、没进这份清单** —— 于是资产明明存在，AI 干活时却从不读它。
> **「建好了」和「被用上」是两件事**；每新增一份 references 资产，
> **都要问一句：它进这份清单了吗？**（门禁会核，见跨轮检查）

不检索就直接分析，等于每次都从头开始，知识库白攒。**解析里一张卡号都不出现＝没有使用知识库，只用了模型底子。**

### 铁律三：复盘必提炼
`references/cases/` 每满 10 个案例，主动做一次复盘：统计错误类型分布，把重复出现的写成个人规则，追加进 `my-patterns.md`。

## 知识库结构

```
references/
├─ core-principles.md      原理内核（命题学·定位·推断·主旨·词义·长难句·衔接）—— 讲"题怎么做"
├─ discourse-relations.md  语篇关系层（句间·段内·段间·段篇）—— 讲"文章怎么长"
├─ summarization.md        概括层（句旨·段旨·篇旨·主旨题）—— 讲"怎么把文章压成一句话"
├─ exam-params.md          考试差异参数（高考 / CET-4 / CET-6 的篇幅·题型·词汇门槛）
├─ theories/             投喂的理论书拆解（每本/每篇一个文件）
│  └─ INDEX.md           理论索引：核心主张 → 可操作规则 → 反例
├─ cases/                投喂的真题案例
│  └─ INDEX.md           案例索引：题型·错误类型·用到的规则
├─ cards/                方法卡库（A 系思想原理 / B 系做题技能 / R 系复盘维度，各带 INDEX）—— 最大资产
├─ ANTI-PATTERNS.md      **反模式索引**（36 条「什么做法一定错」）—— 反向入口，用户自述错误时用
├─ argumentation.md       论证维度原理层（论证方式·谬误·定义规则）
├─ QUESTION-TYPE-MAP.md  题型对照总表
├─ KNOWLEDGE-GRAPH.md    知识网络（**按 17 类语篇关系重聚全部卡**，每条带类型+实例+卡号；
│                        文末「待归类」区自动生成 = 尚未归入任何知识点的卡，故本表不漏卡）
├─ templates/            交付模板（分析结果 JSON schema 等）
├─ my-patterns.md        个人错题模式与私人规则（最值钱的一层）
CHANGELOG.md             每次进化留痕
```

所有知识条目都带 `scope` 标签：`通用` / `高考` / `CET4` / `CET6`。检索时按标签过滤，原理只写一遍。

## ★ 资产清单与读取时机（每份资产都必须在这张表里有归宿）

> **立此表的由来**：`QUESTION-TYPE-MAP.md` 和 `KNOWLEDGE-GRAPH.md` 都曾
> **只被登记在文件树里、没进工作流** —— 资产明明建好了、有内容、有实测，
> **但 AI 干活时从不读它**。「建好了」和「被用上」是两件事。
> **每新增一份资产，就在这张表里加一行**；跨轮检查会核「表里没有的资产 = 判红」。

| 资产 | 读取时机 | 触发条件 |
|---|---|---|
| `QUESTION-TYPE-MAP.md` | **每次分析（放最前）** | 无 —— 判题型是第一步，题型决定调哪些卡 |
| `cards/INDEX.md`（含 A/B 系各自 INDEX） | **每次分析** | 无 |
| `cases/INDEX.md` | **每次分析** | 无 |
| `my-patterns.md` | **每次分析** | 无 |
| `KNOWLEDGE-GRAPH.md` | 篇章级 / 关系题 | 全文拆解、复盘、题干问段间·句间关系 |
| `ANTI-PATTERNS.md` | 条件读 | 用户自述了错误 / 提交了错因 |
| `core-principles.md` | 定位时 | 工作流 A 第 3 步（回原文找证据句） |
| `discourse-relations.md` | 拆篇章关系时 | 工作流 F 第 3 步（标段间关系） |
| `summarization.md` | 做概括时 | 工作流 F 第 2 / 7 步（段旨、全文概括）、主旨题 |
| `argumentation.md` | 论证类题 | 题干问论证方式 / 谬误 / 论点论据关系 |
| `exam-params.md` | 需判考试差异时 | 判篇幅、词汇门槛、题型分布 |
| `theories/INDEX.md` | 投喂理论后检索 | 工作流 C |
| `templates/` | 交付时 | 交付环节（由脚本读，人不必读） |
| `CARD-USAGE-LEDGER.md` | 复盘统计用 | 每 10 篇汇总时看；**日常分析不读**（数据文件） |
| `缺口台账.md` | 记缺口时 | 记录与查询缺口；**日常分析不读**（内部台账） |

> **写法约定**：新资产登记时，**「触发条件」必须写清楚到「什么场景下读」** ——
> 写「必要时读」等于没写（判据不可执行，等于没接线）。

## ★ dist/ 产物清单（谁看、要不要进公开包）

> **立此表的由来**（2026-10-02，外部审核方查出）：`dist/` 下的**产物**长期不在任何清单里 ——
> `knowledge-graph.html` 全库只有 CHANGELOG 提过，SKILL / USER-GUIDE / README **一个字都没有**。
> 资产表管的是 `references/` 下**人读的资产**，**没人管"脚本产出的东西"。**
> → 产物同样要登记，否则「建了没接线」会换个地方复发。

**判定规则（三选一，不许含糊）**：

| 标记 | 含义 | 判据 |
|---|---|---|
| **内部** | 只给自己/工具用，不给下载包的人 | **公开包里没有**，且文档不提 |
| **给读者** | 下载包的人该看到 | **公开包里有** 且 **README/USER-GUIDE 提到** |
| **待定** | 还没决定 | 必须写清"等谁定" |

| 产物 | 谁看 | 生成方式 | 备注 |
|---|---|---|---|
| `dist/knowledge-graph.html` | **内部** | `scripts/render_knowledge_graph.py` | 卡的**关系视图**（17 类关系聚合 129 张卡）。**依赖私人卡库 → 不给外人**；已在资产表登记（读 `KNOWLEDGE-GRAPH.md`，非本 HTML） |
| `dist/analysis/*.html` | **给读者**（个案交付） | 分析管线 | **单篇分析结果**，交付给使用者看的东西 |
| `dist/sample-analysis.html` | **内部**（模板样例） | 分析管线 | 演示用样本，**不是真交付** |
| `dist/cet/*.html` / `*.json` | **给读者**（个案交付） | 分析管线 | CET 真题分析结果 |
| `dist/cards.html` / `cards-mini.html` / `全卡移动版.html` | **内部** | 早期脚本（09-01~09-03） | 卡库网页视图，**已停更**；只作检索辅助 |
| `dist/概括卡族.html` / `哲学系列卡.html` / `零引用卡审阅.html` / `真孤儿卡裁决页.html` | **内部**（一次性审阅页） | 一次性脚本（09-02~09-03） | 当时为**审卡**做的视图，**使命已完成**，留存备查 |
| `dist/SKILL-总目录.html` | **内部** | — | 技能自检用 |
| `dist/V2-版本说明.md` / `V2.1.0-版本说明.md` | **给读者** | 封版时写 | **版本说明**，面向下载包的人 |
| `dist/patch-*.md` / `dist/回复-致验收方-*.md` | **内部**（对外通信存档） | 人写 | 给审核方的 patch / 回复（含 `patch-致阅读skill-*`、`patch-致验收方-*`），**留档** |
| `dist/reading-analysis-*SHARE*.md` | **内部**（旧分享稿） | — | 早期分享文案，**09-03 后停更** |
| `dist/reading-analysis-*prompt*.md` | **内部**（产物快照） | 打包脚本 | 提示词全文快照，**不是给读者读的**（应是随包文件） |
| `dist/阅读skill_第*轮复验_*.md` | **内部**（验收报告存档） | 审核方 | 复验报告副本 |
| `dist/给ZCode的测试材料-*.md` | **内部** | 人写 | 冷启动测试用料 |
| `dist/网站同步包-*/` | **内部**（数据中转） | `build_cards_batch.py` | 同步网站用的批次包，不是给人读的 |
| `dist/_friend_pkg` / `_friend_stage` / `_verify_pkg` | **待刷新** | 打包脚本 | ⚠️ 停在 **09-10**，**缺 B087/B088**；等编者定要不要重打 |
| `dist/复验输出-*.txt` | **内部** | `make_evidence.py` | 每轮证据文件（跨轮 R12 靠它） |
| `dist/fuju-batch-*.html` / `kaoyan/` / `compare/` | **批次产物** | 分析管线 | ⚠️ **同规格批量产物，登记"这一类"即可，不逐个登记**（门禁也按此判） |

> ⚠️ **凡新增"脚本产出的东西"，都要在这张表里加一行** —— 并回答两句：
> **① 谁看？② 要不要进公开包？** 答不出来就先标「待定」并写清等谁定。
>
> **门禁的判据（R17 第二部分）**：只核 `dist/` 顶层的 **`.html` / `.md` 单件**，
> **排除**下划线开头的打包目录、纯 `.json`/`.txt` 中间物、
> 以及 `*-batch-数字` 与 `-数字.html` 这类**批次产物**（同规格，登记一类即可）。
> **为什么收窄**：第一版判据收太宽，一次报出 **82 个**（含 21 个批次 HTML 与机器中间物）
> ——**喊狼来了比没门禁更坏**，无法执行的门禁等于没有。

## 工作流

### A. 分析一道题 / 一篇阅读（自用模式 deep）
1. **先检索**：读 `QUESTION-TYPE-MAP.md`（**先判题型 → 取该题型的必查卡序列**）
   ＋ `cards/INDEX.md`（选卡）+ `cases/INDEX.md` + `my-patterns.md`
   ＋ **题考段间/句间关系时加读 `KNOWLEDGE-GRAPH.md` 对应关系类**（见铁律二第 5 项）
2. **读题**：先读题干判题型，**不先看选项**（避免被干扰项带跑）
   > 跨考试（高考 / CET-4 / CET-6）差异拿不准时查 `exam-params.md`
   > （篇幅、词汇门槛、题型分布）。**题干问「作者怎么论证的 / 例子的作用 / 论证有无漏洞」时，
   > 加读 `argumentation.md`**（论证方式·谬误·定义规则）。
3. **定位**：按 `core-principles.md` 的定位于规则回原文找证据句
4. **判选项**：逐项标注它属于哪种构造（正确项特征 / 六大干扰项之一）
5. **对照旧案**：找出历史相似案例，说明"你上次在同类题上栽在哪"
6. **反模式匹配**：扫 `ANTI-PATTERNS.md`——用户自述的错误 / 错选项构造 / 错因，命中即弹对应卡（上限 1-2 条，见「反模式响应」节）
7. **入库**：本题写进 `cases/`，更新 `INDEX.md`，追加 `CHANGELOG.md`
8. **打标**：若发现新的重复错误，更新 `my-patterns.md`

输出格式（自用）：
```
【题型】推断题
【定位】第3段 L2-4，证据句：...
【正确项 C】同义替换：原文 X → 选项 Y
【干扰项 A】张冠李戴：把 authors 的行为安到 readers 头上
【干扰项 B】无中生有：原文从未提过 ...
【用到原理】推断一步原则 / 干扰项-张冠李戴
【挂卡】B017 / B083-干扰项-张冠李戴 / A032（逐题标注所用卡号，零挂卡＝不合格交付）
【⚠️ 反模式】命中才写：AP-02·靠日常语感判等价 ｜ 本次症状：… ｜ 怎么防：…（不命中写 无）
【▮缺口】没有卡能解释的判断写这里（无则写 无）
【🎯 本题运用】**像老师对学生讲课一样详细**（逐题必填，三段展开，不设字数上限）：
　定位——回原文哪一句、关键词是什么；
　推理——从证据到答案一步步怎么走，把思考过程讲出来；
　排除——每个干扰项分别怎么死的。
　一句话版本＝质量不合格。这道题你是在给自己讲课，不是在填表。
【🎯 可迁移原则】一句话：这道题的解法能迁移到哪类题（逐题必填）
【历史对照】case-007 同类错误，你上次栽在 ...
```

### B. 讲给朋友听（mobile 模式）
- 结论先行，一段一屏
- 不用表格、不用 markdown 复杂语法（微信不渲染）
- 一次只讲一个点，口语化
- 优先长图或短文本

### C. 投喂理论资料
用户可能发**图片（拍照）**或**粘贴文字**：
1. 图片 → 用 Read 工具读取（多模态），先转文字再提炼
2. 提炼成条目写入 `references/theories/<来源名>.md`：
   ```
   ## 规则 N：<一句话规则>
   - 来源：《书名/篇名》第X章
   - 主张：<作者原意>
   - 怎么操作：<具体到动作>
   - 反例：<什么时候这条不适用>
   - scope: 通用 | 高考 | CET4 | CET6
   ```
3. 规则若与 `core-principles.md` 已有条目冲突 → **先问用户**以哪个为准，别覆盖
4. 更新 `theories/INDEX.md` 和 `CHANGELOG.md`

### D. 投喂真题案例
1. 完整记录：原文片段 + 题目 + 选项 + 正确答案 + 用户的分析/错因
2. 写入 `references/cases/case-NNN.md`（三位编号，不跳号）
3. 索引进 `cases/INDEX.md`，字段：`编号 | 来源 | 题型 | 错误类型 | 用到规则 | scope`
4. 每满 10 个 → 触发铁律三复盘

### E. 复盘（用户说"阅读复盘"或案例满 10 个）
1. 统计各错误类型出现次数
2. **★ 换个维度再看一遍：按「语篇关系」而不是「题型」归类错的题。**
   题型维度（主旨题错 3 次）往往只说出现象；**关系维度才指得出病根**
   （「凡转折必错」「因果段总看错方向」）。
   → 读 `references/KNOWLEDGE-GRAPH.md`，把错题落在哪个**关系大类**上标出来；
   若集中在一两类，那是个**结构问题**（读法有洞），不是「这类题难」。
   > 同一批错题，两种归类方式的产出完全不同：
   > 题型归类 → 「主旨题要注意覆盖度」（还是碎片）
   > 关系归类 → 「我读转折段时总把让步当立场」→ 可执行
3. 找出 Top 3，追问根因：是定位失败？词汇不够？还是脑补过度？
4. 写成**私人规则**追加进 `my-patterns.md`，格式：`症状 → 触发条件 → 我该怎么做`

### F. 全文拆解：把一篇阅读榨干（核心能力，不是附加功能）

**即使题目没问，也要把原文从头到尾拆明白。**

理由：一篇阅读只做 4 道题，利用率低得离谱。能力是在**拆解**中长出来的，
不是在做对几道题里长出来的。这是让一篇阅读价值最大化的唯一方式。

#### 三档深度（用户每次指定，默认「重点拆」）

| 档 | 内容 | 输出量 | 场景 |
|---|---|---|---|
| **只答题** | 只给答案 + 一句话理由 | ~300 字 | 赶时间、自测 |
| **重点拆**（默认） | 篇章模式 + 段旨 + 段间关系 + 长难句 + 命题点 + 逐题溯源 | ~1500 字 | 日常精练 |
| **精拆** | 重点拆 + 逐句标注功能与句间关系 | 3000-5000 字 | 精读训练、啃硬骨头 |

#### 重点拆标准流程（八步）

1. **判篇章模式** —— 总-分-总 / 问题-解决 / 现象-原因-影响 / 观点-论证-结论 / 时间顺序 / 通篇对比
   > 模式清单与各模式的判定线索在 `discourse-relations.md`（语篇关系层）。
2. **每段一句话概括**（段旨）—— 概括不出来 = 这段没懂
   > 概括的**操作规则**（保主舍次、维度法、累加法…）在 `summarization.md`；别凭感觉压。
3. **标段间关系** —— 并列 / 递进 / 转折 / 因果 / 总分，画出结构骨架
   > ★ **这一步读两份**：`discourse-relations.md`（各关系的判定与处理规则）
   > ＋ `references/KNOWLEDGE-GRAPH.md`（**按关系大类反查卡**）。
   > 判出这段/这几段是什么关系后，**直接查图谱里那个关系大类**
   > （如「因果」「转折」），读该大类下的条目（每条 = 一句话定义 + 一个实例 + 卡号）。
   > 为什么必须走这条：段间关系是**跨题型**的，`cards/INDEX.md` 是按题型组织的，
   > 查关系型问题会在里面绕；**图谱与关系层才是关系的正门**。
4. **长难句剥离** —— 挑 2-4 句，去修饰留主干
5. **命题点预埋** —— 预判出题人会在哪动手脚（强因果处、转折处、列举例证处）
6. **逐题溯源** —— 每题定位到原文哪一句
7. **全文一句话概括** —— 检验真懂没懂的终极标准
   > 篇旨的压法见 `summarization.md`；**压不出来说明前面某步是空的**，别硬编。
8. **词汇缺口记录** —— 卡住的词记进 `my-patterns.md`

#### 输出模板（重点拆）

```
【篇章模式】现象—原因—影响
【结构骨架】
  P1（现象）……
    └ P2（原因）↗ 因果
        └ P3（作者反驳）↗ 转折 ← 立场在这
【段旨】P1 …… / P2 …… / P3 ……
【长难句】L12-14：原文 → 主干 → 译文
【命题点预埋】
  ① P2L3 强因果 → 大概率出因果倒置
  ② P3 有 although → 态度题答案必在后面
【逐题溯源】
  Q1 细节 → P1L2「…」→ C 同义替换；A 张冠李戴
【全文一句话】……
【词汇缺口】……
```

#### 溯源铁律

**每一个结论都必须能追溯到原文的某一句。**
没有原文支撑的分析 = 脑补，不许输出。这条对全文拆解尤其重要——
拆得越深，越容易滑向自说自话。

### G. 案例投喂：闭卷做题 → 对撞书解析 → 反向升级（对抗式进化）

**用户投喂「文章 + 四道题 + 书里有解析」时，走本节这条流程（五阶段见下，顺序不可颠倒）。**

与工作流 A / F 的区别：那两个是"我帮你分析"，这个是"**先考自己，再跟书打一架，打赢打输都要让知识库长肉**"。

五阶段（顺序不可颠倒）：

1. **闭卷**：先做题、先写完整解析，**不许翻书的解析**（翻了就作废）
2. **榨干原文**：语言流动（对象链）/ 层次（信息层级·段旨·权重）/ 行径（句功能·句间关系·主位推进·指称链）+ 挑 3-5 处训练素材
3. **开卷对撞**：逐题对答案 + **10 维对撞表**，每格必须给证据
4. **归因三问**：他哪里好 → 他为什么能写好 → 属哪个维度
5. **升级知识库**：有卡则**增强**、无卡则**新建**（优先补 B004-B010 / B014 缺号），更新 cases + INDEX + CHANGELOG

**两条硬约束**：
- 每题解析必须挂卡号，并填「**▮缺口**」栏（我用到了但卡里没有的判断）—— 这是最值钱的产出
- 任何一个"书比我好"没变成具体文件改动，这次投喂就算**没做完**

> 与「纯文本层训练」的分工：那个是**只有文章、无标准答案**时的文本层训练；这个是**带书解析**的对抗式进化。

## 两种交付卡片

### 1. 技巧学习卡（HTML 静态文件）
把关系类型、概括方法、做题规则做成一张张卡片，供平时翻看复习。
- 输出：`dist/cards/` 下的 HTML
- 移动端友好，可直接发手机看
- 内容来源：`core-principles` + `discourse-relations` + `summarization` + `theories/`

### 2. 分析输出卡（对话内输出，可选存档）
每次拆一篇阅读的产出，含全文拆解 + 溯源 + 主旨。
- 默认在对话内输出 markdown（按上面的模板）
- 用户说"存下来" → 生成 HTML 到 `dist/analysis/`

### 3. 卡片调阅
用户说"调出 XX 卡"或"我要看关系类型卡"时，直接展示对应内容，不用重新生成。

## 与其他项目的连接（可选增强，缺失不影响运行）

- 若本机存在词汇项目 `E:\四六级`（含 HS/CET4/CET6 三套词库与 ECDICT 底层词典）：
  - 分析中发现用户因词汇卡壳 → 记到 `my-patterns.md` 的"词汇缺口"区，回头补进词汇系统
  - 可查词库判定词汇难度
- **本机没有这套词库也完全能跑**，词汇难度靠上下文判断即可

## 铁律四：交付必须立刻弹出 HTML

**解析完成 ≠ 交付完成。** 渲染管线（通用交付用 `scripts/analysis_to_html.py` 吃分析结果 JSON；案例脚本 `scripts/build_standalone_analysis.py` 直读硬编码内容——**两者都自动挂反模式层**）产出 HTML 后，**必须立刻用浏览器/present 打开弹到用户面前**，对话里只放五行速览。用户不应该需要再说一次「给我 HTML」。

零 HTML 交付＝未完成。纯文本层训练批（只有文章、无题无答案）豁免本条。

**兜底**：渲染管线不可用（换机器 / 未装 Python / 脚本丢失）时，按最小结构手写 HTML 落盘交付——答案行 / 篇章结构 / 逐题定位→推理→排除 / 挂卡，缺了不算交付。
⚠️ 兜底时会丢掉渲染器的**两项自动化**：①**卡原文嵌入**（把用到的卡整篇嵌进页面供读者点开）
②**反模式层自动挂载**（按 `user_note` 自述自动匹配）。这两项要**手工补上**——反模式层仍按上面「四项必填」写全，
只是不如管线稳定、更容易漏。**不许因为走了兜底就把这两层省掉。**

**管线环境要求**：**Python 3.8+**，只用标准库（**不需要 `pip install` 任何东西**）。
判断可用性：`python --version`（Mac/Linux 可能是 `python3 --version`）能跑即可。

**交付前自检三问（缺一＝不许宣称「已交付」）**：
1. HTML 文件在磁盘上真实存在吗？（列出完整路径）
2. 路径告诉用户了吗？
3. 打开动作**真的执行了吗**？——「已弹到你面前」这种话只有在弹窗动作实际发生后才能说；只写了文件就宣称已弹出＝虚报交付。

---

## 交付结构定格（三层 + 条件反模式层，缺层＝不合格）

HTML 交付必须包含三层结构 + 一个**条件触发的反模式层**（对照样板逐节验，别只对卡数）：

**全文层**（放在最前，4 项全要）：语义流动链 ／ 主干·枝干 ／ 信息层级（含「层级≠权重」）／ 语域·文体

**段落层**（每段一块，5 件套）：英文原文 ＋ 中文译文 ＋ 段旨 badge ＋ 段意概括 ＋ 段间关系

**题目层**（每题）：
- 定位 → 推理 → 排除，像老师对学生讲课一样详细（不设字数上限）
- **每题至少挂 3 张卡**：①干扰项判别卡 ②题型主卡 ③辅助验证卡（复现/维度/回结论校验类）
- 每张卡双页签：🎯本题运用 ／ 📖知识原理
- **📖页签＝原卡全文嵌入（渲染管线自带），禁止人工压缩**
- ▮缺口栏 + 🎯可迁移原则（逐题必填）
- **⚠️ 反模式卡**（命中才挂，见下节）

**反模式层**（**条件触发**，不命中不出现）：
- 触发条件（三者任一）：①**用户自述**了某个错误 ②**错选项构造**能归入某条反模式 ③用户写的**错因**能归入某条
- 形式：⚠️ 反模式卡，与知识卡视觉区分（警示色）。**四项必填**——`AP-编号 · 名字` ／ `你这次的症状` ／ `为什么错` ／ `怎么防` ／ 挂卡号；缺字段会在用户可见层渲染出空行，禁止（渲染器另有空值跳过兜底）
- **上限 1-2 条**；全弹＝噪音＝等于没弹
- **由渲染管线自动挂**：交付 JSON 给 `user_note`（自述，脚本自动匹配）或 `anti_patterns`（显式指定，用于错选项构造/错因归类/主动点名）；不给则整层不出现。详见「反模式响应」节

---

## 反模式响应（怎么匹配、怎么弹）

**检索**：读 `references/ANTI-PATTERNS.md`，逐条比对「匹配关键词」与四种输入——
1. 用户**自述**的痛点（最高优先）："我总在这类题上…""我的问题是…"
2. 用户**错选的选项**构造（客观证据）
3. 用户写的**错因**描述
4. 用户**主动点名**某条反模式

**优先级**（多条命中时）：用户自述 > 错选项构造 > 错因描述 > 同题多条只留与本题证据链最直接相关的。

**输出格式**：
```
⚠️ 反模式 AP-02 · 靠日常语感容忍度判等价
【你这次的症状】选 D 的理由是"49% 也算很多"——这是日常容忍度，不是命题等价
【为什么错】四六级考的是命题等价，限定词是硬边界
【怎么防】回原文抠限定词（only / may / tend to / at / from），不用生活常识补票
【原卡】B083 选项位置判别
```

**规范未定、由 agent 拿主意的 5 处（2026-09-24 第十一轮补，L3 冷启动暴露）**：
1. **同一张卡可否跨题重复**：可以。卡是「解释工具」，同一原理服务两题就该挂两次；但**同题内不重复挂**。
2. **题型表未收录的题干**（如 `What does the author suggest about…` 这类**暗示**型）：归到最接近的主类，
   并在题干标注里写明「（暗示型）」，**不要为此新造题型**——题型表是稳定的，标注是自由的。
3. **态度题多重限定叠加**（`can be lower` + `remains an open question`）：**以限定最紧的那个为准**，
   并在解析里把这层叠加写出来（这正是常考处，不写等于漏讲）。
4. **长难句在 HTML 里的位置**：归入该题解析的「推理」段（那是它真正起作用的地方），
   **不单开一节**——单开会把它和题目割开，使用者看不出「这句难在哪、为什么导致选错」。
5. **只读目录下怎么跑脚本**：管线默认写 `dist/`，`import` 会落 `__pycache__`。
   只读场景用 `-o` 指定输出到自己的目录；`__pycache__` 可用 `PYTHONDONTWRITEBYTECODE=1` 抑制。
   **交付目录与 skill 目录必须分开**——往 skill 目录写产物会污染基线（冷启动核验时尤其明显）。

**提缺口前必须查重（第十二轮立，硬要求）**：缺口是「最值钱的产出」，也是最容易被重复提的产出。提交前**三步**：
1. **查现有卡**（含子模式）——先确认「库里到底有没有」
2. **查既有 case 的缺口**
3. 再写

> ⚠️ 本节为**本地工作区专有流程**（本包不含对应工具与数据），已略去。

> 由来：本批曾把「B083 缺程度档」写成「**库里没有『度』**」并建议「扩 A034 为四档」——
> 而 **A034 的标题就是「模态：必然 vs 可能（含"度"）」**、§一 明写「度（质量互变）」、§四 挂着 A024 程度维。
> 真缺口是「**B083 没有回指 A034/A024**」。照原建议做 = **把已有的东西再立一遍**。

> ⚠️ 本节为**本地工作区专有流程**（本包不含对应工具与数据），已略去。

**写「机制生效了」之前，回头核一次（第十二轮立）**：说明性文字里最容易顺手写的是
「**互斥对生效了**」「某机制挡住了」这类叙事，但它**不可查**。可查的写法是**报事实**：
> ❌ 「未弹 AP-02：与 AP-03 共用『语感』类词，按互斥对只留更实的一条」
> ✅ 「未弹 AP-02：**它没有任何命中**（该自述只命中了 AP-03 的『凭感觉』）」
> 实测前者与事实不符：那条登记**当时已空转**（第十一轮切分后两卡不再共用关键词）。
>
> **规则：机制叙事必须能对应到一次实测**；写不出实测，就改写事实。

**克制原则**：宁可少弹不可全弹。一次解析弹 3 条以上反模式 = 噪音，用户会免疫。

**触发源必须如实标注（第六轮 L3 冷启动教训）**：
- 条幅文案随触发源变化，由 `ap_trigger` 决定：`自述`→「来自你自述的错误」／`错选项构造`→「来自本题错选项的构造」／`错因`→「来自你写的错因」／`主动点名`→「你点名的反模式」。
- **不声明来源时，条幅用中性文案「与本题证据链相关」**——脚本不猜。
  > 实测教训：一次「纯提问、无自述」的交付里，条幅硬编码成「来自你自述的错误」，等于**把用户的提问断言成他在认错**；同一次里卡片还写成了「你在 A 与 B 之间选了 A」（用户从没这么说）。本系统最不能犯的就是这个错。
- 🔴 **措辞红线**：触发源是②错选项构造／③错因时，卡片「你这次的症状」**不得断言用户的行为**（不许写「你选了 X」「你以为…」）。
  正确写法是描述**选项的构造**：「本题的 X 项把范围放大了——它是靠…做出来的」。用户没说过的话，一个字都不能安到他头上。

**机器实现（渲染管线自动挂，不靠人记）**：
- 实现单一来源：`scripts/anti_patterns.py`（加载 / 匹配 / 渲染）。两个渲染器共用它——
  - 通用交付管线 `scripts/analysis_to_html.py`（吃分析结果 JSON）
  - 案例脚本 `scripts/build_standalone_analysis.py`（案例专用）
- **JSON 契约**（交付 JSON 里可选三个字段，给了才挂）：
  | 字段 | 位置 | 用途 |
  |---|---|---|
  | `user_note` | 顶层，字符串 | 使用者自述/错因原文 → **脚本自动匹配**（过意图闸门） |
  | `anti_patterns` | 顶层，数组 | **agent 判定后显式指定**——错选项构造、错因归类、主动点名三类字符串匹配兜不住，必须由 agent 判；元素可 `"AP-02"` 或 `{"id","symptom","why","how"}`（后者覆盖默认文案，用他自己的话说） |
  | `anti_patterns` | 单题内，数组 | 该题的题内提示行（`⚠️ 反模式命中：…`） |
  | `ap_trigger` | 顶层，字符串 | **声明触发源**（自述／错选项构造／错因／主动点名），决定条幅文案；不填＝中性文案 |
  | `gap` | 单题内，字符串 | **缺口栏**（逐题必填）：没有卡能解释的判断；**无则写「无」**。中文键 `缺口` 同样接受 |
  | `options` | 单题内 | **选项原文 A/B/C/D**（第十二轮新增，**提示级**）：页面里「干扰项为什么错」读者看不到选项就没法自己复核。三种写法都吃：① `{"A":"…"}` ② `[{"key":"A","text":"…"}]` ③ `["…","…"]`；中文键 `选项` 同样接受 |
  | `user_wrong_choice` / `user_thinking` | 单题内 | **使用者自述**（第二十轮补实现）：当时选的错项 / 当时的思路 → 渲染成页面上的「你当时选的是 X　你的思路：…」。中文键 `用户错选` / `用户思路`。**为什么必须有**：这是错题归因最核心的信息，而此前**模板里有这两个字段、渲染器不读、契约表也没列**——填了看不到。 |
  | `transfer` | 单题内，字符串 | **可迁移原则**（逐题必填）：这题的解法能迁到哪类题。中文键 `可迁移原则` 同样接受 |
  | `review.kind` | `review` 内，字符串 | 复盘场景：`错题`→「错题归因：」／`要点`→「本题要点：」；**不填＝中性「归因：」** |
  | 段落层 | `passage` 内 | **5 件套**：原文／译文／段旨／段意概括／段间关系。三种写法管线都吃：<br>① `passage.items=[{en,zh,function,summary,relation}]`（推荐）<br>② 平行数组 `paragraphs` + `functions`/`translations`/`summaries`/`relations`<br>③ `paragraph_notes=[{trans,function,summary,relation}]` 按序号合并（function 是**声明字段**，非可选） |
- **脚本已强制**：上限 2 条（超出只列名）、不命中不输出、空字段整行跳过、复盘编号自动顺延
- **改契约 = 改三处**（第九轮 N2 教训：**修「代码接受什么」≠ 修「文档承诺什么」**）：
  改 `analysis_to_html.py` 的字段/写法时，必须同步 —— ① 函数 docstring 的写法清单 ② SKILL.md 的 JSON 契约表
  ③ `verify_anti_patterns.py` 的门禁 fixture。
  > 第八轮修了代码没改文档 → 照文档字面写的 agent 会**静默丢段旨**（写法 C 丢 5 件套里的段旨），
  > 而门禁 fixture 因为「比合同多给一个字段」一直绿着，把缺口盖住了。审计工具已为这类问题立项 **G33**
  > （fixture 键集超出文档声明键集 → 报警）。**fixture 比合同更全 = 门禁永远绿着掩盖缺口。**
- **公开包账本不许「描述性回声」**（第九轮 N1）：条目说明「清了什么」时，用**格式模板**（`Q<编号>`、`PDF pNNN`），
  **不要写具体值**——写了等于把已清理内容又抄回公开处（本类事故已第 4 次）。
  > 内容文件（卡库）里的坐标属**规则举例**，是允许的；判据见开源包账本的「回声判据」条。
- **标记清单放在包外，只留一份**（第十轮 T1/T2，取代第九轮做法）：
  清单**不写在包内**——一份列着「要藏什么」的清单本身就是泄漏面：`.gitignore` 只挡得住 git，
  **挡不住 zip / 拷文件夹 / 传给同事**。现行做法：清单放包目录之外，审计工具与同步脚本**读同一份**。
  - 三种入口：`--config <包外路径>` ／ `SKILL_AUDIT_CONFIG=<包外路径>` ／ `SKILL_AUDIT_MARKERS="a,b"`
  - ⚠️ **审计与同步必须读同一份**，否则出现「审计说干净、同步说有事」的两份清单分叉
  - 手工扫的清单＝记在脑子里的清单（曾漏掉一个真实存在的标记）；**清单不完整＝门禁有洞**
- **验证纪律另见 `VERIFICATION.md`**（每轮收口的固定动作、基线独立实现、跨轮回归核验、判据标注实测与否……）：
  快速入口：`python scripts/cross_round_check.py`（跨轮回归核验，每轮必跑）
- **自查命令**：`python scripts/verify_anti_patterns.py`——跑**十二道门禁**（空行 / 匹配回归 / 字段齐整 / 管线冒烟 / **必填项承载力** / **章节编号连贯** / **共用词覆盖** / **卡库卫生** / **取值清单一致性** / **文档引用完整性** / **模板字段归宿** / **脚本环境承诺**），全绿才交付（改过 `ANTI-PATTERNS.md`、`anti_patterns.py`、任一渲染器**或卡库**后**必跑**）
  > ⚠️ 门禁**数量**别写死在别处（此处也仅作导读，以脚本 `main()` 里实际调用为准）——
  > 本行曾长期写「七道」而实际已是八道（第十二轮加了「卡库卫生」），第十六轮加到九道，
  > 第二十轮一天内连加三道（「文档引用完整性」「模板字段归宿」「脚本环境承诺」）→ **十二道**。
  > **每次都是外部验收逼出来的** —— 用自己的话讲，就是「我们以为已经查全了」这个念头本身最危险。
  > **文档数数，一改就错。**
- **共用词归属**（第十二轮）：两条反模式若共用关键词，同一段自述会弹两张卡、其中一张不对题。每个共用词交集**必须有归属决定**（切分 / 互斥 `EXCLUSIVE_PAIRS` / 并存 `COEXIST_OK`），**门禁 7 自动查，不许留白**。
- **用例集在同一目录的 `ap_cases.py`**，**追加式、永不删除**：每轮实测发现的漏报/误报都往里加。
  ⚠️ 改词表却没同步用例集 = 门禁测的不是你改的东西。用例按来源分组（历史失败 / 审核方 / 评价文章 / 防御 / 宽度试纸）。
- **匹配是三层**（都在 `scripts/anti_patterns.py`）：① 意图闸门（无自述信号直接空）② 关键词命中 ③ **施事判定**——在关键词所在子句内判「**我**是行为施事还是评价者」，**四层**优先级：我+行为动词→保留 ／ 「我…的感受是」→否决 ／ 我+评价动词(觉得/感觉/认为/以为)→否决 ／ 兜底比距离（对象词更近则否决）。
  ⚠️ 第 ③ 层必须同时过两端：**评价句不误报**（「我觉得这段概括得太宽了」不弹）**且话题句不误杀**（「这段 我概括得太宽了」要弹——「这段」是话题不是施事）。第八轮实测：只判「左侧有对象词就否决」会把话题句 **5/5 全杀**。

> ⚠️ 本节为**本地工作区专有流程**（本包不含对应工具与数据），已略去。

---

## 交付尾条：评分提示 + 追问提示（每次交付必须带）

每次交付（HTML 底部由渲染脚本自带 + 回复结尾）必须带这两条，缺一＝交付不合格：

1. **评分提示**：「⭐ 给这次解析打个分。一共 5 颗星，你觉得值几颗？直接回复「X 星」就行——不满意的地方也欢迎说，说了才能改。」（低分必须追问具体不满点并记入 CHANGELOG）
2. **追问提示**：「以上分析有任何不懂的地方——术语、原理、某个判断的依据——尽管问，问到底都行。想知道某段怎么概括出来的、干扰项怎么构造的，直接问。」（追问回答必须挂卡：怎么做用 B 系，为什么用 A 系——思想吸收通道）

---

## 输出风格（沿用与本项目主人的约定）

- 动作清单优先：编号，一句话一步
- 不堆原理讲解，他要的是"我现在该干什么"
- 他追问"为什么"时再展开
- 移动端友好、低阅读门槛

## 🚩 红旗清单（见到任何一条，立刻停下，不许继续往下干）

| 红旗 | 正确动作 |
|---|---|
| 要写进库的条目标了具体书目章节，但那本书你根本没读过 | 停 → 改标「用户口述，出处待核」或「推测」（铁律零）|
| 准备引用逐题解析，但没回原文逐句核对 | 停 → 先核对；对不上 = 弃用（铁律零附）|
| 准备直接开分析，还没读 `cards/INDEX.md`（选卡）、`cases/INDEX.md` 和 `my-patterns.md` | 停 → 先检索（铁律二），跳过＝零挂卡 |
| 用户投喂了理论/案例，对话里讲完了但一个文件都没写 | 停 → 入库 + CHANGELOG，只在对话里讲一遍 = 没做（铁律一）|
| 解析写完了，里面一个卡号都没有 | 停 → 回去检索挂卡，零挂卡 = 不合格交付 |
| 写完 HTML 只报了路径，「已弹到你面前」这种话就说出口了 | 停 → 打开动作真的执行了才能说（铁律四）|
| 某个判断找不到原文证据句，正准备靠「大概/应该」写进输出 | 停 → 找不到证据就不写，脑补 ≠ 分析 |
| 卡库改了，但 INDEX / CHANGELOG 没跟着动 | 停 → 原子化三件套同步完才算完成 |
| 反模式卡一次弹了 3 条以上 | 停 → 只留与本题证据链最直接相关的 1-2 条，全弹＝噪音＝等于没弹 |
| 新裁决/新规则落了卡，但同口径的旧文没全库清扫 | 停 → grep 旧口径关键词（取后面/最后一层/重心在后/取果…）全清完才算落地（2026-09-10 查出 summarization.md 三处裁决前旧文残存）|
| 改完内容/发布之后，没有跑独立回归检查就宣布完成 | 停 → 任何改动都要配一次**独立于本次改动**的回归检查，未过审计=未完成（2026-09-10 外部审计抓出 30 文件回潮，此前两次「0 残留」均为假阴性）|

## 借口对照表（借口 → 现实，每场事故沉淀一行）

| 借口 | 现实 |
|---|---|
| 「这次题简单，不用检索卡库」 | 零挂卡＝不合格交付；简单题恰恰最容易漏命题点 |
| 「知名机构的解析，应该没问题」 | 新东方答案串三方一致，逐题解析照样是 AI 编的（2026-09-02）|
| 「已经交付了」（实际只写了文件没打开） | 没执行打开动作＝虚报交付 |
| 「这题大概是考…」 | 无原文证据句的判断＝脑补，禁止输出 |
| 「出处大概在那本书第几章」 | 编造出处比不写更糟（2026-08-31 事故）|
| 「书里讲得跟我差不多，卡不用改」 | 没变成具体文件改动的对撞＝这次投喂没做完 |

## 主文件体积规矩（记着，防膨胀）

主文件只放**触发条件、铁律、工作流骨架、输出模板**。长例子、大段讲解、完整案例一律进 `references/` 按需加载——它们膨胀进主文件的那一刻，就是 agent 不再读完正文的那一刻。

---

## 移植说明（给接手这个 skill 的模型）

你拿到的是一个**活的**知识库，不是一份教程。三件事必须知道：

### 1. 你的知识在这，不在你的训练数据里
`references/` 里的内容是这个用户**亲自投喂**并逐条提炼的，优先级高于任何通用阅读技巧。分析时先检索再用，别拿自己的常识覆盖它。

### 2. 三条铁律是硬约束，不是建议
- 投喂必入库（只在对话里讲一遍 = 没做）
- 分析必检索（先用 `cases/INDEX.md` 和 `my-patterns.md`）
- 每满 10 案例复盘一次

违反任何一条，这个知识库就停止生长，退化成一份普通的静态提示词。

### 3. 冲突处理的规矩
用户投喂的新理论与 `core-principles.md` 冲突时 → **停下来问用户以哪个为准**，禁止自动覆盖。这是用户明确要求的。

### 4. 同步提醒
知识库可能在别处（本地 WorkBuddy）也在进化。若发现 `CHANGELOG.md` 里最新日期与当前日期差距较大，**主动问用户一句：要不要先同步最新版本**。两边分叉后手动合并很痛苦。

### 5. 文件清单（移植请带走全部）
```
SKILL.md
CHANGELOG.md
references/core-principles.md
references/exam-params.md
references/my-patterns.md
references/theories/INDEX.md  (+ 已投喂的理论文件)
references/cases/INDEX.md     (+ case-*.md)
```
