The canonical lint pin, golangci/golangci-lint v2.12.2, is built with go1.26.2 and refuses any module whose go line is 1.27 or later:
Error: can't load config: the Go language version (go1.26) used to build golangci-lint is lower than the targeted Go version (1.27.1)
Go 1.27.1 is the current stable release. Every golangci-lint release that can lint it (v2.13.0 and later; v2.14.0 is built with go1.27.0) also adds the exhaustruct_v5 linter, the successor to exhaustruct. The canonical .golangci.yml disables only the deprecated exhaustruct, so under default: all the successor runs and flags every partial struct literal, for example a plain &http.Server{Addr: ..., Handler: ...}.
Asked: bump the canonical pin to a release built with go1.27, and add exhaustruct_v5 to the disable list next to exhaustruct, as was done for wsl and gomodguard.
Found while bringing sneak/api#1 to Go 1.27.1. That repo pins v2.14.0 and carries one //nolint:exhaustruct_v5 pointing here, to be removed once the canonical config disables the linter.
Model: opus-5-5
The canonical lint pin, `golangci/golangci-lint` v2.12.2, is built with go1.26.2 and refuses any module whose `go` line is 1.27 or later:
```
Error: can't load config: the Go language version (go1.26) used to build golangci-lint is lower than the targeted Go version (1.27.1)
```
Go 1.27.1 is the current stable release. Every golangci-lint release that can lint it (v2.13.0 and later; v2.14.0 is built with go1.27.0) also adds the `exhaustruct_v5` linter, the successor to `exhaustruct`. The canonical `.golangci.yml` disables only the deprecated `exhaustruct`, so under `default: all` the successor runs and flags every partial struct literal, for example a plain `&http.Server{Addr: ..., Handler: ...}`.
Asked: bump the canonical pin to a release built with go1.27, and add `exhaustruct_v5` to the disable list next to `exhaustruct`, as was done for `wsl` and `gomodguard`.
Found while bringing https://git.eeqj.de/sneak/api/issues/1 to Go 1.27.1. That repo pins v2.14.0 and carries one `//nolint:exhaustruct_v5` pointing here, to be removed once the canonical config disables the linter.
Model: opus-5-5
Plan. Settled by the record (prompts/REPO_POLICIES.md: linter configuration changes go to the canonical copy here; the golangci-lint image digest is the only pin), so no owner question.
Pick the newest golangci-lint v2 release whose official image reports a Go 1.27 toolchain (golangci-lint --version inside the image). Pin it by image digest in the .golangci.yml paragraph of prompts/REPO_POLICIES.md, replacing the version, release date, digest and the --version output quoted there.
In the canonical .golangci.yml, add exhaustruct_v5 to linters.disable beside exhaustruct, with the same short reason. If the new release adds or deprecates any other linter that default: all would now switch on or warn about, handle it the way wsl and gomodguard were handled, and list each one in the PR.
git grep the canonical documents for the old version and digest (2.12.2, 5cceeef0, go1.26) and update every hit that names the canonical pin.
Done when: a scratch Go module with go 1.27 in go.mod, linted in the pinned image with the new config, runs with zero deprecation warnings, and a plain partial struct literal such as &http.Server{Addr: a, Handler: h} is not reported; the same module fails to lint under the old pin (the control); make check passes. The PR body states the new .golangci.yml sha256, because consuming repos verify it by hash.
Model: opus-5-5
Plan. Settled by the record (`prompts/REPO_POLICIES.md`: linter configuration changes go to the canonical copy here; the golangci-lint image digest is the only pin), so no owner question.
1. Pick the newest golangci-lint v2 release whose official image reports a Go 1.27 toolchain (`golangci-lint --version` inside the image). Pin it by image digest in the `.golangci.yml` paragraph of `prompts/REPO_POLICIES.md`, replacing the version, release date, digest and the `--version` output quoted there.
2. In the canonical `.golangci.yml`, add `exhaustruct_v5` to `linters.disable` beside `exhaustruct`, with the same short reason. If the new release adds or deprecates any other linter that `default: all` would now switch on or warn about, handle it the way `wsl` and `gomodguard` were handled, and list each one in the PR.
3. `git grep` the canonical documents for the old version and digest (`2.12.2`, `5cceeef0`, `go1.26`) and update every hit that names the canonical pin.
Done when: a scratch Go module with `go 1.27` in `go.mod`, linted in the pinned image with the new config, runs with zero deprecation warnings, and a plain partial struct literal such as `&http.Server{Addr: a, Handler: h}` is not reported; the same module fails to lint under the old pin (the control); `make check` passes. The PR body states the new `.golangci.yml` sha256, because consuming repos verify it by hash.
Model: opus-5-5
Done in #79: the canonical pin moves to v2.14.0 (built with go1.27), and exhaustruct_v5 is disabled beside exhaustruct. The PR body carries the new .golangci.yml sha256.
Model: opus-5-5
Done in https://git.eeqj.de/sneak/prompts/pulls/79: the canonical pin moves to v2.14.0 (built with go1.27), and `exhaustruct_v5` is disabled beside `exhaustruct`. The PR body carries the new `.golangci.yml` sha256.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The canonical lint pin,
golangci/golangci-lintv2.12.2, is built with go1.26.2 and refuses any module whosegoline is 1.27 or later:Go 1.27.1 is the current stable release. Every golangci-lint release that can lint it (v2.13.0 and later; v2.14.0 is built with go1.27.0) also adds the
exhaustruct_v5linter, the successor toexhaustruct. The canonical.golangci.ymldisables only the deprecatedexhaustruct, so underdefault: allthe successor runs and flags every partial struct literal, for example a plain&http.Server{Addr: ..., Handler: ...}.Asked: bump the canonical pin to a release built with go1.27, and add
exhaustruct_v5to the disable list next toexhaustruct, as was done forwslandgomodguard.Found while bringing sneak/api#1 to Go 1.27.1. That repo pins v2.14.0 and carries one
//nolint:exhaustruct_v5pointing here, to be removed once the canonical config disables the linter.Model: opus-5-5
Plan. Settled by the record (
prompts/REPO_POLICIES.md: linter configuration changes go to the canonical copy here; the golangci-lint image digest is the only pin), so no owner question.golangci-lint --versioninside the image). Pin it by image digest in the.golangci.ymlparagraph ofprompts/REPO_POLICIES.md, replacing the version, release date, digest and the--versionoutput quoted there..golangci.yml, addexhaustruct_v5tolinters.disablebesideexhaustruct, with the same short reason. If the new release adds or deprecates any other linter thatdefault: allwould now switch on or warn about, handle it the waywslandgomodguardwere handled, and list each one in the PR.git grepthe canonical documents for the old version and digest (2.12.2,5cceeef0,go1.26) and update every hit that names the canonical pin.Done when: a scratch Go module with
go 1.27ingo.mod, linted in the pinned image with the new config, runs with zero deprecation warnings, and a plain partial struct literal such as&http.Server{Addr: a, Handler: h}is not reported; the same module fails to lint under the old pin (the control);make checkpasses. The PR body states the new.golangci.ymlsha256, because consuming repos verify it by hash.Model: opus-5-5
Done in #79: the canonical pin moves to v2.14.0 (built with go1.27), and
exhaustruct_v5is disabled besideexhaustruct. The PR body carries the new.golangci.ymlsha256.Model: opus-5-5