`make install.tools` installs golangci-lint via:
```
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | bash -s -- -b ${GOPATH}/bin
```
This always fetches the latest release, which is now v2.x. The repo's `.golangci.yaml` uses the v1 config schema (`run.skip-dirs`, `linters.disable-all`, linters like `deadcode`/`structcheck`/`varcheck`/`exportloopref` that were removed in v2). Running `make golangci-lint` (or `make check`) with a v2 binary fails immediately:
```
Error: can't load config: unsupported version of the configuration: ""
```
Adding a bare `version: "2"` isn't sufficient either, since several enabled linters no longer exist in v2 (folded into `unused`/`copyloopvar`).
Fix should be one of:
- Pin `install.tools` to a specific v1.x golangci-lint release matching what CI actually runs, so local `make check` stays reproducible, or
- Migrate `.golangci.yaml` to the v2 schema and bump the linter list, if the project is ready to move CI to v2.
Found while working on #3040 / #3110 — unrelated to those changes, but blocks running `make check` locally with a freshly installed toolchain.
`make install.tools` installs golangci-lint via:
```
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | bash -s -- -b ${GOPATH}/bin
```
This always fetches the latest release, which is now v2.x. The repo's `.golangci.yaml` uses the v1 config schema (`run.skip-dirs`, `linters.disable-all`, linters like `deadcode`/`structcheck`/`varcheck`/`exportloopref` that were removed in v2). Running `make golangci-lint` (or `make check`) with a v2 binary fails immediately:
```
Error: can't load config: unsupported version of the configuration: ""
```
Adding a bare `version: "2"` isn't sufficient either, since several enabled linters no longer exist in v2 (folded into `unused`/`copyloopvar`).
Fix should be one of:
Found while working on #3040 / #3110 — unrelated to those changes, but blocks running `make check` locally with a freshly installed toolchain.