Repository navigation
v2.1.5 · 做交付案例时发现:「长难句剥离」从来没渲染过
v2.1.5(2026-09-26)
这一版起因很轻:做一份完整的交付案例给人看。 过程里撞出三处缺陷,全是同一类 ——
文档承诺的东西,实现里没有。这已经是这个病灶第三次出现。
一、README 承诺的「长难句剥离」,从来没进过页面
README 写着每份交付都含「篇章结构、每段段旨、逐题解析、长难句剥离、命题点预埋」。
SKILL.md 提到长难句 6 处,给了方法(「挑 2-4 句,去修饰留主干」),
还专门规定了位置:归入该题解析的「推理」段,不单开一节 ——
理由是「单开会把它和题目割开,使用者看不出『这句难在哪、为什么导致选错』」。
模板也声明 summary.stuck_sentences 是「渲染」。
但渲染器里 stuck_sentences 一次都没出现。 写了也进不了页面。
→ 已实现,两个位置都收(题内 + 全文层,两边各有来路)。
二、markdown 被当成字面字符显示
渲染器有 _inline()(**粗体** → <b>、`代码` → <code>),
但它只用在卡原文上;作者自己写的字段全走 esc() —— 于是页面上出现字面星号。
实测上一轮外部工具那份交付里有 38 个字面 **。不是它写错,是渲染器不解析。
判据改清楚:
| 字段性质 | 处理 |
|---|---|
| 作者/agent 写的文本(依据/干扰项死因/缺口/可迁移/复盘/本题运用/使用者思路…) | _inline(作者会写 markdown 排版) |
| 引用材料的字段(选项字母、答案、段落原文) | 保持 esc(材料不该被当 markdown 解析) |
按此改了 17 处。顺带两处健壮性:_inline 加 re.S(卡里有跨行加粗)、
连续 3 个以上星号归一到 2 个(库里有实例)。
三、date / question_type 同样声明了「渲染」却没实现
抬头只显示标题和来源。→ 现在多一行「日期 · 题型」。
四、机制:门禁 11 补判据
三处缺陷共用一个盲区:门禁 11 只查「有没有声明」,
不查声明得对不对(它的说明里当时就写明了「不判断声明得对不对,那要人看」)。
但 user_wrong_choice/dual_channel(上一版)、stuck_sentences(这一版)连着两轮 ——
按本项目纪律,复发第二次就该进机制。
新判据:声明为「渲染」的字段,必须在渲染器源码里出现。
- 当场抓出 2 个真实案例(
date/question_type)—— 证明它不是空转的 - 配自测夹具;夹具当场抓出判据自身的 bug(通配键
group.*被 rstrip 成group后误报)→ 已修 - 为什么安全:叶子名是唯一标识;声明「不渲染」的跳过;通配键跳过
附:交付案例
dist/analysis/analysis-result-note-taking-20260926.json(+ 渲染出的 89 KB HTML)。
研究类议论文(手写笔记 vs 打字),4 题,含两条真实错因自述。
它同时是本版的端到端验证物:元素级核过自述块 2 / 双通道 1 / 长难句 1 / 反模式条幅 2 /
段旨 4 / 缺口 4 / 可迁移 4,markdown 字面残留 0。
我自己犯的两个错(都记档)
- 又用 heredoc 写含
\n的代码 →\n变成字面/n,渲染器语法坏掉。
这条纪律 09-25 就立过(「往文件里写含转义符的代码:用编辑器,别用 heredoc」)——复发。 - 替换时丢了个右括号 → 语法坏。因为有备份,回滚重做只花十几秒。
回滚能力让错误变便宜。
Full Changelog: v2.1.4...v2.1.5