fix(ci): gazebo runs on every PR — the precondition for requiring it - #428
Merged
Merged
Conversation
…427) A required status check that does not RUN does not pass by default. It never reports, and the PR stays blocked forever. I promoted `Gazebo SITL (real gz bridge)` to a required context earlier today with its stated precondition met — five consecutive green runs on main, the wasm leg executing 6250 ticks and holding 0.01 m, bit-identical to native. It deadlocked every merge in the repo within minutes. PR #426 sat BLOCKED with ZERO failing checks, because it touched only `.github/workflows/kani.yml` and the path filter meant gazebo never triggered. Removing the context returned it to CLEAN instantly. The precondition I checked was "is this leg meaningful". The one that decides whether a context can be required is "does it report on EVERY pr", and those are different properties. This removes the `pull_request` path filter so the job always runs. Cost: about 7 minutes of runner time per PR, against the only gate in the repo that flies the actually-published wasm component through real physics and compares it to native bit for bit. That is cheap. NOT PROMOTING IT IN THIS COMMIT. The sequence is: land this, observe the job reporting on a PR that touches none of the old filter paths, THEN add the required context. Promoting on the strength of reasoning rather than evidence is exactly what caused the deadlock, and doing it again in the same day would be hard to explain. Worth naming the shape, because this repo now has both halves of it: #417 — a job that is SKIPPED but reports `success` verifies nothing while looking green. #427 — a job that is SKIPPED and reports nothing blocks everything. Same root: a gate whose workflow does not always run. The only shape safe to require is one that always runs and always reports. Refs #427. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #427. Does not promote the context — that is the follow-up, on evidence.
The rule this encodes
A required status check that does not run does not pass by default. It never
reports, and the PR stays blocked forever.
I promoted
Gazebo SITL (real gz bridge)to required earlier today with itsstated precondition met — five consecutive green runs on main, the wasm leg
executing 6250 ticks and holding 0.01 m bit-identical to native. It deadlocked
every merge in the repo within minutes:
#426 touched only
.github/workflows/kani.yml, which was not in the pathfilter. Removing the required context returned it to
CLEANinstantly.The precondition I checked was "is this leg meaningful." The one that decides
whether a context can be required is "does it report on every PR." Different
properties.
What this does
Removes the
pull_requestpath filter so the job always runs.Cost: ~7 minutes of runner time per PR. Against: the only gate in the
repo that flies the actually-published wasm component through real physics and
compares it to native bit for bit. Cheap.
What this deliberately does not do
It does not re-add the required context. The sequence is: land this → observe
the job reporting on a PR that touches none of the old filter paths → then
promote. Promoting on reasoning rather than evidence is what caused the
deadlock, and doing it twice in one day would be hard to explain.
The shape, now that we have both halves
success— verifies nothing, looks greenSame root: a gate whose workflow does not always run. The only shape safe to
require is one that always runs and always reports.
🤖 Generated with Claude Code
https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG