standards-build: the proof gate turned a verified proof into a failure #599

Merged
dcharlot merged 2 commits from ci/proof-gate-sigpipe into main 2026-11-03 15:17:18 -05:00

2026-11-03

Transaction Science
standards-build: the plan job decided what to build from the longest queue
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 5s
standards workspaces build + test / joule-ui-rs (joule-ui/joule-ui-rs, joule-ui-rs, linux) (pull_request) Successful in 29s
standards workspaces build + test / sense-rs (sense/sense-rs, sense-rs, linux) (pull_request) Successful in 34s
standards workspaces build + test / proof-rs (proof/conformance/v1/joulespec.toml, proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Successful in 1m2s
standards workspaces build + test / arl-rs (arl/arl-rs, arl-rs, linux) (pull_request) Successful in 1m11s
standards workspaces build + test / jcp-rs (jcp-conformance, jcp/jcp-rs, -p jcp-energy --features nvml, jcp-rs, linux) (pull_request) Successful in 1m17s
standards workspaces build + test / joulespec-rs (true, joulespec/joulespec-rs, true, joulespec-rs, linux) (pull_request) Successful in 58s
standards workspaces build + test / pool-rs (pool/pool-rs, pool-rs, linux) (pull_request) Successful in 1m29s
standards workspaces build + test / sandbox-rs (sandbox-conformance, sandbox/sandbox-rs, -p sandbox-tee --features amd-kds,intel-pcs, sandbox-rs, linux) (pull_request) Successful in 1m31s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 1m49s
standards workspaces build + test / smart-byte-rs (smart-byte/smart-byte-rs, smart-byte-rs, linux) (pull_request) Successful in 2m19s
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Successful in 2m22s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 6m3s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 1m34s
standards workspaces build + test / joulespec-proofs (joulespec/joulespec-rs, joulespec-proofs, true, macos) (pull_request) Successful in 1m23s
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Successful in 48s
standards workspaces build + test / map-rs (map-conformance, map/map-rs, map-rs, linux-arm64) (pull_request) Successful in 30s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 13m21s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 30s
standards workspaces build + test / openpay (openpay, openpay, linux-arm64) (pull_request) Successful in 1m47s
standards workspaces build + test / aac-rs (aac-conformance, aac/aac-rs, aac-rs, linux-arm64) (pull_request) Successful in 34m16s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Successful in 43m54s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 59m18s
`plan` is the job every other leg of this workflow declares in `needs` -- it
runs `scripts/standards-touched.py` and emits the matrix. It ran on
`linux-arm64`, which is the label the fleet cannot spare: measured while this
was queued, `linux-arm64` was 282 runs deep and `linux` was idle on a 20-core
host. So the small job that decides what to build waited behind the heavy jobs
it was deciding about, and every leg of the build waited on it.

It is pure Python over a git diff and needs no particular architecture, so it
moves to `linux`.

This is one line of the same fix #598 applies to all 55 path gates in the
repository, taken here because the proof-gate fix in this pull request cannot
land without it: that fix unblocks every branch whose proofs leg currently
turns a verified proof into a failure, and it was itself sitting behind the
queue it needs to clear. #598 remains the general change; the two diffs are
identical on this line and merge as one.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-11-03 06:40:53 -05:00
Transaction Science
standards-build: the proof gate turned a verified proof into a failure
Some checks failed
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Failing after 2s
standards workspaces build + test / jcp-rs (jcp-conformance, jcp/jcp-rs, -p jcp-energy --features nvml, jcp-rs, linux) (pull_request) Failing after 3s
standards workspaces build + test / pool-rs (pool/pool-rs, pool-rs, linux) (pull_request) Failing after 2s
standards workspaces build + test / proof-rs (proof/conformance/v1/joulespec.toml, proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Failing after 2s
standards workspaces build + test / sense-rs (sense/sense-rs, sense-rs, linux) (pull_request) Failing after 2s
standards workspaces build + test / sandbox-rs (sandbox-conformance, sandbox/sandbox-rs, -p sandbox-tee --features amd-kds,intel-pcs, sandbox-rs, linux) (pull_request) Failing after 2s
standards workspaces build + test / joulespec-rs (true, joulespec/joulespec-rs, true, joulespec-rs, linux) (pull_request) Failing after 1s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 38s
standards workspaces build + test / joule-ui-rs (joule-ui/joule-ui-rs, joule-ui-rs, linux) (pull_request) Successful in 38s
standards workspaces build + test / arl-rs (arl/arl-rs, arl-rs, linux) (pull_request) Successful in 1m13s
standards workspaces build + test / smart-byte-rs (smart-byte/smart-byte-rs, smart-byte-rs, linux) (pull_request) Successful in 4m20s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Has been cancelled
standards workspaces build + test / aac-rs (aac-conformance, aac/aac-rs, aac-rs, linux-arm64) (pull_request) Has been cancelled
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Has been cancelled
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Has been cancelled
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Has been cancelled
standards workspaces build + test / joulespec-proofs (joulespec/joulespec-rs, joulespec-proofs, true, macos) (pull_request) Has been cancelled
standards workspaces build + test / map-rs (map-conformance, map/map-rs, map-rs, linux-arm64) (pull_request) Has been cancelled
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Has been cancelled
standards workspaces build + test / openpay (openpay, openpay, linux-arm64) (pull_request) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
The gate read:

    echo "$out" | grep -q '^VERIFICATION:- SUCCESSFUL' || { ...; exit 1; }

under `set -o pipefail`. `grep -q` exits at its first match, `echo` then dies of
SIGPIPE (141), and pipefail promotes that to the pipeline's status -- so **a
found match becomes a failure**. Whether it bites is a race on how much of
`$out` fits the pipe buffer, which makes it a function of the harness's output
size, not of the proof.

Caught live on #598, whose branch does not carry this fix:

    == widening_a_set_can_only_lower_its_cap ==
     ** 0 of 336 failed (1 unreachable)
     ** 4 of 4 cover properties satisfied
    VERIFICATION:- SUCCESSFUL
    widening_a_set_can_only_lower_its_cap did not verify

The proof verified and the gate said it did not. The 15-property harness
immediately above it passed in the same run, which is the size dependence
showing itself directly.

It was previously measured at about 1 in 20 against a 191 KB output, and that
rate is now known to be the wrong way to describe it: at 336 properties it is
not intermittent, it is reliable. So this is a gate that became *less* reliable
as the thing it guards grew -- the failure mode a proof gate can least afford,
because its output reads as "the proof broke".

A here-string has no writer to kill. The same change is also carried inside the
Rust 1.99.1 pull request; it is split out here because that one cannot land
quickly, and every proofs run until it does is subject to this.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-11-03 03:40:09 -05:00