v0.4.0
Added
- 学科档案层(subject profile):新增 skills/textbook/references/subject-profile-spec.md 与首份档案 profiles/stem.md。此前"STEM 假设"弥散在四个文件里——例题题型与验证方式表(
exercise-design.md第 2 节)、Bloom 动词表与六层判定标尺(bloom-levels.md第 2、4 节)、四段标题文案与各段教学动作(chapter-template.md)、数学公式规范的适用声明——加一个学科门类要同时改四处,且改完两套规则各自漂移,没有机制拦得住。档案层把随学科变化的四个可变点(题型集、验证手段、认知动词与层级示例、章内段义与载体扩展)收拢成一个可插拔构件,规格强制四个固定小节、每节恰有一个消费者(阶段 1 / textbook-exercises / textbook-outline / textbook-chapter)。内核只写学科无关的规则,档案只写本学科的增量:通用 Bloom 动词、三类题支撑纪律、四段式脚手架逻辑、通用文体规范都留在内核,档案不复制 - 契约新增字段
学科档案(handoff-contract.md 第 2 节):阶段 1 判定一次 → 落盘为.progress.json的subject_profile→ 逐章原样透传给 textbook-chapter 与 textbook-exercises,全流程单点决策、不重判。顺带修掉一个隐患:此前作者坚持写文科时只有 textbook-outline 知道要降级,chapter 与 exercises 各自仍按 STEM 假设跑 - 校验脚本新增
validate_subject_profiles(第一层防线覆盖新架构):每份档案四节齐全、第 2 节题型表表头固定、「验证手段」列不得为空或写成"无"、规格第 5 节索引表与profiles/下文件一一对应;validate_repo_health另查规格文件与至少一份档案存在。其中验证手段列非空是红线的结构性保障——档案能定义"用什么方式验证",不能定义"是否需要验证",于是新增任何学科都绕不过每题必验,绕不过来自结构而不是靠指令里写"不许" - 配套单元测试 11 项(总数 41 → 52):合法档案通过、缺小节、验证手段为空、写成"无"、表头不对、表无数据行、档案未登记索引、索引登记但文件缺失、无档案层时静默跳过,以及 references 子目录字节校验与多级相对引用两项
- 第二份档案
humanities(历史、哲学、文学、政治学、社会学、艺术史):把 ADR 0006 的红线迁移到"答案取决于论证"的学科——理科最致命的失真是算错,人文社科是引文伪造与史实错位(虚构文献、张冠李戴的名言、错乱纪年),同属信任杀手,故沿用同一条纪律,只把"复算"换成"核对来源"。六个题型各有验证手段与降级路径:事实性/年表(核对材料或公认年表并标出来源)、引文辨识与文本细读(引文逐字核对原文,记明版本/篇目/位置)、概念辨析(核对定义来源,学界有实质分歧时列出主要界定并标⚠️)、史料/文本评析(核实材料存在 + 核验评析逻辑自洽)、因果解释与论证(逐步核验论证链条并附反方视角)、论述/小论文(不设标准答案,给论证要点 + 评价标准表,恒标"开放题")。最重一条纪律:无法查证时一律标⚠️ 需作者确认,绝不凭记忆编造引文、出处、年份或页码——一个编出来的出处比一个算错的数字更难被读者发现,伤害也更大;因此该档案第 1 节要求阶段 1 强烈建议作者提供学科材料 humanities档案的章内段义:四段标题为「概念与脉络讲解 / 范例研读 / 引导分析 / 独立论述与探究」,段位语义仍是讲 → 教 → 扶 → 放,换的是教学动作——要示范的不是"怎么算"而是怎么读一则材料、怎么搭一条论证(范例研读逐步标出推断动作:识别材料性质 → 提取主张 → 检验证据 → 指出立场与局限 → 得出有边界结论);载体扩展为引文台账(| 引文出处 | 版本/译本 | 首次引用章节 | 核对状态 |,同一文献全书只用一个版本、同一引文只用一种译法——上下文隔离让各章在不同会话写成,术语表管不到版本与译名);文体附加条款七条(引文必带出处、原文与今译分列、纪年统一、译名统一、史实与史论分开写、不以今律古、观点归属清楚),并声明 writing-style.md 第 13 节数学公式规范不适用- evals 新增用例 7、8(M7):7 验档案路由——《中国近代史纲要》须判定为
humanities且不出现劝退、五件套与双 gate 表现与 stem 项目一致、例题计划题型全落在该档案题型集内、学习目标动词不出现"计算/求解/推导";8 验引文核查纪律——四段标题与档案逐字一致、题目数等于核查行数、每处引文带出处行、无法核对的标⚠️ 需作者确认(引文未核)而非凭记忆写出、论述题给论证要点与评价标准并标"开放题"。两个用例的断言全部锚定形式性可判定项(学科越偏论述,内容质量越难客观判定,压在形式项上第三道防线才不会失效)
Changed
- 引用完整性校验从"只查 SKILL.md"扩展到 skills 下所有 .md,并支持多级
../跨 skill 路径。动机:档案层与内核互引密度高于以往,references/之间的断链此前无人拦(既存覆盖缺口);check_reference_size的判定同步从parent.name == "references"改为"references" in parts,否则references/profiles/下的档案会漏掉 500 字节校验 - 四个可变点的内容从内核迁入
stem档案,内核相应位置改为指路:exercise-design.md第 2 节由题型表改为"查档案第 2 节"并说明表头形状与非空要求、第 7 节反模式 5 从"文科论述题混入(v1 不支持,v2 支持)"改写为"出了档案题型集之外的题"(没有为它定义过验证手段就等于绕过红线,改用档案内最接近的题型并说明替换);bloom-levels.md第 2 节动词表标注为通用基线、第 4 节六层标尺迁入档案;chapter-template.md四段标题与后三段教学动作改为取自档案第 4 节,模板正文仍用stem档案文案写成、可直接复制 textbook-outline阶段 1 增加档案判定:产出的「## 一、教学定位」必须含一行学科档案:<id>(不设 gate,展示即可——档案决定全书验证纪律与章内段式,选错一次会歪一整本书,而作者是唯一有资格判断"这个近似可以接受"的人);索引里匹配不到时按规格第 7 节处理:说明将按最接近的档案处理 + 指出已知差异,由作者决定继续或改学科范围,不得静默套用.progress.json新增subject_profile字段,属向后兼容增量:v0.3.x 及更早创建的存量项目无此字段,重入时按stem处理并在续写行后补一句说明,不阻塞续写。三类题的类型名(示范例题/引导练习/独立习题)明确留在内核,任何档案都不得改动——Bloom 回写、梯度统计、验证行清点全按类型名对账;档案只定义章内段标题文案- 对
stem档案的项目,本轮为纯重构、行为等价:唯一对外可见的新增是阶段 1 多打印一行学科档案:stem。验收标准即 evals 用例 1–4 全绿且产出与重构前等价 exercise-design.md第 3 节末两次修订(由 eval 2 驱动,见下节):最终措辞要求逐题附这道题自己的、复制即可运行的复算代码,并明确禁止"多题共用一个外部脚本、逐题只附调用命令"——理由写进规范:交付到读者手里的是章文件,而章骨架只有「引言 + 四段 + 本章小结」,没有安放共享脚本的位置,脚本落在章外这条纪律就白立了;同时保留为文科新增的"核验记录"形态,并采纳 eval 8 里自发出现的好做法,要求核验记录标明结论实际依赖哪几条。textbook-exercises/SKILL.md输出节同步- 文体规范两处加固(由 eval 2 rerun2 的偶发违规驱动):
writing-style.md第 13.4 节在"公式内不写中文"下补明替代写法——多行推导的行标签用符号((AB)_{11})而非\text{中文},并把\text{第 1 行第 1 列:}这个具体反例写进去(注明这是该条最常见的破功处,因为"给每行加个说明"看起来无害),\text{}只留给英文短词;chapter-template.md第 5 节自查清单第 7 条把该项变成可执行动作——搜一遍\text{,逐个确认括号内无中文
Eval 验收(2026-08-04,宿主 Claude Code / Opus 5)
本轮触及 handoff-contract.md 与全部 5 个 skill,按 CONTRIBUTING 映射表需重跑 eval 1–4,外加新增档案的 eval 7、8;.progress.json 为向后兼容增量、落盘布局未变,故不补跑 5、6。前两道防线全绿(结构校验通过、52 项单元测试全绿)。已跑两个:
-
eval 8(humanities 单章,M7):通过 7/7。 压测的核心担忧——无史料时会不会编出像真的出处——实测没有发生:三处核不实的文献全部走降级路径且不逐字引用(改为明示的转述),引文台账落地并自拟约定「
⚠️ 未核的条目核定前不得逐字引用」。最强的一条证据是核对改变了输出:它查「数千年未有之变局」时发现自己的先验错了(含「三千」的那句在 1872 年另一折,不在 1874 年海防折),据此写成例 1-4——不是先写完再补一句"已核对"。工具账 WebSearch × 8 + WebFetch × 4 全用于核对。另有两条架构级旁证:档案隔离生效(eval 8 读humanities.md未读stem.md,eval 2 反之),文科路径的引用链也通(档案第 2 节把 rubric 写法指向performance-task-rubric.md第 3 节,被跟随且产出形状一致)。判定记录:evals/workspace/2026-08-04-eval-8/outputs/judgment.md -
eval 2(stem 出题回归,M3):三次运行,断言 3 修复但用例未整体通过。 首跑暴露一处由本轮重构引入的行为漂移:为容纳文科的"核验记录",
exercise-design.md第 3 节末把"附复算代码"从主句降为并列选项,结果同 prompt 下 0.3.0 逐题附 4 个```python块、本轮 0 个(代码集中到文末)。这类漂移是结构校验与单测都拦不住的那一类——文件形态全合规,变的是模型对一句话的理解。第一次修订后重跑仍不通过(改成"共用外部脚本 + 逐题附调用命令",而章骨架里没有安放共享脚本的位置,脚本落在章外读者就复核不了);第二次修订禁掉该写法后 rerun2 达成逐题 4 个独立可运行代码块、0 外部脚本文件。rerun2 因另一条偶发违规(例 1-2 在aligned里用\text{第 1 行第 1 列:},违反第 13.4 节公式内不写中文)仍判不通过——该项首跑与 rerun 均为 0 处,非回归,已按下节加固规范,整体通过留待下一轮验证。判定记录:evals/workspace/2026-08-04-eval-2{,-rerun,-rerun2}/outputs/judgment.md -
eval 7(humanities 大纲,M7):通过 6/6。 档案路由正确(
学科档案:humanities,全文stem命中 0、劝退类表述 0),题型与动词无 STEM 残留(stem 专属题型词与动词各 0 命中,实际动词为辨析/评估/还原/建构一类),双向对齐 8 条持久理解全部有章承载,三个表现性任务 GRASPS 六要素齐全且 rubric 无不可判定程度副词。梯度矩阵按文件逐行重算:10 行小计、六列合计(10/15/12/29/13/3)、总计 82、占比和 100% 全部自洽,且 82 等于例题计划实际条目数。判定记录:evals/workspace/2026-08-04-eval-7/outputs/judgment.md -
首次覆盖 gate 修改分支(eval 1 的判定记录里一直列为未覆盖项)。在 eval 7 的 gate 1 提了一处会牵动追溯网的修改(补经济社会维度的大概念),结果:完整重呈全部五件套而非只回改动处、自查六问与一致性检查重跑(小节标题即「修改可能破坏追溯关系,故重跑一遍」)、追溯网连锁更新做全(补 EQ2 指向、LO7 追溯、新增 LO15、TG1 材料类型)、仍停在 gate 不自行推进。两处超出规范要求的行为:把框架约束冲突交回作者(作者要求配持久理解,它本拟两条 EU 但会超出 4–8 条建议区间,改为合成一条并说明理由、留下"要拆说一声")、预告下游影响并在阶段 3 兑现(新增 EU8 意味着章节树必须有章承载,预计挤 1 章政治史;阶段 3 果然第 06 章整章给经济社会维度)。三次落盘快照证实修改-再确认循环期间文件始终 26 行不变,未落盘任何未确认内容
剩余待跑:eval 1、3、4(档案层重构影响面);eval 2 待下一轮整体复验。eval 5、6 为历史欠账,与本轮无关。
本轮 evals 发现的待改项(下一轮处理,均非缺陷而是规范缺口):
bloom-levels.md第 7 节的章内 Bloom 经验分布是按 stem 写的("半独立地练刚学的程序""按算法执行"),却留在内核——eval 7、8 两次独立运行都撞上这一处:eval 8 把范例研读放在分析/评价层、eval 7 在梯度备注里写"分析层 35% 是人文社科的自然结果",理由同源。按 spec 第 4 节的判断法(换个学科照样成立才属内核),该节的分布建议应下移到各档案第 3 节;humanities档案第 1 节应把"作者未提供材料时,将降级纪律写入00-教材设计.md「## 一」子节"固化为要求——eval 7 自发做了这一步,而它很关键:写章是另一个会话,该文件是唯一传递载体,纪律不落盘下游看不到;textbook-outline/SKILL.md阶段 1 与档案的前置输入要求有规范冲突:前者规定"不停顿直接进阶段 2",后者要求"强烈建议作者提供学科材料"——要建议就得问、问就得停。eval 7 自行权衡为"并入这一轮提问"(正确),但应写进规范而非靠现场判断;humanities档案第 2 节应补题内局部⚠️ 标注的规矩(eval 8 出现"整题 ✅、题面内某数据标⚠️ 且声明不参与结论"这种档案未规定的形态),以及第 4 节应明确引文台账在被调度时并入术语表.md、独立触发时随章附;- README 文科说明处应写明「无史料输入时约 1/3 题需事后核定」这个成本预期(eval 8 实测 3/9 挂
⚠️ ,是档案第 1 节所预言的必然结果,不是缺陷)。