fix(gate-67): look for the shipped copy where the runner actually is - #465
Merged
Conversation
gate-67 reported NOT APPLICABLE on every real run, including the one whose
entire purpose was to bump openregister's lock to the hydra-gates version that
ships the contracts:
[gate-67] openregister-contract-parity: NOT APPLICABLE — lib/Contract/
exists but no shipped copy was found to compare it against.
The gate looked only in `vendor/conduction/hydra-gates/...`. The Hydra Gates job
fetches this runner from `.github@main` and never runs `composer install`, so
there is no vendor/ in that job at all — and there never will be. The gate could
therefore only ever skip, which protects nothing.
Three locations are now tried, in order:
vendor/conduction/hydra-gates/... the consumer's own install, first, so an
app pinning an older hydra-gates is
judged against what it actually ships
hydra-gates/contracts/ inside the .github repo itself
<alongside this script> the copy that travels with the runner
The last one is what makes it work in CI, and the ordering is what keeps the
acceptance fixtures meaningful: they carry their own vendor/ copy, which still
wins, so planted drift is still detected against the fixture rather than against
the real contract.
Verified on the shape CI actually has — openregister's lib/ with NO vendor:
before: rc=4 (NOT APPLICABLE)
after: checked 2 file(s), rc=0
drift: rc=1, naming the file
leaf app with no lib/Contract: rc=3
Acceptance matrix unchanged: 161 passed, 0 failed.
The lesson is the one this whole ADR-084 thread keeps repeating: a gate that has
only ever skipped has not been shown to work. I checked its verdict in a real
run instead of assuming the lock bump was enough, which is the only reason this
was found.
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.
The gate could only ever skip
gate-67 reported
NOT APPLICABLEon every real run — includingopenregister#2503, whose entire purpose was to bump the lock to the hydra-gates
version that ships the contracts:
Cause: it looked only in
vendor/conduction/hydra-gates/…. The Hydra Gatesjob fetches this runner from
.github@mainand never runscomposer install,so that job has no
vendor/at all — and never will. A gate that can only skipprotects nothing.
Fix
Three locations, in order:
vendor/conduction/hydra-gates/…hydra-gates/contracts/.githubrepo itselfThe ordering is what keeps the acceptance fixtures meaningful: they carry their
own
vendor/copy, which still wins, so planted drift is detected against thefixture rather than against the real contract.
Verified on the shape CI actually has
openregister's
lib/with no vendor:Acceptance matrix unchanged: 161 passed, 0 failed.
Why it was found
I checked the gate's verdict in a real run instead of assuming the lock bump was
enough. A gate that has only ever skipped has not been shown to work — the same
lesson this ADR-084 thread has now produced three times.
🤖 Generated with Claude Code