OBLITERATUS Gate 3 覆盖率基线报告解析:从 75.68% 仓库语句覆盖到 95% 变更行硬性下限的质量门槛体系
【免费下载链接】OBLITERATUSOBLITERATE THE CHAINS THAT BIND YOU项目地址: https://gitcode.com/GitHub_Trending/ob/OBLITERATUS
导读
本文以 OBLITERATUS 仓库中 Gate 3 increment 1 覆盖率报告(.aiwg/testing/coverage-report.md)为主体,系统解析该项目"以测试深度为门槛"的质量治理体系:报告记录于 2026-08-15,对应规范提交256c39ea6a492749a4db44146830e9d78fd3fed8,基准为8456e52bf8604a72ec6cfcc1ab71cbf46c90e1e7,采用 coverage.py branch JSON v3 格式。读完本文,你将掌握:仓库级与"成熟 CPU 范围"两级覆盖率指标的计算口径、从 90% 提升到 95% 的不可变变更行下限如何在策略文件、校验脚本与 CI 工作流中三处一致落地、以及为什么"退出标准仍开放"而"本轮通过"可以同时成立。
一、报告定位:Gate 3 增量 1 在整个测试计划中的位置
1.1 Gate 3 是什么
OBLITERATUS 的质量治理并非简单的"测试越多越好",而是一套分层递进的测试深度门禁(gate)体系。根据 .aiwg/testing/master-test-plan.md 的描述,整个计划依次经过:
- 基础锁定:Python 3.10–3.12 密封矩阵、wheel/sdist 安装冒烟、精确基准覆盖率对比、90% 变更行下限、风险地图、质量策略、重复与变异证据、条件工作流、供应链作业;
- Wave B1(Gate 1):高风险 CPU 契约(研究/数值正确性、加载器与架构边界、持久化与破坏性操作、公共/远程契约、评估与研究输出);
- Wave B2(Gate 2):离线纵向切片(tiny-model CLI→加载器→流水线→检查点→评估器→报告)、故障恢复切片、确定性往返、并发/幂等、风险地图穷举;
- Wave C(Gate 3):属性测试、变异测试、确定性重放、回归深度,并将"开放式的改进方向"转换为下一个强制交付门禁。
Gate 3 的核心思想是:"测试数量不是成功指标",每个增量必须保护一个具名行为、在故意植入实现缺陷时失败,并至少改善下述维度之一:oracle 强度、故障路径覆盖、变异抵抗力、环境证据、确定性重放。
1.2 增量 1 的具体使命
本报告对应的增量 1 是一次纯测试基础设施增量(policy/test/docs only),其使命包括:
- 采纳 Gate 3 量化质量策略并刷新当期测量;
- 将不可变变更行下限从 90% 提升到 95%;
- 增加时长预算(duration budget)强制执行,不改变任何生产行为。
这一点从报告的"Changed production lines = Not applicable"一行可见一斑:由于本轮不触碰生产代码,生产变更行检查自然不适用,而两个被修改的策略/证据脚本则被单独审计,242 行可执行代码全部覆盖(100%)。
二、五维覆盖率指标表:口径、数值与门槛
报告给出了五组度量,这里逐行拆解其含义与口径:
| 范围(Scope) | Python 3.12 实测 | 强制下限(Enforced floor) | Gate 3 退出标准 | 状态(Status) |
|---|---|---|---|---|
| 仓库语句(Repository statements) | 75.68% | 75% | 80% | 通过下限;退出开放 |
| 仓库分支(Repository branches) | 61.72% | 60% | 65% | 通过下限;退出开放 |
| 成熟 CPU 语句(Mature CPU statements) | 92.71% | 92% | 94% | 通过下限;退出开放 |
| 成熟 CPU 分支(Mature CPU branches) | 81.55% | 80% | 84% | 通过下限;退出开放 |
| 变更生产行(Changed production lines) | 不适用(仅策略/测试/文档) | 95% | 95% | 通过 |
| 变更策略脚本行(Changed policy-script lines) | 100%(242/242 聚焦本地审计) | 95% | 95% | 通过 |
三个关键概念需要明确:
1. 三级阈值的层级关系。每个指标都有三层数值:实测值(本提交的真实测量)、强制下限(不可突破的底线,Gate 3 期间只能收紧不能放松)、Gate 3 退出标准(要"结束测试暂停、恢复普通特性开发"必须达到的量化目标)。报告表明,增量 1 的实测值全部高于下限但低于退出标准,因此状态是"PASS floor; exit open"——本提交合法通过,但 Gate 3 大门仍然敞开,需要后续有界增量逐步逼近退出标准。
2. "成熟 CPU 范围"(Mature CPU Scope)是什么。根据 ci/test-quality-policy.json 中的mature_cpu_scope定义:范围涵盖"除那些本质上需要真实模型运行时、外部服务、交互式 UI 或远程/硬件执行的边界模块之外的所有源码模块"。该文件列出了 15 个被排除的模块,每个都带boundary(边界类型)、rationale(理由)和conditional_gate(对应的条件门禁),全部挂接条件测试问题 #71:
- model-runtime:
abliterate.py、auto_obliterate.py、bayesian_optimizer.py、informed_pipeline.py、lora_ablation.py、sweep.py(未覆盖路径涉及真实 transformer 架构的加载、变异、生成与保存); - network-service:
bestiary_sync.py、models_client.py、watchtower.py(依赖外部 BESTIARY 目录 HTTP 端点或 Hugging Face 服务响应); - external-evaluator:
evaluation/heretic_eval.py、tourney.py(依赖下载的基准数据、分类器、实时模型与 lm-eval); - interactive-ui:
interactive.py、local_ui.py、ui_watchtower.py(依赖交互终端或 Gradio 浏览器环境); - remote-execution:
remote.py(依赖具备凭据的远程主机进行 SSH 发现、传输、执行、取消与结果同步)。
排除策略的意义在于:这些路径的未覆盖并非"测试偷懒",而是其执行前提客观上无法在纯 CPU 的 CI 沙箱内成立;它们被显式映射到conditional-tests条件工作流(见 .github/workflows/conditional-tests.yml),而不是被 mock 伪装成已覆盖。这也是"成熟 CPU 语句 92.71%"远超"仓库语句 75.68%"的根本原因——前者把 15 个边界模块剔除后再测量。
3. 变更行审计为何要做两次。报告把"变更生产行"(Not applicable)与"变更策略脚本行"(100%,242/242)分开:普通仓库覆盖门槛测量的对象是obliteratus包本身,但本轮改动的两个脚本(scripts/check_quality_policy.py 与证据脚本)不在包内,因此审计直接对这两个脚本的全部可执行变更行做聚焦本地测量,确认 242 行全部被覆盖。
三、95% 变更行下限:策略、校验器、CI 的三处一致落地
报告强调:95% 的变更行下限"一致存在于ci/test-quality-policy.json、scripts/check_quality_policy.py、.github/workflows/ci.yml、测试与操作员文档中"。逐一验证如下:
3.1 策略文件中的基线
ci/test-quality-policy.json 的minimums对象包含七项:
{ "schema_version": 1, "minimums": { "repository_statement": 75.0, "repository_branch": 60.0, "changed_line": 50.0, "mature_cpu_statement": 94.0, "mature_cpu_branch": 84.0, "mutation_score": 85.0, "warning_budget": 0 } }注意这里有两套数值并存:minimums中changed_line: 50.0是策略文件的基线默认值,而 Gate 3 的当前强制下限 95%通过校验器内置的BASELINE_FLOORS与 CI 调用参数共同生效。策略文件同时承载critical_cpu_paths(13 个关键 CPU 路径,如 obliteratus/runtime_contracts.py、obliteratus/persistence_contracts.py、obliteratus/models/loader.py、obliteratus/cli.py 等)与test_evidence(证据保留 90 天、flake 窗口 30 天、最大隔离期 30 天、时长预算)。
3.2 校验器中的"不可变下限"逻辑
scripts/check_quality_policy.py 第 15–23 行定义了BASELINE_FLOORS:
BASELINE_FLOORS = { "repository_statement": 75.0, "repository_branch": 60.0, "changed_line": 50.0, "mature_cpu_statement": 94.0, "mature_cpu_branch": 84.0, "mutation_score": 85.0, "warning_budget": 0.0, }validate_policy()(第 474 行起)对每一项执行核心校验:策略文件中的最小值若低于基线且没有显式审核过的例外(threshold_exceptions),直接判失败。例外必须满足四重约束(_valid_exception,第 28–45 行):new_value与当前值一致、有非空reason、approved_issue以https://github.com/elder-plinius/OBLITERATUS/issues/开头、且有非空expires过期日期。这套机制把"下限只能单向收紧"从口头约定变成了机器可执行的硬约束。
同一脚本还实现了成熟的 CPU 范围测量(measure_mature_cpu_scope,第 538 行起):从 coverage.py JSON 的files对象中剔除exclusions列出的路径后,累加语句/分支与已覆盖数,计算出line_percent与branch_percent,再与minimums中的成熟 CPU 下限比对(validate_mature_cpu_scope,第 574 行起)。命令行入口(main,第 599 行起)支持三个参数:
python scripts/check_quality_policy.py \ --policy ci/test-quality-policy.json \ --coverage test-results/coverage-py3.12.json \ --evidence test-results/test-trend.json--policy:必填,质量策略 JSON;--coverage:可选,coverage.py JSON 报告,用于成熟 CPU 范围测量;--evidence:可选,测试趋势证据,用于时长预算校验。
3.3 CI 工作流中的实际调用
.github/workflows/ci.yml 在多处调用该校验器:
- 第 274–275 行:
python scripts/check_quality_policy.py --policy ci/test-quality-policy.json(仅校验策略结构本身); - 第 458–462 行:
--policy ... --coverage test-results/coverage-py${{ matrix.python-version }}.json(在 Python 3.10/3.11/3.12 矩阵的每个版本上强制成熟 CPU 范围下限); - 第 484–485 行:随证据文件再次执行。
check_coverage_thresholds.py(scripts/check_coverage_thresholds.py)则负责仓库级全局下限、关键文件下限(--min-file PATH=PERCENT)与变更行下限(--min-changed,配合--base-ref用git diff --unified=0解析新增/修改行号,再与 coverage 报告中的executed_lines/missing_lines求交集计算)。报告中的"精确基准重放(exact-base replay)零行/零分支差异、零触及生产模块"正是该脚本比较 base 报告与 head 报告的结果。
3.4 测试与文档中的一致断言
.aiwg/testing/master-test-plan.md 明确写入"New or modified code must maintain at least 95% changed-line coverage"(新增或修改代码必须维持至少 95% 的变更行覆盖),且"被触及的模块不得丢失行或分支覆盖,除非 PR 记录理由并补充等价契约或条件证据"。测试侧,tests/test_quality_policy.py 会直接读取 CI 工作流 YAML 并断言mutate_only_covered_lines、超时常数、变异目标模块列表等内容,确保工作流配置本身被测试锁定,防止"门禁被悄悄改弱"。
四、版本差异说明:为什么覆盖率是一个区间而非单点
报告特别解释:不同 Python 版本下测量值略有差异,因为版本特定分支(version-specific branches)被不同地执行——仓库覆盖率的实际范围为语句 75.68–75.78%、分支 61.72–61.81%。这一细节提示读者:任何覆盖率数字都必须绑定测量环境(Python 版本、依赖锁定、运行种子)才有意义。
这与 .aiwg/testing/master-test-plan.md 中"Mandatory Python 3.12 lane: 2,119 tests passed, 9 conditional tests deselected by policy"的约束一致:条件测试由策略主动剔除,不计入默认门禁;重复性验证则要求同一测试集在三种不同文件顺序与哈希种子下全部通过(增量 1 之后的 Gate 3 最终报告中为 702 个测试 × 3 次全通过、零 flake)。
五、退出标准:从"PASS floor"到"exit open"再到达标
报告结论明确:Gate 3 的量化退出标准仍然开放。后续有界增量必须将仓库语句提升到 80%、仓库分支提升到 65%、成熟 CPU 语句提升到 94%、成熟 CPU 分支提升到 84%,且不得削弱上述任一强制下限。
随后的 .aiwg/testing/gate3-final-report.md(2026-08-16,规范提交42b30f7e5b8ee596b3b0b039b10af16f01deec1e)显示这一进程如期完成:
| 度量 | 增量 1 实测 | Gate 3 退出标准 | 最终达标值 |
|---|---|---|---|
| 仓库语句 | 75.68% | 80% | 83.49% |
| 仓库分支 | 61.72% | 65% | 71.04% |
| 成熟 CPU 语句 | 92.71% | 94% | 94.02% |
| 成熟 CPU 分支 | 81.55% | 84% | 84.54% |
| 变异得分 | — | ≥85% | 89.65%(1,844/2,057 杀死) |
最终报告同时记录了 8 个递进增量(从增量 1 的策略采纳,到增量 2 的数值/属性/变质 oracle(PR #102)、增量 3 的加载器/架构/量化决策契约(PR #103)、增量 4 的检查点故障注入与原子性(PR #104)、增量 5 的 BESTIARY/模型客户端/看塔人状态契约(PR #105)、增量 6 的锦标赛/交互/UI 决策缝(PR #108)、增量 7 的 tiny-model 纵向切片与量化存储语义(PR #109)、增量 8 的条件证据治理与同版本 CUDA Torch 覆盖层(PR #111)),以及"PR #111 通过不可变头部审计、八项强制作业全部通过、保留四个发布密钥签名"的评审完整性结论。
六、延伸:这套覆盖率体系如何被测试与复用
对想要复用或学习该机制的读者,仓库提供了完整的证据链:
- 策略定义:ci/test-quality-policy.json——最小值、关键 CPU 路径、成熟 CPU 排除清单(15 项,均含 boundary/rationale/conditional_gate)、测试证据(保留期、flake 窗口、隔离期、时长预算)。
- 校验实现:scripts/check_quality_policy.py——不可变下限、例外治理、成熟 CPU 范围测量、时长预算校验。
- 覆盖率门槛:scripts/check_coverage_thresholds.py——全局/关键文件/变更行/被触及模块无回归四重门槛,含
--base-ref、--base-report、--touched-module-no-regression、--min-changed等参数。 - CI 集成:.github/workflows/ci.yml——在 3.10/3.11/3.12 矩阵中对每次 PR 强制执行;.github/workflows/conditional-tests.yml 承载排除模块对应的条件环境证据。
- 测试锁定:tests/test_quality_policy.py——直接解析工作流 YAML 与 pyproject.toml 的 mutmut 配置,断言变异目标、超时与线程环境变量,防止门禁被悄悄弱化。
- 程序上下文:.aiwg/testing/master-test-plan.md、.aiwg/testing/gate3-final-report.md 提供完整波浪计划、退出标准、最终结果与证据位置。
值得强调的是其核心设计哲学:覆盖率数字只有绑定"测量范围(仓库 vs 成熟 CPU)、测量环境(Python 版本/种子)、审计对象(生产代码 vs 策略脚本)与不可变下限"四个维度才有意义。该机制不追求单一百分比最大化,而是用"下限单向收紧 + 例外需显式审核 + 条件环境显式豁免但不伪装覆盖 + 证据新鲜度受控"的组合拳,让每一次 PR 合并都留下可重放的量化证据——这正是"测试深度门禁"区别于"测试数量竞赛"的关键。
【免费下载链接】OBLITERATUSOBLITERATE THE CHAINS THAT BIND YOU项目地址: https://gitcode.com/GitHub_Trending/ob/OBLITERATUS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考