Measured 2026-08-03, and the gap is not where it looks.
| what |
lines covered |
cargo llvm-cov --lib --bins — what the CI job can see |
79.39% |
cargo llvm-cov --all-features — the full suite |
91.52% |
podup already clears the org standard's 90%. It just clears it in a place nothing checks.
Why the job sees less
The rust-ci coverage job runs on a plain runner with no Podman. Every integration test begins with if podman().await.is_none() { return; }, so they all skip, and with them the coverage of dispatch.rs, dispatch/rest.rs, autostart_cmd.rs and the command entry points — all of which read 0.00% under --lib --bins and are exercised heavily by the suite that cannot run there.
The gate was set to 75 against that 79. #1400-style slack: four points could be lost silently. That part is fixed in the accompanying commit by ratcheting to 79, which locks in what holds.
What is actually missing
Nowhere enforces 90. The lane that can run the integration tests — podman-lane.yml, the nested-virt Fedora matrix — runs them for pass/fail and measures no coverage at all. So the org standard's number is satisfied by the code and checked by nothing.
Options, roughly in order of cost:
- Measure coverage in the
podman-vm lane and gate at 90 there. Correct, and it is the only place the number means what the standard means. Cost: cargo llvm-cov inside the VM matrix, and a decision about which leg owns the gate when the two majors disagree.
- Keep two gates, named for what they measure. The current job stays a subset floor; a second one carries the real number. Honest, and it doubles the surface to maintain.
- Exclude the untestable-without-Podman files explicitly and gate the remainder at 90. The testing standard allows this — "if a file is genuinely untestable (thin glue), exclude it explicitly and justify the exclusion" — but
dispatch.rs is not untestable, it is untestable here, which is a different claim and a worse reason to exclude something.
I would not do the third.
No VM needed to decide; the lane work needs one to verify.
Measured 2026-08-03, and the gap is not where it looks.
cargo llvm-cov --lib --bins— what the CI job can seecargo llvm-cov --all-features— the full suitepodup already clears the org standard's 90%. It just clears it in a place nothing checks.
Why the job sees less
The
rust-cicoverage job runs on a plain runner with no Podman. Every integration test begins withif podman().await.is_none() { return; }, so they all skip, and with them the coverage ofdispatch.rs,dispatch/rest.rs,autostart_cmd.rsand the command entry points — all of which read 0.00% under--lib --binsand are exercised heavily by the suite that cannot run there.The gate was set to 75 against that 79. #1400-style slack: four points could be lost silently. That part is fixed in the accompanying commit by ratcheting to 79, which locks in what holds.
What is actually missing
Nowhere enforces 90. The lane that can run the integration tests —
podman-lane.yml, the nested-virt Fedora matrix — runs them for pass/fail and measures no coverage at all. So the org standard's number is satisfied by the code and checked by nothing.Options, roughly in order of cost:
podman-vmlane and gate at 90 there. Correct, and it is the only place the number means what the standard means. Cost:cargo llvm-covinside the VM matrix, and a decision about which leg owns the gate when the two majors disagree.dispatch.rsis not untestable, it is untestable here, which is a different claim and a worse reason to exclude something.I would not do the third.
No VM needed to decide; the lane work needs one to verify.