Make the golangci-lint settings take effect: v2 config layout, linter pinned at v2.12.2 #10

Closed
opened 2026-10-03 14:22:50 +02:00 by clawbot · 2 comments
Collaborator

.golangci.yml keeps its linter settings in a top-level linters-settings block. golangci-lint v2 ignores that block without a warning, so limits such as lll: 88 are not applied today and the lint run passes code that the config means to reject.

The work already exists as #4 (opened against main in August, before this repo had a next branch). This issue tracks it so it can land on next.

Implementation

  • Rewrite .golangci.yml in the v2 layout: settings under linters.settings; drop the obsolete issues.exclude-use-default key.
  • Pin golangci-lint at v2.12.2 wherever the repo installs it today (Dockerfile, script/bootstrap), by commit hash with a dated comment, as the current pins are written.
  • Fix every finding that the settings now produce (the PR found 15 lll findings in attrsum.go) by rewrapping lines only, with no change in behaviour.
  • TODO.md updated in the same change.

Out of scope: moving linting into its own Docker image (#5 does that, after this lands, because it touches the same files).

Definition of done

  • The PR targets next, rebased onto its current head (next now carries the version stamping, which touches Dockerfile and TODO.md).
  • golangci-lint reads the settings: a line over the lll limit in attrsum.go fails make lint, and the PR is clean without it.
  • make check and script/cibuild pass.

Model: opus-5-5

`.golangci.yml` keeps its linter settings in a top-level `linters-settings` block. golangci-lint v2 ignores that block without a warning, so limits such as `lll: 88` are not applied today and the lint run passes code that the config means to reject. The work already exists as https://git.eeqj.de/sneak/attrsum/pulls/4 (opened against `main` in August, before this repo had a `next` branch). This issue tracks it so it can land on `next`. ## Implementation - Rewrite `.golangci.yml` in the v2 layout: settings under `linters.settings`; drop the obsolete `issues.exclude-use-default` key. - Pin golangci-lint at v2.12.2 wherever the repo installs it today (`Dockerfile`, `script/bootstrap`), by commit hash with a dated comment, as the current pins are written. - Fix every finding that the settings now produce (the PR found 15 `lll` findings in `attrsum.go`) by rewrapping lines only, with no change in behaviour. - `TODO.md` updated in the same change. Out of scope: moving linting into its own Docker image (https://git.eeqj.de/sneak/attrsum/issues/5 does that, after this lands, because it touches the same files). ## Definition of done - The PR targets `next`, rebased onto its current head (`next` now carries the version stamping, which touches `Dockerfile` and `TODO.md`). - golangci-lint reads the settings: a line over the `lll` limit in `attrsum.go` fails `make lint`, and the PR is clean without it. - `make check` and `script/cibuild` pass. Model: opus-5-5
Author
Collaborator

Plan. State: #4 now targets next and is labelled needs-rebase (it conflicts with next in TODO.md; next also changed Dockerfile for version stamping). Not dispatched yet: both worker accounts were full and the fleet was over its RAM limit. Next step: one issue-to-pr worker in rework mode with the brief below, then a fresh pr-reviewer, then a squash-merge to next. #5 waits for this one because it touches the same files.

Worker brief:

  1. mktemp -d /srv/code/tmp/worker-attrsum-10.XXXXXX, clone git@git.eeqj.de:sneak/attrsum.git into it, work only there; no git worktrees.
  2. Check out golangci-v2.12.2, rebase onto current origin/next, resolve conflicts by hand keeping both sides (the version stamping on next must survive intact).
  3. Make the change match this issue: v2 config layout, golangci-lint v2.12.2 pinned by commit hash with a dated comment in Dockerfile and script/bootstrap, every lll finding fixed by rewrapping only, TODO.md updated. One commit, title ending (closes #10), body of at most about 120 words of plain prose ending Model: <id>.
  4. Show the settings are read: add one overlong line to attrsum.go, confirm make lint fails with an lll finding, remove it, confirm clean. Post none of this.
  5. Run make check and script/cibuild. Immediately before pushing, fetch and rebase onto current origin/next again; re-run both after any change. Force-push with lease.
  6. PR title Make the golangci-lint settings take effect: v2 config layout, linter pinned at v2.12.2 (closes #10), body of at most about 250 words, plain prose, linking this issue by full URL, ending Model: <id>, no test results. Labels: needs-review instead of needs-rebase; assignee stays clawbot.
  7. Rules: small and plain, no coined identifiers; no scripted edits (sed -i, perl -pi, awk, python replace), edit by hand and format only with make fmt; only make targets and script/ entrypoints, never go or golangci-lint directly; no interactive questions; no company names or session trailers; escape angle brackets in Gitea comments; full URLs, never bare numbers. Shared host: Docker builds and the linter behind flock -w 1800 /srv/code/tmp/docker-gate.lock (a timeout exits 1 without running anything, so check for it); kill only PIDs you started; remove every container you start; check fleet RAM is under 29 GiB before launching. Cleanup in two Bash calls: cd /srv/code/tmp, then rm -rf <temp dir>.

Model: opus-5-5

Plan. State: https://git.eeqj.de/sneak/attrsum/pulls/4 now targets `next` and is labelled `needs-rebase` (it conflicts with `next` in `TODO.md`; `next` also changed `Dockerfile` for version stamping). Not dispatched yet: both worker accounts were full and the fleet was over its RAM limit. Next step: one `issue-to-pr` worker in rework mode with the brief below, then a fresh `pr-reviewer`, then a squash-merge to `next`. https://git.eeqj.de/sneak/attrsum/issues/5 waits for this one because it touches the same files. Worker brief: 1. `mktemp -d /srv/code/tmp/worker-attrsum-10.XXXXXX`, clone `git@git.eeqj.de:sneak/attrsum.git` into it, work only there; no git worktrees. 2. Check out `golangci-v2.12.2`, rebase onto current `origin/next`, resolve conflicts by hand keeping both sides (the version stamping on `next` must survive intact). 3. Make the change match this issue: v2 config layout, golangci-lint v2.12.2 pinned by commit hash with a dated comment in `Dockerfile` and `script/bootstrap`, every `lll` finding fixed by rewrapping only, `TODO.md` updated. One commit, title ending ` (closes #10)`, body of at most about 120 words of plain prose ending `Model: <id>`. 4. Show the settings are read: add one overlong line to `attrsum.go`, confirm `make lint` fails with an `lll` finding, remove it, confirm clean. Post none of this. 5. Run `make check` and `script/cibuild`. Immediately before pushing, fetch and rebase onto current `origin/next` again; re-run both after any change. Force-push with lease. 6. PR title `Make the golangci-lint settings take effect: v2 config layout, linter pinned at v2.12.2 (closes #10)`, body of at most about 250 words, plain prose, linking this issue by full URL, ending `Model: <id>`, no test results. Labels: `needs-review` instead of `needs-rebase`; assignee stays `clawbot`. 7. Rules: small and plain, no coined identifiers; no scripted edits (`sed -i`, `perl -pi`, `awk`, python replace), edit by hand and format only with `make fmt`; only `make` targets and `script/` entrypoints, never `go` or golangci-lint directly; no interactive questions; no company names or session trailers; escape angle brackets in Gitea comments; full URLs, never bare numbers. Shared host: Docker builds and the linter behind `flock -w 1800 /srv/code/tmp/docker-gate.lock` (a timeout exits 1 without running anything, so check for it); kill only PIDs you started; remove every container you start; check fleet RAM is under 29 GiB before launching. Cleanup in two Bash calls: `cd /srv/code/tmp`, then `rm -rf <temp dir>`. Model: opus-5-5
Author
Collaborator

Brief amendment, applies on top of the plan above:

  • .golangci.yml is the current canonical file from sneak/prompts (main, https://git.eeqj.de/sneak/prompts/src/branch/main/.golangci.yml), copied verbatim. It has changed since #4 copied it in August (it now enables gomodguard_v2 and configures depguard). The repo does not patch it locally; a problem in the file itself goes to sneak/prompts as an issue, linked from the PR, and the worker stops there.
  • Every finding the new config produces is fixed in this PR, without changing behaviour.
  • Read first: REPO_POLICIES.md, CODE_STYLEGUIDE.md, CODE_STYLEGUIDE_GO.md, EXISTING_REPO_CHECKLIST.md and LLM_PROSE_TELLS.md from https://git.eeqj.de/sneak/prompts/src/branch/main/prompts.
  • The version stamping now on next (git describe in the stage that compiles) is sneak's later ruling for this repo (#7) and stays as it is.

Model: opus-5-5

Brief amendment, applies on top of the plan above: - `.golangci.yml` is the current canonical file from `sneak/prompts` (`main`, https://git.eeqj.de/sneak/prompts/src/branch/main/.golangci.yml), copied verbatim. It has changed since https://git.eeqj.de/sneak/attrsum/pulls/4 copied it in August (it now enables `gomodguard_v2` and configures `depguard`). The repo does not patch it locally; a problem in the file itself goes to `sneak/prompts` as an issue, linked from the PR, and the worker stops there. - Every finding the new config produces is fixed in this PR, without changing behaviour. - Read first: `REPO_POLICIES.md`, `CODE_STYLEGUIDE.md`, `CODE_STYLEGUIDE_GO.md`, `EXISTING_REPO_CHECKLIST.md` and `LLM_PROSE_TELLS.md` from https://git.eeqj.de/sneak/prompts/src/branch/main/prompts. - The version stamping now on `next` (git describe in the stage that compiles) is sneak's later ruling for this repo (https://git.eeqj.de/sneak/attrsum/issues/7) and stays as it is. Model: opus-5-5
Sign in to join this conversation.