feat: retarget Go standards baseline to Go 1.26 (1.25-compatible)#1
Merged
Merged
Conversation
…ible) Move the standards baseline from Go 1.25 to Go 1.26 (1.26.4+) while keeping version-gated guidance valid for 1.25 modules via the existing Since/go.mod gating in go-idioms. - go-idioms: add new(expr) idiom (1.26) and self-referencing generics note; frame go fix ./... as the canonical modernizer runner on 1.26. - go-testing: add testing/cryptotest (1.26); note synctest.Run removal in 1.26. - go-concurrency: add runtime/pprof goroutineleak profile (1.26). - go-coding, go-linting, go-explain, go-reviewer, rules/go-context.mdc: bump baseline to 1.26 and clarify go fix vs golangci-lint modernize. - docs/install.md, README.md: min toolchain Go 1.26.x (1.26.4+); tarball and gopls (v0.22.x) pins updated. - Bump both manifests to 0.3.0; add CHANGELOG 0.3.0 section; update AGENTS.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016DwDkMcyVnq9RqzJK7CHKu
sebastian-iancu
commented
Jul 1, 2026
sebastian-iancu
left a comment
Contributor
Author
There was a problem hiding this comment.
Review — LGTM ✅ (merge-ready)
Reviewed with /review + plugin-dev:skill-development + plugin-dev:agent-development. Because this plugin's value is factual grounding in authoritative Go sources, I verified every net-new Go 1.26 claim against the release notes and pkg.go.dev (Go 1.26 shipped Feb 2026, after my training cutoff) rather than trusting memory.
Factual accuracy — all verified
| Claim | Verification | Status |
|---|---|---|
new(expr) allocate+init a pointer |
Release notes: "the built-in new… now allows its operand to be an expression"; example Age: new(yearsSince(born)) |
✅ |
new(expr) auto-fixed by modernize/go fix |
newexpr analyzer exists in x/tools/.../modernize/newexpr.go, runnable via go fix on 1.26 |
✅ |
go fix revamped as the modernizer home |
Release notes: "now the home of Go's modernizers… builds atop the same analysis framework as go vet" |
✅ |
testing/cryptotest.SetGlobalRandom |
pkg.go.dev/testing/cryptotest: SetGlobalRandom(t, seed) deterministic source for crypto/rand |
✅ |
experimental goroutineleak profile |
Release notes: profile named goroutineleak, enabled via GOEXPERIMENT=goroutineleakprofile |
✅ |
synctest.Run removed in 1.26 |
Go 1.25 notes + tracking issue golang/go#74012 "remove Run in Go 1.26"; 1.26.4 shows only Test+Wait |
✅ |
| self-referential generic type params | Release notes: exact type Adder[A Adder[A]] example matches |
✅ |
| Go 1.26 Feb 2026 / 1.26.4 Jun 2 2026 / gopls v0.22.0 May 15 2026 | release timeline consistent | ✅ |
Conventions / parity / hygiene — clean
- Skill descriptions stay third-person with trigger phrases;
go-reviewerkeepstools:(notallowed-tools:). - Both manifests →
0.3.0, valid JSON, Cursor path keys intact. - SemVer minor bump correct; CHANGELOG follows Keep a Changelog; historical
1.25entries correctly left untouched. - Retarget is complete — every residual
1.25is intentional;session-start.shhas no stale version string.
Optional polish (non-blocking) — being fixed in a follow-up commit
goroutineleakneeds a build flag — go-concurrency says the runtime "ships" the profile, but it only appears withGOEXPERIMENT=goroutineleakprofileat build time. Noting the flag saves a fruitless hunt.SetGlobalRandomcan't run undert.Parallel()— it's process-global and forbidden in parallel tests. go-testing heavily promotest.Parallel(), so a caveat (and a nod to theseedarg) prevents a footgun.- go-idioms "Over" column slightly broad — the
newexprmodernizer targets theptr[T](v)helper form; the inlinetmp := v; &tmppattern is more a review catch than an auto-fix. Minor precision.
- go-concurrency: note the goroutineleak profile needs GOEXPERIMENT=goroutineleakprofile at build time - go-testing: SetGlobalRandom(t, seed) is process-global — flag that it can't run under t.Parallel() - go-idioms: distinguish the newexpr auto-fixed ptr[T](v) helper from the review-catch tmp+&tmp inline form Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
Author
|
✅ Resolved in d0a7c22 — all three review nits addressed:
Docs-only prose refinements; |
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.
Summary
Moves the plugin's Go standards baseline from Go 1.25 to Go 1.26 (minimum 1.26.4), while keeping the guidance effective for 1.25 modules through the existing
Since/go.modversion-gating ingo-idioms. This satisfies "act effective for modern code (1.26+) while still supporting 1.25."Grounded in the Go 1.26 release notes and the
go fixblog post.New Go 1.26 material added to the skills:
go-idioms—new(expr)idiom (allocate + initialize a pointer in one step, ideal for optional/JSON pointer fields) as aSince 1.26row; a note on self-referencing generic type parameters (type Adder[A Adder[A]] interface{ Add(A) A }); andgo fix ./...reframed as the canonical, toolchain-native modernizer runner on 1.26.go-testing—testing/cryptotest.SetGlobalRandomfor deterministic crypto tests; note that the pre-1.25GOEXPERIMENT=synctest(synctest.Run) API was removed in Go 1.26.go-concurrency— experimentalgoroutineleakprofile inruntime/pprofas a toolchain-native complement togoleak.Baseline / tooling updates:
go-coding,go-linting,go-explain, thego-revieweragent, andrules/go-context.mdc;go fix ./...framed as the native modernizer runner withgolangci-lint --enable-only=modernizeretained for CI reproducibility and older toolchains.docs/install.md+README.md— minimum host toolchain raised to Go 1.26.x (1.26.4+); tarball example →go1.26.4;goplspin →v0.22.x(the gopls line adding Go 1.26 support).0.3.0section added; AGENTS.md status line updated.Checklist
./scripts/validate.shpasses (orclaude plugin validate .if Python is unavailable)claude plugin validate .passes.claude-plugin/plugin.jsonand.cursor-plugin/plugin.json.cursor-plugin/plugin.jsonpath map kept in step with the components that exist🤖 Generated with Claude Code
https://claude.ai/code/session_016DwDkMcyVnq9RqzJK7CHKu
Generated by Claude Code