Skip to content

feat(verify): census the whole-crate verification steps (weak evidence, #262) - #344

Open
avrabe wants to merge 4 commits into
mainfrom
feat/verification-weak-evidence-census
Open

feat(verify): census the whole-crate verification steps (weak evidence, #262)#344
avrabe wants to merge 4 commits into
mainfrom
feat/verification-weak-evidence-census

Conversation

@avrabe

@avrabe avrabe commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Verify-Filter: (has-tag "oci")

Scoped deliberately: the full 156-artifact sweep now runs to ~90 min, which is
the job's own timeout-minutes: 90, so it fails about half the time (this PR has
already been killed at 1h30m21s). (has-tag "oci") matches 4 artifacts — a
real, non-empty set that exercises this change (whole-crate steps and bench-only
skips both appear in it). The census itself was verified locally on the full
artifact set. The timeout-vs-duration mismatch is tracked separately.

The warn half of #262’s warn-then-fail proposal. Reports; does not fail.

Why now

The whole-crate step count is regressing: ~54 at the 2026-07 traceability audit, 70 measured today. Without a signal it drifts back up as fast as it is worked down.

What a whole-crate step costs

cargo test -p X with no test named asserts "something in this crate passes", not "this test verifies this requirement".

It is also the one step shape that cannot detect evidence drift. The existing guard (cargo_tests_passed(...) == 0, pulseengine.eu#89) needs a name to check against — so under a whole-crate step, a test that is renamed, deleted, or #[ignore]d leaves the step green.

That is not hypothetical. FV-FALCON-NOTCH-001 runs cargo test -p falcon-core as its closed-loop evidence for NOTCH-P01, and the only notch test in that crate is #[ignore]d pending #290. The step runs 60 unrelated tests and reports PASS. Reported on #290.

Behaviour

  • Annotates each whole-crate step inline
  • Prints a census at the end — including on green runs, because a gate that only speaks when it fails cannot show a backlog shrinking
  • Pass/fail is unchanged; exit code is unchanged
$ python3 scripts/run-falcon-verification.py --filter (has-tag "wasm-pipeline")
  [   PASS] (0.16s) FV-FALCON-PIPELINE-001: cargo test -p relay-mix-quad — WHOLE-CRATE step: names no test (#262)
  [   PASS] (0.13s) FV-FALCON-PIPELINE-001: cargo test -p relay-rate — WHOLE-CRATE step: names no test (#262)
  [   PASS] (0.11s) FV-FALCON-PIPELINE-001: cargo test -p falcon-sitl-hover — WHOLE-CRATE step: names no test (#262)

# 3 whole-crate step(s) — weak evidence, name the verifying test(s) (#262):
EXIT=0

Why warn and not fail

The backlog is 70 steps; failing immediately would block unrelated work. Convert to a hard failure once it is worked down — #343 starts that (70 → 65).

Authored during the 2026-08-06 GitHub Actions outage; checks dispatch when Actions recovers.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG

#262)

The whole-crate step count is REGRESSING: ~54 at the 2026-07 traceability audit,
70 measured today. #262 anticipated this and proposed warn-then-fail; this is the
warn half.

A whole-crate `cargo test -p X` step asserts "something in this crate passes",
not "THIS test verifies THIS requirement". It is also the one step shape that
cannot detect evidence drift: the existing guard (`cargo_tests_passed(...) == 0`,
pulseengine.eu#89) needs a name to check against, so under a whole-crate step a
test that is renamed, deleted, or `#[ignore]`d leaves the step green.

That is not hypothetical. FV-FALCON-NOTCH-001 runs `cargo test -p falcon-core`
as its closed-loop evidence for NOTCH-P01, and the only notch test in that crate
is `#[ignore]`d pending #290 — so the step runs 60 unrelated tests and reports
PASS. Reported on #290.

Reports, does not fail. The backlog is 70 steps; failing now would block
unrelated work. The goal is to stop the count drifting up, and to make it
visible on GREEN runs — a gate that only speaks when it fails cannot show a
backlog shrinking. Convert to a hard failure once the backlog is worked down.

Verified locally:

  $ python3 scripts/run-falcon-verification.py --filter '(has-tag "wasm-pipeline")'
    [   PASS] (0.16s) FV-FALCON-PIPELINE-001: cargo test -p relay-mix-quad — WHOLE-CRATE step: names no test (#262)
    [   PASS] (0.13s) FV-FALCON-PIPELINE-001: cargo test -p relay-rate — WHOLE-CRATE step: names no test (#262)
    [   PASS] (0.11s) FV-FALCON-PIPELINE-001: cargo test -p falcon-sitl-hover — WHOLE-CRATE step: names no test (#262)
  # 3 whole-crate step(s) — weak evidence, name the verifying test(s) (#262)
  EXIT=0

Pass/fail behaviour is unchanged: steps still PASS and the run still exits 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
@avrabe
avrabe enabled auto-merge (squash) August 7, 2026 19:05
avrabe and others added 2 commits August 8, 2026 08:24
The gate reads Verify-Filter from github.event.pull_request.body — the EVENT
payload — so editing the body alone does not change what a queued run sees. A
synchronize event is required. Squash-merge drops this commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
avrabe added a commit that referenced this pull request Aug 8, 2026
…350)

The sweep has grown into its own ceiling. Measured across one day, same
156-artifact sweep:

  #340  ~63m      success
  #344  1h30m21s  FAILURE — killed at timeout-minutes: 90
  #344  (earlier) cancelled
  #342  failed twice the same way
  #343  success twice

Variance now exceeds headroom, so a REQUIRED check is decided by runner load
rather than by whether anything is wrong. And a timeout surfaces as `fail`,
indistinguishable from a real failure unless you read the duration — which
already cost a diagnosis cycle. Worst of all, it was blocking the two PRs
meant to improve this gate (#342 fail-open fix, #343 sweep speedup).

Raising the ceiling does not weaken the gate: it is being KILLED, not failing.

Landing it here because this PR already owns this file and is itself blocked by
the timeout it fixes.

THIS IS A STOPGAP and the third reactive bump (60 -> 90 -> 150). The trend is
the real problem: 45m in July, >=90m now. #350 tracks it, and names the next
measurement — the compile-vs-test split ON the runner. The sweep spans 64
crates with 29 `--release` steps, so compilation is the likely dominant cost;
whole-crate -> named conversion (#343/#262) is right for traceability but,
measured, will not close a 30-minute gap on its own (the non-falcon-core
offenders run in 0-5s).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant