Skip to content

fix(provider): the runner pin constrains what runs, not what GitHub advertises; release .121 - #376

Merged
rldyourmnd merged 2 commits into
mainfrom
fix/the-pin-lives-in-the-image-not-in-githubs-offer
Sep 2, 2026
Merged

fix(provider): the runner pin constrains what runs, not what GitHub advertises; release .121#376
rldyourmnd merged 2 commits into
mainfrom
fix/the-pin-lives-in-the-image-not-in-githubs-offer

Conversation

@rldyourmnd

Copy link
Copy Markdown
Contributor

Live incident. GitHub moved all three organisations to runner 2.337.0 today while the worker image bakes 2.336.0. Every create validated GitHub's advertised package against the fleet's pin and refused: 25 of 77 creates failed in ten minutes, and the share would have reached every create as the warm pools drained. Jobs kept starting only because warm instances were already built.

The fleet never downloads that package. The warm claim and the direct-JIT cold create both run the runner baked into the image, and neither passes the cloud-config the metadata would have fed (provider .108 removed it). The version that runs is pinned where it is installed: the image manifest names the archive and its digest, the build verifies both, the smoke asserts the installed runner.

The guard now requires the advertised asset to be an official actions/runner linux-x64 release tarball whose download URL is the github.com release URL for that same filename. A substituted host, another architecture, a renamed asset or a mismatched URL is refused exactly as before; a newer advertised version is not a reason to refuse a job.

Release v0.1.5-nddev.121, two reproducible builds agree.

https://claude.ai/code/session_0128syXKxAGCfJGRDxUUNQXp

…dvertises

Every create validated that the runner package GitHub advertises equals the
version the fleet pins. The fleet never downloads that package: the warm
claim and the direct-JIT cold create both run the runner baked into the
image, and neither passes the cloud-config the metadata would have fed
(.108). The version that runs is pinned where it is installed -- the image
manifest names the archive and its digest, the build verifies both, the
smoke asserts the installed runner.

So the guard made every create depend on GitHub's release schedule. On
2026-09-02 GitHub moved all three organisations to 2.337.0 while the image
baked 2.336.0, and within ten minutes 25 of 77 creates failed with
"filename ... does not match pinned ..."; the share would have reached
every create as the warm pools drained.

The asset must still be an official actions/runner linux-x64 release
tarball whose download URL is the github.com release URL for that same
filename, so a substituted host, another architecture or a renamed asset
is refused exactly as before.

Claude-Session: https://claude.ai/code/session_0128syXKxAGCfJGRDxUUNQXp
…elease

Source 53ec735, built twice with CGO_ENABLED=0 go build -trimpath
-buildvcs=false -ldflags "-buildid= -s -w -X main.version=v0.1.5-nddev.121
-X main.commit=<source>"; both builds agree on b0d1a6980bb7efdd112acaed141d01708eeed9bb211770edc965cc033ff322a7.

Claude-Session: https://claude.ai/code/session_0128syXKxAGCfJGRDxUUNQXp
@rldyourmnd
rldyourmnd enabled auto-merge September 2, 2026 13:06
@rldyourmnd
rldyourmnd merged commit 25ba324 into main Sep 2, 2026
10 checks passed
@rldyourmnd
rldyourmnd deleted the fix/the-pin-lives-in-the-image-not-in-githubs-offer branch September 2, 2026 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant