security: raise the published Go SDK consumer floor off EOL (1.24.0 → 1.25.0) - #59
security: raise the published Go SDK consumer floor off EOL (1.24.0 → 1.25.0)#59yakimoto wants to merge 3 commits into
Conversation
…> 1.25.0) The workflow pin was never the operative toolchain. CI log, run 27102642727 on main: Setup go version spec 1.22 go version go1.22.12 linux/amd64 GOTOOLCHAIN=auto go: downloading go1.24.0 <- the compiler that actually ran setup-go installed 1.22.12 and the toolchain switched itself up to 1.24.0, because sdk-go/go.mod demands it. Both are end-of-life (1.22 on 2025-02-11, 1.24 on 2026-02-10), so the finding held either way, but the directive selected the compiler, not the pin. That matters twice over, because github.com/wave-av/sdks/sdk-go is published (proxy, v0.1.0). Its go directive is the minimum Go it demands of everyone who installs it, and no workflow change can fix a floor that ships inside go.mod. #26 fixes the CI pin and should still land; this fixes the consumer floor. Different files, no conflict. 1.25.0 because it is the oldest release still receiving security fixes - clears EOL while keeping the widest consumer window. Nothing downstream needs more: after the bump the highest go requirement in the entire module graph is this module itself (x/sync and x/sys sit at 1.24.0). Verified on go1.26.4 before and after: build, vet and test green, including the go-ethereum v1.17.3 tree. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_b93c0dca-6bf3-4da9-b49a-ad0954535015) |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughSummary by CodeRabbit
WalkthroughThe Go SDK minimum version changed from Go 1.24.0 to Go 1.25.0. The Go generator now controls the emitted module version through ChangesGo version upgrade
Estimated code review effort: 1 (Trivial) | ~5 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
✨ Simplify code
Comment |
PR Summary by QodoRaise Go SDK minimum supported Go version to 1.25.0 (off EOL)
AI Description
Diagram
High-Level Assessment
Files changed (1)
|
Code Review by Qodo
1.
|
Qodo Fixer🍒 Ready to be cherry-picked — ✅ Merged (0) · ☑ Fixed (1) 🔗 Fix PR: #60 This fix PR was closed automatically. Its branch is preserved so you can cherry pick the changes into the original PR. Prompt for coding agent Process — 1 fixed
|
ApprovabilityVerdict: Needs human review This is an explicitly breaking change (raising minimum Go version) that affects all SDK consumers. The code change is simple, but the sdk-owners team should review to confirm timing and consumer communication for this breaking dependency bump. You can customize Macroscope's approvability policy. Learn more. |
Review flagged that a change raising what consumers need in order to build the published SDK shipped with no Unreleased entry. Correct, and the same miss I made on the sibling public repo in the same batch. The entry states the breaking part plainly (older or pinned toolchains, and GOTOOLCHAIN=off, hard-fail), the escape hatch (GOTOOLCHAIN=auto handles it), why 1.25 and not 1.26 (oldest release still receiving security fixes, widest supported consumer window), and that nothing downstream needs more - after the bump the highest go requirement in the whole module graph is this module itself. It also records the distinction that makes this PR separate from #26: setup-go installed 1.22.12 and the toolchain switched itself UP to 1.24.0 off this directive, so the workflow pin was never the operative version. A floor that ships inside go.mod cannot be fixed by a workflow change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_4ccb642f-5418-4710-a6fa-968fa9ce783b) |
|
Changelog gap flagged in review — valid, fixed in The entry now states the breaking condition (older or pinned toolchains, and It also records the distinction that keeps this PR separate from #26, because it is the part most likely to be re-derived wrongly later: the |
sdk-go/go.mod is codegen output. render_go.py hardcoded "go 1.24.0" and
rewrites the directive on every render, so bumping the emitted file alone
would have been reverted by the next generate.py run — the floor would read
fixed in the tree and regress silently the moment anyone regenerated.
Macroscope caught this and withheld approval for exactly this reason.
The version is now a single named constant, GO_VERSION, beside MODULE, so
generator and artifact cannot drift apart again. Proven rather than asserted:
ran the real codegen/generate.py and the regenerated sdk-go/go.mod is
byte-identical to the committed one (go 1.25.0), i.e. sdk-go/ does not appear
in the diff at all after a full render.
Also found and NOT folded in, to keep this PR single-purpose and green:
.github/workflows/{test-go,release-go}.yml both pin go-version: "1.22", two
EOL generations below the new floor. Those are inert for correctness because
GOTOOLCHAIN=auto only switches UP, which is why CI stayed green on 1.24 — but
they are a trap under GOTOOLCHAIN=off. Filed separately.
|
@macroscopeapp was right, and this is now fixed at the root rather than worked around. The concern, confirmed
Verified: The fix (
|


One line.
sdk-go/go.mod:go 1.24.0→go 1.25.0.This is the half of the EOL-Go problem that #26 does not reach
#26 is correct and should still land — it bumps
go-version: "1.22"→"1.26"intest-go.ymlandrelease-go.yml. But it is worth knowing what that pin was actually doing, because the CI log says something different from what the workflow file says:(run 27102642727,
main)setup-goinstalled 1.22.12, and then the Go toolchain switched itself up to 1.24.0 becausesdk-go/go.moddemands it. So the workflow pin was already inert — thegodirective selected the compiler, not the pin. Both versions are end-of-life (1.22 on 2025-02-11, 1.24 on 2026-02-10), so the finding held either way, but the mechanism named in it was the wrong one.That matters for a second reason:
github.com/wave-av/sdks/sdk-gois published (live on the module proxy,v0.1.0). Itsgodirective is the minimum Go it demands of everyone who installs it, and that minimum is currently an EOL release. No workflow change can fix a floor that ships insidego.mod.Why 1.25.0
Supported Go today is 1.25 and 1.26. 1.25 is the oldest release still receiving security fixes, so it clears EOL while keeping the consumer window as wide as it can be. Deliberate, not incidental.
Checked that nothing downstream needs more — after the bump, the highest
gorequirement in the whole module graph is this module itself:Verification
Against
go1.26.4, before and after:The heavy
go-ethereum v1.17.3dependency tree resolves and compiles unchanged.Relationship to #26
Independent files, no conflict — #26 touches
.github/workflows/*, this touchessdk-go/go.mod. Land both:GOTOOLCHAINhas nothing to switch up to).Found while burning down the Aikido "EOL runtime" critical class fleet-wide. Most of that class measured as false severity — repos pinning
go-version: stablebuild with current Go whatever their directive says. This repo is one of the genuine ones, and it turned out to be genuine for a different reason than the finding claimed.🤖 Generated with Claude Code
Note
Low Risk
Only the
godirective and changelog change; no runtime or API code. Risk is limited to consumers who cannot use Go 1.25+.Overview
Raises the published minimum Go for
github.com/wave-av/sdks/sdk-gofrom 1.24.0 to 1.25.0 insdk-go/go.mod. No SDK source changes.1.25 is the oldest release still getting security fixes after 1.24 EOL (2026-02-10). Consumers on an older toolchain or
GOTOOLCHAIN=offmust upgrade; defaultGOTOOLCHAIN=autocan fetch a suitable toolchain.CHANGELOG.mddocuments this as a breaking change for Go SDK consumers and clarifies that bumping CIgo-versionalone does not fix a floor that ships ingo.mod(CI was already compiling with 1.24 via toolchain auto-switch).Reviewed by Cursor Bugbot for commit 86ded9d. Configure here.
Note
Raise minimum Go version in published SDK
go.modfrom 1.24.0 to 1.25.0Introduces a
GO_VERSIONconstant in render_go.py as the single source of truth for thegodirective emitted into sdk-go/go.mod, replacing a hardcoded string. The generatedgo.modnow declaresgo 1.25.0. Risk: this is a breaking change for Go SDK consumers still on Go 1.24.Macroscope summarized ed32763.