.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
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:
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.
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).
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>.
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.
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.
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.
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
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.
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
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.
.golangci.ymlkeeps its linter settings in a top-levellinters-settingsblock. golangci-lint v2 ignores that block without a warning, so limits such aslll: 88are not applied today and the lint run passes code that the config means to reject.The work already exists as #4 (opened against
mainin August, before this repo had anextbranch). This issue tracks it so it can land onnext.Implementation
.golangci.ymlin the v2 layout: settings underlinters.settings; drop the obsoleteissues.exclude-use-defaultkey.Dockerfile,script/bootstrap), by commit hash with a dated comment, as the current pins are written.lllfindings inattrsum.go) by rewrapping lines only, with no change in behaviour.TODO.mdupdated 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
next, rebased onto its current head (nextnow carries the version stamping, which touchesDockerfileandTODO.md).llllimit inattrsum.gofailsmake lint, and the PR is clean without it.make checkandscript/cibuildpass.Model: opus-5-5
Plan. State: #4 now targets
nextand is labelledneeds-rebase(it conflicts withnextinTODO.md;nextalso changedDockerfilefor version stamping). Not dispatched yet: both worker accounts were full and the fleet was over its RAM limit. Next step: oneissue-to-prworker in rework mode with the brief below, then a freshpr-reviewer, then a squash-merge tonext. #5 waits for this one because it touches the same files.Worker brief:
mktemp -d /srv/code/tmp/worker-attrsum-10.XXXXXX, clonegit@git.eeqj.de:sneak/attrsum.gitinto it, work only there; no git worktrees.golangci-v2.12.2, rebase onto currentorigin/next, resolve conflicts by hand keeping both sides (the version stamping onnextmust survive intact).Dockerfileandscript/bootstrap, everylllfinding fixed by rewrapping only,TODO.mdupdated. One commit, title ending(closes #10), body of at most about 120 words of plain prose endingModel: <id>.attrsum.go, confirmmake lintfails with anlllfinding, remove it, confirm clean. Post none of this.make checkandscript/cibuild. Immediately before pushing, fetch and rebase onto currentorigin/nextagain; re-run both after any change. Force-push with lease.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, endingModel: <id>, no test results. Labels:needs-reviewinstead ofneeds-rebase; assignee staysclawbot.sed -i,perl -pi,awk, python replace), edit by hand and format only withmake fmt; onlymaketargets andscript/entrypoints, nevergoor 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 behindflock -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, thenrm -rf <temp dir>.Model: opus-5-5
Brief amendment, applies on top of the plan above:
.golangci.ymlis the current canonical file fromsneak/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 enablesgomodguard_v2and configuresdepguard). The repo does not patch it locally; a problem in the file itself goes tosneak/promptsas an issue, linked from the PR, and the worker stops there.REPO_POLICIES.md,CODE_STYLEGUIDE.md,CODE_STYLEGUIDE_GO.md,EXISTING_REPO_CHECKLIST.mdandLLM_PROSE_TELLS.mdfrom https://git.eeqj.de/sneak/prompts/src/branch/main/prompts.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