as_of 2026-10-09。本档只回答一个问题:这条纪律,是哪次事故换来的?
与既有归口的分工(不重复):
归口 收什么 不收什么 skill vitro-workspace-review/references/04-工具链与踩坑.md工具链/环境的确定性行为("下次还会遇到"的坑,A1–A25 / B1–B6 / C1–C15 / D1–D6 / E / F1–F7) 一次性现场(其写入规则明文排除) INCIDENTS/GB 级资源事故(内存 / RSS / 页面文件 / 磁盘),含模板与索引 非资源类事件 统一整备路线图.md§4防伪绿机制表(机制 ↔ 来源列) 事件过程 本档 一次性事件 ↔ 制度产物的对照 + 权限纪律 + 否决档案 上述三处已覆盖的内容 依据:
.agents/skills/.../05-演化机制.md的写入规则与INCIDENTS/README.md的归档规则,两处都刻意收窄了边界——本档填的是它们共同留出的空档。
一、审阅方式:位置在机器盲区,主力是注入测试
背景:AI 写出的代码大多"表面正确";本仓入库 MoonBit 已超过九万行。逐行回读既不现实,也不比机器检验更可靠——人工审阅同样受想象力边界限制(想不到的场景=测不到)。
实证(2026-09-12 突变测试的起因,原文口径):对"核心资产不重构"的裁定提出证据质疑——660 影子用例与驱动脚本大量由 AI 编写,不排除存在绕过;遂改用突变测试(故意注入语义缺陷,测防线是否变红)直接测量防线强度,不依赖任何人的预想。首轮 VM 算术层三个不同可观测度的突变,3/3 检出。
1.1 渗出证据链:每修好一道防线,就照出它此前掩盖的存量
规律:渗出速率与"防线加压"正相关,与开发动作无关。凡防线没直接覆盖的通道,缺陷就躺在那里等下一次偶然照射。
| 时间 | 照出动作 | 暴露的存量缺陷 |
|---|---|---|
| 09-06 | 防线门禁化 | 4 例被恒绿掩盖的差异 |
| 09-11 | 外部审查复核 | 12 项全部成立(含 4 项教学标注错误 + 步数保险丝从未生效) |
| 09-11 | 补第三道墙用例 | 第二道墙本身是坏的:set_max_steps(10_000_000) 硬编码抹掉会话配置 ⇒ 保险丝从未生效;配置静默丢弃、无回显 |
| 09-11 | 打通 .in 注入 |
29 个 .in 从未使用 ⇒ K&R 输入路径用例长期是"两侧都无输入的虚假 match" |
| 09-11 | C23 探针 | 浮点字面量 float 建模错误(C89 级)+ 浮点比较 epsilon 容差(0.1+0.2==0.3 判真)——基础语义错误存活了全部历史防线 |
| 09-12 | 签字回放 S1–S5 | 5 个引擎缺陷(越窗 seek 负下标无限分配 / 锚点裁剪 / 重放区间排他 / 断点双层暂停 / 入口步误标递归) |
| 09-12 | 词汇闭合防线上线首日 | 3 条词汇在真实程序里不可达(判定顺序错误) |
| 09-12 | 产物新鲜度门禁 | 防线可能在陈旧二进制上假绿(修复 18228f5) |
| 09-12 | 运行时观察 | seek 泄漏复发(首次曾吃满 63.6GB 物理内存 + 33.9GB 页面文件);第二次事故零归档 ⇒ 见 INCIDENTS/ |
五条防线全部是 stdout 行为等价验证,教学内容正确性零防线——P0-1(冒泡趟数概念教反)/ P0-2(24 步越界描述)/ P0-3(同 payload 两套标注矛盾)全部由外部审查发现,防线一条没抓到。stdout 是对的,教的是错的;对教学引擎而言这比崩溃严重。
1.2 判据 J9:防线自身的防线
脚本的埋雷记录为 0 时,其报的"全绿"不得作为任何结论的依据。 每个判定型脚本必须留一条"注入必然违反 → 必须变红"的实证记录。台账见 脚本埋雷验证记录.md。
依据:裁定 §13.2 实测 7 个"表面正确"实例,共同结构 = 通过的语义是"脚本自己没崩"而非"被检查对象正确"。已证实的空转形态包括:只测 happy path、known 白名单空转条目、闸的真值取自缓存、--max-age 超龄时 drift 归零当通过。
1.3 人审的位置
不在逐行读码,而在机器防线的结构性盲区上。 公开可查的两次实锤:
- 一次对覆盖面的质询(2026-10-07)直接照出 4 条既有注释 Rust 病(含口径自相矛盾、头注与实现不符)——逐条登记在 issue #47 评论(issuecomment-6029499633),归批五·写法清理。
- 一行真机代码(
int main{,缺参数括号)在全部防线绿灯之下抓出 parse 层 error recovery 缺失——单病多报致一屏红,后立案 #48。
另有一次探针复用直接推翻既有结论:复用某性能工程改一个硬编码再跑,发现"raise 是热路径性能正向变更"只在低失败率成立——全失败时反慢 1.35×,优势随失败率衰减至反转。该结论已带条件落档(MoonBit迁移总计划.md §10.5 G-3 行)。
二、纪律 ↔ 来源事故
AGENTS.md 的 13 条全域纪律中,能指出对应事故的:
| 纪律 | 来源事故 |
|---|---|
| #3 实测大于脑测、统一真相来源 | 防线真值口径不一(本侧历史输出 vs Clang 实跑在输出上无区别);oracle 退役后 A/B 级锚点真值整体降级而闸不自知 |
| #4 诚实记录,禁改测试预期值粉饰 | 语料长期存在"两侧都无输入的虚假 match";教学标注 4 项错误由外部审查发现 |
| #5 红→绿纪律 | 保险丝从未生效、第二道墙本身是坏的(修缺陷先写会失败的用例) |
#7 文档体系:CHANGELOG [Unreleased] 全文唯一一段、只追加 |
曾堆出四段重复 [Unreleased] 致防线计数多版本并存,agent 引用即幻觉(AGENTS.md 自述) |
| #8 判定型脚本默认 Go | 全仓 103 处 UTF-8 样板,且已发生三类实际事故(Windows GBK 炸中文 / 正则吞中文注释污染用例名 / BOM 干扰 clang 对照) |
| #9 工具陷阱五条 | 实测(| head SIGPIPE 杀编译器、管道 $? 是尾命令退出码、哨兵先证红、基准须校验和逐位一致、Windows 路径双兼容) |
| #11 MoonBit native 默认 clang、放弃 MSVC | 构建悬崖:MSVC 在高优化级别下于单个平坦初始化函数上病态慢(全量分钟级 vs MOON_CC=clang 秒级) |
#13 .json.mbt 数据真相源纪律 |
.json 写坏仍能通过下游 Go 闸门 ⇒ 不接 moon 静态检查 = 只换载体不换保护 |
来自事故但不进 AGENTS.md 的(AGENTS.md §当前阶段明文"勿堆时点事实",故此类留本档):
| 纪律 | 来源事故 |
|---|---|
| 事故留痕(任何 GB 级资源事故必须归档) | 第二次 seek 泄漏零留痕——无报告、无 CHANGELOG、无复现用例;「没被记录的事故,连"发生过"都不存在」 |
| 规模 realism(压力用例必须 ≥ 真实语料上界) | "几十步的小程序永远到不了泄漏量级" |
| 保险丝可触发性义务 | 三形态失效实锤:死代码 / 口径错(宏预算数 token 不数字节)/ 只写不读(步数保险丝曾被硬编码抹掉) |
| 独立测量(RSS/峰值由驱动侧测,不信被测代码自报) | 被测物自报口径不可信 |
| 口径分列(match / vitro_better / known_issue 不得混算) | "约定通过"曾被混入"完全匹配" |
| 合成靶料效力边界(禁以引擎自产模式单源自证) | 2 条真实现场 4 个问题仅 1 个被现有链路接住——真实失败形态已证明超出当前模式空间 |
| 产物新鲜度门禁 | 陈旧二进制假绿;漏重建被测 exe 曾给出 45/45 全同的假 SAME(重建后真实分叉 26/45) |
真 NUL 卫生闸(source_hygiene) |
测试文件含真 NUL 致 git 判二进制,15KB 黑盒测试的 diff 不可见 |
| 已知豁免条目双向对账(防僵尸条目) | known 白名单空转条目(已转绿的用例仍挂在豁免表里,会静默降级回归) |
三、权限与授权
- AI 在本仓没有独立落案权:每一笔 commit 须所有者当次明确授权(授权仅当次生效、不继承),push 恒需单独授权。"未经允许禁止提交"不是措辞,而是贯穿全部工作日志的执行事实——每份日志结尾必标"未提交(遵循项目规范)"或"已提交(用户授权后)"。
- 授权是逐次的、可细分的:所有者可按内容切分(如"修订完后提交;月兔部分不提交"),agent 不得自行扩大授权范围。
- 否决权与收编权对等:AI 的方案提议同样会被驳回,理由留档(见下节)。
四、否决与撤回档案
收编权的另一面是驳回权。 已留档的否决/撤回:
| 对象 | 结果 | 载体 |
|---|---|---|
| 整体 C 重写提议 | 多轮论证驳回(含对冲数学论证);后续同类提议沿用同一逻辑被驳 | docs/archive/ARCHIVE_Vitro架构审阅报告v1_20260921.md §9.11;kimicc外部参考调查报告20260926.md 引"第三轮驳回" |
| 分而自治(建语言中间量 / 后端多语言协作) | 先判反模式 → 撤回并重写判据 → 最终降级为"已评估、暂不采纳",只保留两项产物 | Vitro架构审阅报告v2.md §9.9 / §9.8 |
| 语言选型评审结论(三条) | 全部撤回——① JIT 归因(平台约束被写成语言约束)② 删 JIT ③ 教学语言顺序;另修正"脚本选 Go 是排除法"的表述 | 工作日志 2026-09-15 |
| 一个子项目的独立成仓 | 立项当日改判废弃(上午建仓 → 同日中午改判并入主仓子目录) | 工作日志 2026-09-30 |
| 3D 场景截图导出方案 | 关键否决(生成方通常无浏览器) | 工作日志 2026-09-15 |
| 源文件改写致产物形态错 | 更名提交中产物被"文本替换而非重生成" —— 流程教训入 CHANGELOG | 提交 fd0c1cf |
"已评估、暂不采纳"不是遗忘:被否的方案连同判据一起留档,防止同一提议重复开启。
五、查证指引
本档每条都指向可核对的载体,读者可按需回源:
| 想核什么 | 去哪 |
|---|---|
| 某条纪律的原文 | AGENTS.md 全域纪律 / moonbit/AGENTS.md;机制表见 统一整备路线图.md §4 |
| 某次提交是否经深度审阅 | 提交信息是否带署名——未署名仅代表浏览过,不构成背书 |
| 某个"为什么这么做 / 为什么不那么做" | 源码注释(130+ 处)→ Issue("拍板"节、批次施工表)→ 07-质量与裁定/ 裁定文档 → docs/archive/(历史留痕,不代表现行口径) |
| 事故的峰值与根因 | INCIDENTS/ |
| 工具链的确定性陷阱 | skill references/04-工具链与踩坑.md |
| 判定型脚本是否有牙 | 脚本埋雷验证记录.md(J9 台账) |
| 已知差异的现行全表 | 已知限制与差异.md(机器单源 = scripts/diff_ledger/ledger.json) |
残留缺口(诚实登记):本档素材主要来自项目工作日志,而工作日志本身不入库(被 .gitignore 覆盖)。因此上表"工作日志"一列的部分事件,仓库内读者目前只能通过本档转述了解;如需直读原件,须由所有者另行决定是否落档。