Development record
launch scaffold derives a floating Go minor for adopter repos — goModVersionRe strips the go.mod patch, goVersionRe rejects supplying one, the toolchain directive is ignored, and a hand-pinned release.yml is refused then overwritten — the adopter-side residue of iss-289
issueresolvedminoriss-386
launch scaffold derives a floating Go minor for adopter repos — goModVersionRe strips the go.mod patch, goVersionRe rejects supplying one, the toolchain directive is ignored, and a hand-pinned release.yml is refused then overwritten — the adopter-side residue of iss-289
Evidence
internal/core/launch/scaffold/scaffold.go:214—goVersionRe = ^[0-9]+\.[0-9]+$rejects a supplied patch;:217—goModVersionRematches the go.mod patch group and discards it;:226—defaultGoVersion = "1.25"is a bare literal coupled to nothing.Scaffold(scaffold.go:94-95) always routes adopters throughDeriveRepoFacts+BareSubstitutions, so no input yields a pin.- Reproduced: a repo whose
go.modreadsgo 1.25.6derives"1.25", and the renderedrelease.ymlcarriesgo-version: '1.25'at all three jobs — the float iss-289 recorded lagging a security patch release on real runners. Atoolchain go1.25.6directive is ignored outright, so ago 1.24.0+ toolchain repo scaffolds a release toolchain older than its module declares. - An adopter cannot express the pin through the tool: a hand-pinned
release.ymlclassifiesdispDiffers, refusing later scaffolds, and--confirmoverwrites the pin back to the float. goversion_lockstep_test.gowalks.github/workflowsonly, so no test observes a bare rendering'sgo-version.- Refuter verdict: CONFIRMED (minor, adopter-side residue of iss-289) — the strip is undocumented as a choice (the
:212-213comment justifies only the injection-safety shape restriction, which a patch-admitting regex satisfies identically); no record or decision states a floating-minor-for-adopters policy.
Frontmatter
| id | iss-386 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-386-launch-scaffold-derives-a-floating-go.md
open on GitHub ↗ · commit history ↗
mentions2
- dcn-26082000000000082026-08-20 — Bug-hunt round 3 (hunt B), branch bughunt-b/round-3. Baseline
- iss-289The release workflow builds on an unpinned Go minor: scaffold substitutions set GoVersion 1.25, which resolved to 1.25.12 on runners today — the toolchain with four stdlib vulnerabilities fixed in 1.25.13 that govulncheck flagged in ci. ci.yml was pinned to 1.25.13 the same day but release.yml renders from the template, so shipped binaries build on whatever 1.25.x the runner resolves. The v0.6.0 tag predates any fix and cannot be retro-patched (anti-tag-move); the pin lands for the next cut