回归、ISO 与 CI
这个仓库对“验证”的定义比较窄:一个主张必须绑在一条能重跑的命令上,输出对得上才算数。所以下面这些不是“测试通过率”,而是可复现的判据。
主回归
python tools/fujoregress.py # 59/59 (TCG) python tools/fujoregress.py --accel whpx # 49/51(平台限制)
| 口径 | 结果 | 差额是什么 |
|---|---|---|
| TCG 纯软件模拟 | 59/59 | 参考口径。全部用例在软件模拟下自洽。 |
| WHPX / KVM 硬件虚拟化 | 49/51 | 两处平台限制:传统 8259 路径需要 kernel-irqchip=off;INIT/SIPI 注入被拒绝。是差异,不是失败。 |
为什么两个口径不同还都写出来:
只报 59/59 会隐去平台差异;只报 49/51 会让参考口径看起来有问题。两个都写、并说明差额的来源,才是完整的事实。
ISO 自验证
配套文档 docs/127-iso-verify.md 的写法值得单独一提:它逐行给出“这次启动证明了什么、没有证明什么”。这不是结果表,而是证据的边界声明——一个绿色勾并不能说明全部,说明它能说明哪一部分才有用。
静态门禁
| 检查 | 防的是什么 |
|---|---|
| tools/fuai_contract_check.py | 契约漂移:spec 与两个实现的 opcode / 签名 / 帧布局对不上。 |
| tools/potato_test.py / potato_cross.py | 形式对象规范被放宽:33 条反例必须仍被拒,两个实现判定必须一致。 |
| tools/lom_audit | 编译器偷偷不导出形式对象:每个示例都必须带一份逐字节一致的对象。 |
| ci.py --static-only | 上面这些一起跑,作为提交前的静态闸门。 |
这条纪律的由来:
W46 反证轮发现,最伤人的弱点不是机制被绕过,而是数字口径不可查(同一指标两种算法对不上)。从那以后,“一键复现”从加分项变成了硬要求。细节见 可复现性纪律。