Repository navigation
自测提速 + 物理补 37 个知识点(静电/电路/交流/光学/振动/近代) - #128
Merged
Merged
Conversation
- RFC 3629:合法 UTF-8 限 1–4 字节,禁代理区与 U+10FFFF 以上(ev-155) - 热学:第一定律 ΔU = Q − W、第二定律总熵与自发方向,中英各一条(ev-156/157) - 选必三第 3 章覆盖度 🔴→🟡;kbcheck 678 对象 / 1452 文档全绿
新增两条知识点及 ev-158/ev-159;覆盖度第5章转黄。 记录来源两处缺陷:强核力射程量纲错误、α 衰变例题质量差 10 倍。
仓库涨到 700+ 对象(1500+ 个 md)之后,verify_rules 慢到没人愿意在改规则时跑它。
查下来是三处,逐个量过:
1. **每个样本整份复制仓库** → 改成复制一次、靠 write()/move() 的改动登记在样本之间复原
2. **每次样本重扫 1500 个 md 挑目标** → `_objects` / `_paths` 加缓存(样本只挑目标,
扫一遍的结果整个自测期间都有效)
3. **硬链接跨盘静默退回复制**(最隐蔽的一条)→ 临时目录默认在 C:,仓库在 D:,
`os.link` 抛 WinError 17,`copy_function` 悄悄退回 `copy2`:1500 个文件 30 秒。
现在临时副本放在**仓库同一个卷**上,硬链接毫秒级建好。
配套:副本是硬链接建的,所以写入必须「写临时文件 + os.replace」,
否则原地 open("w") 会顺着链接**改到原仓库**。已用 md5 验证原仓库未被改动。
新增 `--only <前缀>`:改一条规则时只跑那一条(3 秒),全量留给 CI。
CONTRIBUTING 命令速查补了这一行。
实测:全量 46/46 通过、1m20s(原 2m21s);单条 3.3s(原 37.6s)。
这批内容是上一轮会话写好的(覆盖度页、物理 README、索引都已同步),但一直没有提交。 本次只做收尾:核对、跑校验、提交。 范围(新增 37 个知识点,各带英文译本): - 静电场:电荷 · 库仑定律 · 电场强度 · 电势能与电势 · 电容 · 带电粒子在电场中的运动 · 静电的防止与利用 - 电路:串联与并联 · 电功率 · 电功与焦耳定律 · 闭合电路欧姆定律与内阻 - 磁场与电磁感应:安培力 · 洛伦兹力 · 涡流与动生电动势 - 交流电:交变电流 · 有效值 · 变压器 · 感抗与容抗 - 光学:光的干涉与衍射 · 偏振 · 全反射 - 振动:简谐运动的相位与能量 · 单摆 · 阻尼振动与受迫振动 - 热学:热机与卡诺循环 - 近代:光电效应 · 普朗克量子假设 · 波粒二象性 · 核裂变与核聚变 · 结合能与质量亏损 · 医学中的电离辐射 - 其他:抛体运动 · 原子核相关补充 校验:kbcheck 全绿(1530 文档 / 717 对象 / 2 事件);verify_rules 46/46(无 FAIL、无 SKIP)。
一、路径:静电学入门(高中) 电荷 → 库仑定律 → 电场强度 → 电势能与电势 → 电容,覆盖度 5/5。 这条链的 5 个知识点**一条教法都没有**,所以环节直接连知识点—— 条目里明写了这个差别:**它是概念顺序,不是教学方案**, 「禁忌冲突」那一项不是"通过",是"没有检查对象"。 二、修规则冲突:R-GRAPH-01 vs check_paths `check_paths` 一直靠路径的 `edges.先修` 判断「外部先修」 (「这条路径要求你先会、但本路径不教」的东西), 而 R-GRAPH-01 写着「只有知识点可以有先修边」,把路径一并禁掉了。 两条规则互相打架——此前所有路径的 `先修` 都写成 `[]`,所以从没撞上。 现在 `路径` 可以声明外部先修(仍必须指向知识点),规则表文案同步。 静电学路径正是第一个用到它的:`电势能与电势` 要先修 `机械能守恒`,而那条在「能量」链上。 校验:kbcheck 全绿;verify_rules R-GRAPH-01 两个样本仍触发。
- FORMAT.md / .en.md:在「先修边只连知识点」下面写明唯一例外(路径的外部先修), 并记下这条规则冲突是 2026-10-21 才被静电学路径撞出来的 - verify_rules:新增「路径的外部先修指向教法」样本(允许路径有先修,但目标仍必须是知识点) - 顺手去掉一处重复登记(同一样本登记了两次,会重复跑一遍)
一、四条路径(中英各一,覆盖度 5/5 · 5/5 · 4/4 · 3/3) - 电路入门:电阻与欧姆定律 → 电功率 → 串联与并联 → 电功与焦耳定律 → 闭合电路 - 机械振动:简谐运动 → 相位与能量 → 单摆 → 阻尼与受迫(外部先修:牛二、力) - 交变电流:交变电流 → 有效值 → 变压器 → 感抗容抗(外部先修 4 个) - 光学:全反射 → 干涉与衍射 → 偏振(外部先修:波、折射) 四条都写明了「环节直接连知识点、没有教法」——概念顺序,不是教学方案。 二、修 `fm_links`:多行块列表只读到第一条 行内匹配写的是 `\s*`,而 `\s` 匹配换行,于是「`先修:` 换行后接缩进块」被当成行内值, 只取到块里第一条,后面全丢——**漏读不会报错,只会让检查看起来通过**。 改成 `[ \t]*`。这条影响所有 `先修` / `支持` / `攻击` 的多行块。 三、修 `check_paths`:外部先修被当成路径内引用 它按整篇扫链接,front-matter 里声明的外部先修也被算成「本路径引用了」, 于是又要求那些概念的先修也在路径内——外部先修等于白声明,还会连锁报错。 现在只看正文。 四、verify_rules 加了 fm_links 的回归样本(坏链接放在多行块的**第二条**, 只读到首条的实现测不出来),并在 main 里按(规则, 描述)去重—— 重复登记不会报错,只会白跑一遍。 校验:kbcheck 全绿(1554 文档 / 727 对象);R-GRAPH-01 四个样本全触发。
路径从 4 条涨到 9 条之后,START 第三节那张手写表又落后了—— 而这页已经因为同一类问题被改过一次(条目清单漂到 12 条)。 现在它只说「全部路径见物理索引的「路径」一节」,并写明: 新补的几条只有概念顺序、没有教法。那张表由 R-README-01 强制维护,不会静默过期。
路径 9→11。两条都写明了「环节直接连知识点、没有教法」, 并把「哪一步的顺序是我的判断、先修图并不约束」逐条写进 —— 先修图只保证不违反依赖,不保证我的排法是最优。 - 量子与原子:普朗克 → 光电效应 → 波粒二象性 → 原子结构(第 4 步位置是我的选择) - 原子核与辐射:原子核 → 衰变 → 结合能 → 裂变聚变 → 电离辐射(第 2、3 步可互换)
动量和冲量 → 动量守恒定律 → 弹性碰撞与非弹性碰撞;外部先修:牛顿第二定律、机械能守恒。 这条路径的顺序**完全被先修边约束**,所以条目里写明:它没有「我的取舍」, 也就意味着无法通过调整顺序适配不同学生——这是与其它路径相反的一种性质,值得记下来。
这是本库模型里最真实的缺口,但它**在覆盖度页上完全看不见**—— 那一页只数「知识点有没有」,不数「有没有人写过怎么讲」。 现在 把它单列一组,顺带在头部的分组表里标明「需要教材原文」。 实测:48 个知识点没有教法(71 个知识点里 23 个有)。 这条不做机械校验(不是错误,是待办),只做可见。
可用条目已经几百条,「待审的全都能复核」等于没有任务。 现在按「有多少条别的条目先修它」降序排:电场强度、电磁感应定律、匀速圆周运动、交变电流、原子核…… 这是**启发式不是判据**——它不说明哪条更重要,只说明改它会影响多少条别的条目。已在输出里写明。 踩到的坑:index 里 `先修` 存的是文件名(`牛顿第二定律.md`),而查的是 stem, 第一版两边没归一,于是所有权重都是 0、排序等于没排——**看起来在排,其实没排**。 另:本条提交信息第一版是用双引号 -m 写的,反引号被 shell 吃掉(`先修` 变成空白)。 改用 -F + 带引号的 heredoc 重写。
hpleapfrog
force-pushed
the
feat/rfc3629-thermodynamics
branch
2 times, most recently
from
October 21, 2026 13:57
aefdc5a to
2053bef
Compare
波 → 声速与频率 → 电磁波谱;**无外部先修**——`波` 是全库波动部分的起点, 光学与量子两条路径都把它声明为外部先修。 顺手在「被攻击」里写明:三步只覆盖波动的最外层,干涉/衍射/多普勒在各自条目里, **本路径不承诺它们**——路径的覆盖度是声明出来的,不是暗示出来的。
磁场 → 安培力 → 洛伦兹力 → 磁通量 → 电磁感应定律 → 涡流与动生电动势 → 自感与互感。 外部先修三个:电场强度、电阻与欧姆定律、匀速圆周运动。 七步、六个成果,是全部路径里最长的一条——条目里如实写了这一点: 「实际上更接近『章』而不是『一次课』」。另外把「先安培力后洛伦兹力」标为我的取舍 (先可测量、后解释),并说明反过来也合法。
原来是一张 48 项的平铺清单——知道缺,但不知道该从哪条链补。 现在按覆盖它的路径分组:磁场与电磁感应缺 8、交变电流缺 7、原子核与辐射缺 5、静电学缺 5…… 顺带露出一个原来看不见的事实:**有 12 个知识点不属于任何路径** (力矩 · 抛体运动 · 热力学第一/第二定律 · 熵 · 能源 · 角加速度 · 质谱仪 · 远距离输电 · 静电的防止与利用 · 带电粒子在电场中的运动)。 它们连「该排在哪」都还没定,比缺教法更靠前一步。 实现上只是把路径的编排表链接反查成「概念 -> 路径标题」,不新增任何数据。
- 热学(高中,4/4):第一定律 → 第二定律 → 熵的统计解释 → 卡诺循环。 把熵当正课讲(教材列为选学)是我的判断,理由写在「被攻击」里:不讲熵,第二定律只能背。 - 转动(高中,2/2):转动运动学 → 力矩。**只覆盖转动前半**, 缺转动惯量与角动量守恒——条目里明写「不打算用一条两步路径假装它完整」。 副作用(这条比路径本身更有用):`make_tasks` 的「未被任何路径覆盖」从 12 条降到 6 条, 剩下的 6 条是:抛体运动 · 带电粒子在电场中的运动 · 静电的防止与利用 · 质谱仪与回旋加速器 · 远距离输电 · 能源与可持续发展。 它们都能挂进已有路径(各加一步),下一轮做。
- 静电学入门:+2 步 → 带电粒子在电场中的运动(o6)· 静电的防止与利用(o7),覆盖度 5/5 → 7/7 - 电路入门:+1 步 → 能源与可持续发展(o6),5/5 → 6/6 - 交变电流:+1 步 → 远距离输电(o5),4/4 → 5/5;外部先修加「电阻与欧姆定律」 - 磁场与电磁感应:+1 步 → 质谱仪与回旋加速器(o7),6/6 → 7/7 - 新增 抛体运动(高中,3/3,两步):加速度 → 抛体运动 顺带修了 README 路径表里跟着变旧的四处覆盖度声明——这张表是手写的, 每加一步就会漂一次;这次先按实际改了,但它仍然是最容易过期的一处。 抛体运动这条路径如实写了两个短板:第 1 步是**借用别的路径的知识点**(加速度属「运动学入门」), 以及曲线运动的条件、运动的合成与分解都还没有条目,所以它到平抛就断了。 现在 `make_tasks` 的「未被任何路径覆盖」为 0。
这一轮给四条路径各加了一步、又从没忘改 README 吗?——**我改了,但那是靠记得**。 加一步就旧一次的表,迟早会有人忘;而数字和实际不符时,**读者信的是页面**。 - `check_path_outcomes` 把算出来的覆盖度存进 `PATH_COVERAGE` - 新增 `check_readme_path_numbers`:逐条比对学科 README 路径表里的 `X/Y` - 注入样本:把 README 里的数字改大一位 → 必须报错(实测拦住了) - 规则表 44 条,其中 43 条有注入样本(只剩 R-SCHEMA-16 没有) 顺带记两个写样本时踩的坑: 1. 样本一开始改的是 `knowledge/README.md`(总索引里也出现「覆盖度」字样),那条不受本规则管 → 假失败 2. 限定到学科 README 仍不够,还得要求那一行**同时含 `paths/`**——否则改到别处的「覆盖度」同样无效 教样本要「改对地方」,比写断言更容易出错。
这一页以前只列「有哪些教法」,不列「**还有多少知识点没有人写过怎么讲**」。 缺的那 48 条在覆盖度页上完全看不见——那页只数「知识点有没有」。 现在一进物理 README 的教法小节就能看到: | 知识点 | 有教法 | 缺教法 | |---|---|---| | 71 | 23 | **48** | 数字由 `kbcheck.py` 生成(`render_physics_methods_block`),不手写; 「缺哪些」仍由 `tools/make_tasks.py` 按路径归拢。 顺带确认:44 条机械规则现在**全部**有注入样本(50 个样本)。
抓取路径打通了:openstax.org 是 SPA 空壳(正文抓不到),但源仓库 `openstax/osbooks-physics` 的 `modules/<id>/index.cnxml` 就是教材原文, `evidence/os-teacher-markers.py` 早就在用这条路——这次直接沿用它。 两条教法(各中英一份): - **库仑定律 · BL/OL:与万有引力逐项对照**——教材要求并排列出「相同(平方反比、 质量与电荷同角色)」与「不同(质量恒正 vs 电荷可正可负)」,再 `Discuss` 库仑为何晚; 风险写成「只讲相同不讲差别」与「把晚讲成年代故事」 - **库仑定律 · AL:静电力那么强,为什么更晚被发现**——教材只给问题不给答案, 条目把这一点写成禁忌(「需要标准答案的课堂」不适用),三个脚手架明确标为**我的推测** 两条都引 ev-085(同一模块),没有新增证据;`## 论证` 里承认「教材指定 ≠ 实测有效」。 物理教法覆盖:23 → **24** 个知识点(缺 48 → 47)。
今天踩的坑值得写下来,否则下一个人还会去 curl 网页: - openstax.org 的页面是 SPA 外壳,curl 回来 12 KB,正文(含 Teacher Support)一个字没有 - 原文在 openstax/osbooks-physics 的 modules/<id>/index.cnxml - evidence/os-teacher-markers.py 本来就在走这条路,只是没写进文档 中英各一节,附许可说明(CC BY 4.0,只存短引用 + 定位)。
两条都来自真原文,引用带 `[BL]`/`[OL]` 标记: - **电场强度 · BL/OL**(m54428):教材的顺序是「问学生看过力场电影 → 引力场 → 电场」, 再 `[BL] [OL] Point out that all electric field lines originate from the charge`。 风险写了「把电影力场当定义」——教材紧接着自己就说 `differs somewhat from what you see in movies`, 电影只是门,不是答案。 - **电势能 · BL/OL**(m54426):`[BL]` 日常「潜力」→ `[OL][AL]` 复习「势能=由位置决定的做功能力」 → `[OL] Remind` 势能只能谈差值、要先选参考位置。教材用 `Remind` 说明这是**旧账**,不是新知识。 两处都诚实标注了「教材指定 ≠ 实测有效」,并把我自己加的推论单独点出: 电场那条的「学生会把电影力场当真」、电势那条的中文「潜力」语感,都写明是我的推断。 物理教法覆盖 24 → **27** 个知识点(缺 47 → 45)。
一、工具:`python tools/os_source.py 电容`
概念 front-matter 的 evidence → evidence.json 的 m##### → GitHub raw 的 index.cnxml
→ 打印 Teacher Support 段落(含 [BL]/[OL]/[AL])。缓存到 .cache/os/(已忽略)。
为什么值得固化:写教法要反复走这条链,而 openstax.org 的网页抓不到正文,
每步都容易记错。剩下四十多条教法靠它推进。
二、教法两条(m63179):
- **电容 · BL/OL:先查词典里的 capacity**——教材原话是「说 → 查词典 → 比较」三步,
落点是「日常义与物理义差在**存什么**」;风险写了「水桶比喻会偷换存什么」
(教材没点名水桶,这条是我的推断)
- **电容 · AL:弹簧的容量由什么决定**——`[AL]` 三问链,落点是 `Point out that these
properties are intrinsic to the spring`(容量不随电荷变);补了一句「固有 ≠ 不变」,
也标明是我加的澄清
物理教法:26 → **27** 个知识点(缺 45 → 44)。
顺带:写第二条时 id 打成了 `kb=physics:`(等号),已改回 `kb:physics:` 并复查。
一、工具两处升级(比教法本身更影响后面几十条) 1. **多源仓库**:m##### 不一定在 osbooks-physics。实测 m42324 / m42344 在 osbooks-college-physics——只试第一个就 404。现在按 physics → college-physics → university-physics 顺序找。 2. **`--scan`**:扫「还没有教法的概念」,报告它们的原文里**有没有** Teacher Support。 实跑结果:**28 条有、16 条没有**。 没有的那 16 条全部来自 College Physics——**那本书根本不带 [BL]/[OL]/[AL] 标记**。 这是个硬约束:写教法不能凭印象补,得先确认原文有没有教学提示。 二、电荷两条(m54417) - **BL/OL:static 不等于静止**——教材用两个方向相反的例子拆字面理解:分离正负电荷「在动」 却叫静电;闪电「本身是大电流」却源于静电。定义的关键词是 `imbalance`,不是 `static` - **AL:你摸到的一切力都是电磁力**——触觉、绳中张力都是电磁力;引力**不是**电磁力, 但「感觉到引力」是(脚压秤的分子相互作用);强弱核力在人的尺度感觉不到 物理教法:27 → **28** 个知识点(缺 44 → 43)。
- **串联与并联 · BL/OL**(m54435):教材要求**先复习水管类比**再讲符号,并列了四组对应 (高压水分子↔高压电荷 · 水泵↔电池 · 滤沙器↔电阻 · 水库↔接地 `V_ground ≡ 0`)。 风险写了「水用完了→电荷不会」这个最常见的误带,并标明是我补的。 - **电功率 · OL**(m54446):入口是 25 W 与 60 W 两只**同电压**灯泡——同压不同亮, 于是「电压之外还有别的东西决定功率」。教材还给了 100 W/120 V → **144 Ω**, 我复算 `120²/100 = 144` 与教材一致。风险:「60 W 更亮」只在同压下成立。 物理教法:28 → **30** 个知识点(缺 43 → 41)。 剩余可写的 26 条(`os_source.py --scan` 的「有原文可用」清单)继续按路径顺序推进。
一、工具:把「可用原文」的判定收紧 原来按 Teacher Support 的**段数**算,把只写了教学目标的那类 note 也算成可用。 现在只数**带 [BL]/[OL]/[AL] 的段落**,并把结果分三桶: - **带档位标记 17 条**(可直接定档) - **有做法但未标档 8 条**(交变电流、变压器、安培力、洛伦兹力、磁场、磁通量、电磁感应、远距离输电) - **无做法提示 16 条**(全部来自 College Physics) 这条修正很关键:按旧口径,交变电流会被算成「可写」,实际它没有档位标记。 二、两条教法 - **简谐运动 · 不分档**(m54154):教材要学生先用**不同刚度的弹簧 + 砝码**搭振子,再引入周期与频率, 并用三问(刚度/质量/初始力)各排除一个变量;答案不给,让学生自己看出来 - **抛体运动 · 不分档**(m54162):先 `Ask students to guess`(初速?角度?),再引入空气阻力作对照, 落到「水平与竖直独立」,用**同高同时落地**的图立论 物理教法:30 → **32** 个知识点(缺 41 → 39)。
- **原子核 · BL**(m54580):教材用 `Remind` 承认「学生会把质量数与原子序数搞混」, 给的是**两条判据**(谁决定、区分什么)而不是 `A = Z + N` 这个等式; 固化手段是「给核的图让学生自己数」,再追问「碳的原子序数都是 6,那质量数还有什么用」——答案就是同位素 - **原子核 · AL**(m54580):三句话制造缺口——「质量数守恒,那质量呢」→「质子比中子轻一点」 → `Note—Not all of it goes to the electron`。**这句 Note 提前堵掉了最常见的错误答案**; 条目本身也不给答案,理由写在论证里:写「变成能量」就等于替学生答了 物理教法:32 → **33** 个知识点(缺 39 → 38)。
- **BL/OL**(m54559):教材开场只给两问——「什么能让光打出电子」「有没有更容易的材料」, 第二问正是逸出功的入口。正文的命名顺序也值得照搬:现象 → 爱因斯坦的量子化 → **最后**才出现 `photons` 这个词;倒过来讲,学生会把 `E_k = hf − W` 当定义 - **AL**(m54559):从相机测光表反推——为什么有用 → **电子数**怎么控制光圈 → 画出装置。 强调「控制光圈的是电子数不是电子能量」,正好拆「光越强电子越快」这条误解 物理教法:33 → **34** 个知识点(缺 38 → 37)。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
这个 PR 现在包含三块(已按提交分开)
250d204·691747420e8f42--onlya525e29三块本是同一条工作线上的产物,分开提交、一次合并。如果只想先合工具改动,我可以把
a525e29拆到独立分支。一、自测提速(
20e8f42)仓库涨到 700+ 对象后
verify_rules.py要 2 分 21 秒——慢到没人跑,等于没有自测。三处瓶颈都量过:_objects/_paths缓存第 3 条最隐蔽:
os.link跨盘抛WinError 17后copy_function悄悄退回copy2,1500 个文件 30 秒、无任何提示。配套安全改动:硬链接副本下原地
open("w")会改到原仓库,所以写入统一改成「临时文件 +os.replace」,已用 md5 验证原仓库未被改动。新增
--only R-GRAPH:单条 3.3s(原 37.6s),全量留给 CI(Linux 上约 57s)。二、物理 37 个知识点(
a525e29)静电场(7)· 电路(4)· 磁场与电磁感应(3)· 交流电(4)· 光学(3)· 振动(3)· 热学(1)· 近代(6)· 其他(6),每条都有英文译本。
覆盖度页与物理 README 同步更新:必修三第 9–12 章、选必一第 2 章、选必三第 5 章均转 🟢。
机械校验
python tools/kbcheck.py通过(1530 文档 / 717 对象 / 2 事件)python tools/verify_rules.py46/46(覆盖 42 条规则,无 FAIL、无 SKIP)两个我注意到但没动的问题
教法(教法仍只有 46 条,挂的是老概念)。按本库模型,教法是知识点的教学做法,这一层现在是空的。
--only。AI 参与声明
--only、内容收尾与校验由 AI 完成。