Skip to content

The Verification Gate has 0 successful runs in 60 (six weeks) — it times out at 30 min, and main requires no checks #353

Description

@avrabe

The Verification Gate has not produced a single green run in six weeks

60 runs sampled, 2026-07-15 → 2026-08-25:

conclusion count
cancelled 57
failure 3
success 0

The gate that runs TEST-RULE-SOLVER-DIFFERENTIAL — the artifact whose green run is the no-divergence assertion between Z3 and the certificate-checked ordeal engine — has never been green in the sampled window.

It is timing out, not being superseded

The obvious reading is cancel-in-progress: true killing runs as new pushes land. That is not what is happening: the concurrency group is ${{ github.workflow }}-${{ github.head_ref || github.ref }}, which is per-branch, so separate PRs cannot cancel each other.

Durations of the twelve most recent runs, against timeout-minutes: 30:

30.5  39.2  32.2  31.9  30.4  36.2  41.1  55.5  63.0  102.5  48.0  33.4

Every one exceeds the budget. The floor is 30.4 minutes. The job cannot finish.

The workflow's own comment predicted this — the default filter is narrow because a wider one "would re-run dozens of cargo test invocations and blow the 30-minute job timeout." The filter now matches 23 artifacts and blows it anyway.

The check itself is fine — that is what makes this worth fixing rather than deleting

From run 31727742734, the last one that reached a verdict:

matched 23 artifacts
[RUN ] TEST-RULE-SOLVER-DIFFERENTIAL
[ OK ] TEST-RULE-SOLVER-DIFFERENTIAL
passed:  21
failed:  2

The differential ran and passed. The run was marked failure because two unrelated artifacts failed (loom optimize pipeline smoke, measure_corpus). So the solver cross-check is riding behind 22 other artifacts, and inherits both their runtime and their verdict.

Why nobody noticed

repos/pulseengine/loom/branches/main/protection reports:

{ "required_checks": [], "strict": true }

The required-status-checks list is empty, so the Verification Gate is advisory. PRs merge freely regardless — including #352, the v1.4.1 release PR, whose two Verification Gate runs were cancelled at 30.5 and 39.2 minutes. v1.4.1 shipped this morning without this gate ever going green.

That is the same shape as #332: something reports a state it did not establish. #332 was a check that could not go red; this is a check that cannot go green, on a board where nothing reads it.

Suggested shape (not prescriptive)

The cheap fix is to stop coupling the solver differential to everything else:

  1. A dedicated job for the differential aloneLOOM_VERIFY_BACKEND=both cargo test --release --lib -p loom-core --features verification -- test_verify_all_rules. It fits inside a small budget because it is one test binary, not 23 artifacts, and it is the one whose green run carries a claim.
  2. Raise timeout-minutes for the broad rivet-driven sweep, or split it by tag so each slice fits. A 30-minute budget that the minimum observed run exceeds by 24 seconds is not a budget.
  3. Then make the differential job required on main — an advisory gate with a six-week non-green record is indistinguishable from no gate.

Two adjacent notes

  • There is a second reason a cadence job would help: the differential only fires when a PR happens to touch loom. ordeal is exact-pinned, but Z3 arrives through Z3_SYS_Z3_HEADER: /usr/include/z3.h from apt libz3-dev, unpinned, and drifts under the runner image. kiln/kani-verification.yml (weekly) is the shape.
  • The scope limit stated in TEST-RULE-SOLVER-DIFFERENTIAL's own description is worth keeping visible: this is the rule verifier only; the core translation validator has not been migrated. The artifact says so honestly and the release notes should keep doing that.

Measured 2026-08-26. required_checks and durations from the GitHub API; the run log excerpt from the linked run.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions