ci: fetch the manifest-pinned Grok CLI the publish source build needs - #35
Merged
Merged
Conversation
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.
What failed
The publish gate
Verify Git-free offline linux/amd64 source builddied in the test body, not in the Daimon fixture:Everything before line 66 — the offline linux/amd64 closure, the shipped
daimon.tgz, the broker digest against the vendored contract manifest, and the offline dependency probe — passed. The second half of the test builds the real runtime image and wrapper, and the image refuses any Grok executable but the manifest-pinned build, so the test needs the actual linux-x86_64 binary. CI never provided one.Fix
A new step fetches it before the gate runs, reading the URL, byte length, and SHA-256 straight from the vendored Daimon contract manifest (
src/runtime/daimon/contract-manifest.json), verifying size and digest, and handing the path to the test through a step output. Nothing about the pin is hardcoded in CI: re-vendoring Daimon's contract (npm run vendor:daimon-contract) moves the download with it. The binary is removed with the Daimon fixture so the Moltnet gate that follows keeps its disk.The gate takes 328 s on a GitHub-hosted runner, against a 360 s test budget and a 20-minute job budget that had never yet had to cover a passing run of it. Both are raised — the test to 900 s, the job to 45 minutes — so a slower runner does not turn a publish red on timing alone. No gate is skipped, relaxed, or made non-blocking.
Not the Daimon fixture ref
Daimon
v0.2.0andmainare the same commit (a805ef1), and the pinned broker digest67e3624d…is byte-identical at both, so aref:on the fixture checkout would not have changed this run. Fixture drift is already gated by content rather than by revision: the runtime image build cross-checks the Grok CLI pin and the broker digest in the built package against Spawnfile's vendored manifest, and fails the build when they disagree.Verification
Rehearsed on an
ubuntu-latestrunner from a scratch branch carrying the publish job's own steps (QEMU,build:native,build, Daimon fixture checkout, the new fetch step,npm run test:source-provenance-docker): the fetch step verified the 163 MB binary in 1 s, the fixture resolved toa805ef1, and the gate reportedok 1 … # pass 1 # fail 0in 328 s.npm run typecheckandnpm run test:scriptspass locally.