docs/current/07-质量与裁定/协作纪律与事故档案.md
GitHub ↗
当前有效

协作纪律与事故档案

3231 字·约 9 分钟 阅读 2026-10-10 17:07

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 覆盖)。因此上表"工作日志"一列的部分事件,仓库内读者目前只能通过本档转述了解;如需直读原件,须由所有者另行决定是否落档。