25. 2026-10-03 自主工作期(三):测量工具被审计,而我的一个"发现"被撤回
·
★★★★★★★
2.8k 字 ·
源文件 PROJECT.md 第 4872 行起 ·
discipline ruler ground selfcorrect
★ 本节的主题不是"她学会了什么",而是【我的尺子有多可信】。 而它的结论是:两个真缺陷、一次撤回、一次反向否证。
#25.1 ★★★★★ 两个真缺陷(都影响过结论)
| # | 缺陷 | 后果 | ★ 修法 |
|---|---|---|---|
| 1 | ★★ --snapshot-every 的快照【不存判定条件】(arrive_px/arrive_bonus),而"最好点"与"末点"都存了 | ★★ 对 _snap*.pt 复评时只能回退到默认值 → 同一个快照在不同工具下判定不同。而快照正是判断"最好点出现在什么时候"的东西 | ★ 存全三个字段;并回填已有 126 个快照(值从各跑次自己的日志横幅读,不是猜;只补缺失键) |
| 2 | ★★ train_cmds 在 188/188 个跑次上解析为 None | ★★ WebUI/审计工具看不到"这个跑次用几条指令训练";而 2 指令判决实验全靠它 | ★ 逐行 match + 优先用已解码的「训练指令集」行 → 现在 0/188 |
★ 缺陷 2 的两个叠加原因(都值得记):
① 正则要求行尾紧跟 `]`,而实际行后还有「留出(判据 4)['左','右']」
② 改成对整篇用 `^` 之后踩到引擎行为:
txt 以 '\n' 开头时 `^\s*指令` 匹配不到第二行,而同一正则在 txt[1:](以空格开头)上能匹配★★ -> 所以稳的做法是【逐行 match】,而不是对整篇用 ^。
#25.2 ⚠️⚠️⚠️ 一次撤回:一个"听起来很有道理"的解释
★ 我写过(并差点当成重要发现):
"训练监控的到位率是采样,独立复评是贪心,所以两者差 2 倍、方向相反。"
而读源码后发现:evaluate() 行 1034 用的是 sigmoid(...) > 0.5 —— 两者都是贪心。
★ 真因是:我自己的探针脚本忘了设 arrive_px(跑在默认 4.0 上,而检查点是 12.0 训出来的)。
她的最终位置距目标 6.12px ⇒ 在 12.0 下到达、在 4.0 下不到达 —— 那个"矛盾"是我造的。
→ journal/RETRACTION_ARRIVAL_GAP_WAS_MY_OWN_BUG.md
#25.3 ★★★★★ "到达"有两把尺子(本会话被它坑了两次)
| 尺子 | 定义 | 6.12px 时的判定 |
|---|---|---|
| ★ 到达判定 | 欧氏 dist_px <= arrive_px(12.0) | 到达 |
★★ 环境自报 _dist_cells() | 曼哈顿"格"距离(CELL_H = 14.4px) | ★ 0 格 ⇒ "在目标格里" |
★★★ -> "她在目标格里"与"她到达了"不是同一件事。 复评工具现在两者并排打印,且打印它实际使用的全部判定条件。
#25.4 ★★★★★★ 判决实验:"干扰假设"被反向否证
| 组 | 最好点条数 | n | Fisher「至少 1 条」 |
|---|---|---|---|
| 4 指令 | 3,1,3,1,1 | 5 | 5/5 |
| 2 指令 | 0,0,0,0,0,0 | 6 | ★★ 0/6,p = 0.002 |
★ 减到 2 条指令让她【明显更难学到任何东西】—— 而干扰假设预测的是相反方向。
★ "设置坏了"也被排除:两组训练信号同构(sup 都在步 1300 归零、ent 都稳定 −0.24)。
→ journal/RESULT_INTERFERENCE_HYPOTHESIS_REFUTED_IN_REVERSE.md
#25.5 ★★★★ 新增的机制(不是"再加一条教训")
| 工具 | 作用 |
|---|---|
★★ tools/supervisor/workqueue.py | 待办登记册:每项写明 gpu 需求 / 依赖 / 可核对的完成判据;在我空闲时叫我做下一件事 |
★★★★ tools/supervisor/gate.py | 把修过的每个 bug 变成一条可重跑的核对(7 组)—— 用户批评的正解:"记录教训与防止重犯之间没有机制连接" |
★★★ tools/supervisor/calibrate_gate.py | 校准闸门:故意弄坏两处,确认它真的会失败(基线 0 → 弄坏被抓 → 恢复后回 0) |
★★ tools/supervisor/audit_static_silent_failures.py | 静态审计"算了但没落盘"与 except: pass |
★ 闸门从 76 项失败收敛到 0:把它限定在【当前在用的 7 个 .ps1】 ——
用今天的标准回测 60 个历史脚本是噪音,而噪音会淹没真问题。
#25.6 ★ 本节的教训(161–166)
| # | 教训 |
|---|---|
| ★ 161 | ★★★★★ "两个工具报同一个量却给出不同值"时,先读【它们各自怎么算的】,不要先怀疑其中一个坏了。 |
| ★ 162 | ★★★★★ 解释越漂亮,越要先测。 一个"听起来很有道理"的解释比一个明显的 bug 更危险 —— 因为它会让我停止查。任何机制解释都必须附带一条可直接测量的预测。 |
| ★ 163 | ★★★★ "看起来差很多"不能替代统计检验;n<10 时用 Fisher。并且要把【方向】写进结论 —— "没差别"与"反方向"是两种结果。 |
| ★ 164 | ★★★ 日志里的"到达率/成功率"必须注明【动作模式】与【判定条件】,否则不同工具会给出不同读数而看起来像数据矛盾。 |
| ★ 165 | ★★★ 回滚/替换编辑时,先用工具核对"真实文本",不要凭记忆。 我这次取错过备份、也写丢过字典开头。 |
| ★ 166 | ★★★★★ 一个"恒为真"或"恒为假"的核对与没有核对一样没用。 我写出过一条恒为假的检查(搜全角括号而源码是转义写法)—— 校准(故意弄坏)是发现它的唯一办法。 |