Bring the repo up to the standard layout: config files, Docker lint and test phases, scripts #1

Closed
opened 2026-07-26 20:45:46 +02:00 by clawbot · 4 comments
Collaborator

bsdaily is missing several standard repo files (verified against main: the root has no .gitignore, .dockerignore, .editorconfig, or .golangci.yml).

Definition of done

  1. Add a standard Go .gitignore and .dockerignore (match a sibling such as sneak/dnswatcher).
  2. Add .editorconfig matching our standard Go repos (copy sneak/dnswatcher's).
  3. Add .golangci.yml byte-identical to sneak/dnswatcher's (org-standard config).
  4. make check and docker build . are green under the new config. If the linter surfaces findings, remediate them BEHAVIOR-PRESERVINGLY; if the remediation is large (more than ~50 findings), STOP and report so the lint cleanup can be split into its own issue/PR rather than bundled here.

The finishing commit's title must end with (closes #N) referencing this issue.

bsdaily is missing several standard repo files (verified against `main`: the root has no `.gitignore`, `.dockerignore`, `.editorconfig`, or `.golangci.yml`). ## Definition of done 1. Add a standard Go `.gitignore` and `.dockerignore` (match a sibling such as `sneak/dnswatcher`). 2. Add `.editorconfig` matching our standard Go repos (copy `sneak/dnswatcher`'s). 3. Add `.golangci.yml` byte-identical to `sneak/dnswatcher`'s (org-standard config). 4. `make check` and `docker build .` are green under the new config. If the linter surfaces findings, remediate them BEHAVIOR-PRESERVINGLY; if the remediation is large (more than ~50 findings), STOP and report so the lint cleanup can be split into its own issue/PR rather than bundled here. The finishing commit's title must end with ` (closes #N)` referencing this issue.
Author
Collaborator

Splitting this: I'm landing the three non-lint dotfiles now (.gitignore, .dockerignore, .editorconfig — all copied from sneak/dnswatcher, .gitignore adapted to the /bsdaily binary) as a PR that keeps make check green. That PR is refs #1, not closes, because the .golangci.yml part is deferred.

Adding the org-standard .golangci.yml (linters: default: all) surfaces 167 lint findings in bsdaily's existing code (baseline with no config is 0). Breakdown: wsl_v5 49, noinlineerr 43, nlreturn 16, lll 13, err113 12, revive 12, gosec 9, noctx 6, plus complexity linters. That is a substantial behavior-preserving cleanup, not an overnight change. Your call: do the full cleanup, or tune the shared .golangci.yml to be less brutal for existing code. Assigning to you for that decision; the .golangci.yml add closes #1 once it lands green.

Splitting this: I'm landing the three non-lint dotfiles now (`.gitignore`, `.dockerignore`, `.editorconfig` — all copied from `sneak/dnswatcher`, `.gitignore` adapted to the `/bsdaily` binary) as a PR that keeps `make check` green. That PR is `refs #1`, not `closes`, because the `.golangci.yml` part is deferred. Adding the org-standard `.golangci.yml` (`linters: default: all`) surfaces 167 lint findings in bsdaily's existing code (baseline with no config is 0). Breakdown: `wsl_v5` 49, `noinlineerr` 43, `nlreturn` 16, `lll` 13, `err113` 12, `revive` 12, `gosec` 9, `noctx` 6, plus complexity linters. That is a substantial behavior-preserving cleanup, not an overnight change. Your call: do the full cleanup, or tune the shared `.golangci.yml` to be less brutal for existing code. Assigning to you for that decision; the `.golangci.yml` add closes #1 once it lands green.
Author
Collaborator

The dotfiles portion of this issue is complete and pushed, but I can't open the PR: clawbot is not a collaborator on sneak/bsdaily, so PR creation returns user must be a collaborator. (It has access on secret/vaultik/netwatch, where the parallel dotfile PRs opened fine.)

Ready on the remote:

  • Branch issue-1-dotfiles-v2 @ 36e6061b181944f1797c08b64d5cafbbef26c044
  • Adds .gitignore (dnswatcher's, binary line adapted to /bsdaily), .dockerignore and .editorconfig (byte-for-byte from dnswatcher). All three were absent.
  • .golangci.yml intentionally deferred (its adoption cascades into ~167 lint findings needing a dedicated cleanup pass).
  • Verified on the branch: make check green (0 issues.); docker build . succeeds.

Decision needed:

  • Option A (recommended): add clawbot as a collaborator on sneak/bsdaily; I'll then open the PR from issue-1-dotfiles-v2, run the independent review, and post the reviewer's results as a comment — same flow as the other repos.
  • Option B: you open the PR yourself from issue-1-dotfiles-v2 (base main, refs #1).

Assigning to you for the access call.

The dotfiles portion of this issue is complete and pushed, but I can't open the PR: `clawbot` is not a collaborator on `sneak/bsdaily`, so PR creation returns `user must be a collaborator`. (It has access on `secret`/`vaultik`/`netwatch`, where the parallel dotfile PRs opened fine.) **Ready on the remote:** - Branch `issue-1-dotfiles-v2` @ `36e6061b181944f1797c08b64d5cafbbef26c044` - Adds `.gitignore` (dnswatcher's, binary line adapted to `/bsdaily`), `.dockerignore` and `.editorconfig` (byte-for-byte from dnswatcher). All three were absent. - `.golangci.yml` intentionally deferred (its adoption cascades into ~167 lint findings needing a dedicated cleanup pass). - Verified on the branch: `make check` green (`0 issues.`); `docker build .` succeeds. **Decision needed:** - **Option A (recommended):** add `clawbot` as a collaborator on `sneak/bsdaily`; I'll then open the PR from `issue-1-dotfiles-v2`, run the independent review, and post the reviewer's results as a comment — same flow as the other repos. - **Option B:** you open the PR yourself from `issue-1-dotfiles-v2` (base `main`, `refs #1`). Assigning to you for the access call.
Author
Collaborator

Plan. This issue becomes the unit that brings the repo up to the standard layout in REPO_POLICIES.md and EXISTING_REPO_CHECKLIST.md from sneak/prompts. Both are read from sneak/prompts next: its main still forbids git describe in a build stage, which the version ruling in #4 overturned.

The open question above is decided by REPO_POLICIES.md: the shared .golangci.yml is never modified, so the code is fixed. With about 170 findings, that part moves, as this issue's own definition of done asks, to #6. Formatting Markdown is #7.

Definition of done

  1. .gitignore, .dockerignore, .editorconfig: the canonical copies from sneak/prompts next. .dockerignore adds the repo's own host-built files, root-anchored: /bsdaily, /coverage.out, /coverage.html. The old branch issue-1-dotfiles-v2 is not used (its files came from another repo, not the canonical ones).
  2. Dockerfile: a lint phase on the golangci-lint image already pinned here, running golangci-lint run ./... directly (the move to v2.14.0 goes with the config in #6); a test phase on the Debian Go image pinned by digest, with the sqlite3 and zstd tools installed, running the canonical test command; the build stage copying a file from each phase; the runtime stage last and unchanged. The build stage keeps today's plain go build: the version stamp is #4.
  3. script/lint and script/test build their phase by name, uncached and tagged; script/cibuild, script/docker and .gitea/workflows/check.yml are the canonical copies; script/bootstrap installs no linter. Nothing on the host gives a lint result: the Makefile deps target stops installing golangci-lint @latest.
  4. REPO_POLICIES.md re-vendored; the README Entrypoints section and TODO.md match the new scripts.
  5. A fresh clone passes script/cibuild on a host with only docker and git. A planted lint error fails make lint and docker build .; a planted failing test fails make test and docker build .; both reverted.

Model: opus-5-5

Plan. This issue becomes the unit that brings the repo up to the standard layout in `REPO_POLICIES.md` and `EXISTING_REPO_CHECKLIST.md` from `sneak/prompts`. Both are read from `sneak/prompts` `next`: its `main` still forbids `git describe` in a build stage, which the version ruling in https://git.eeqj.de/sneak/bsdaily/issues/4 overturned. The open question above is decided by `REPO_POLICIES.md`: the shared `.golangci.yml` is never modified, so the code is fixed. With about 170 findings, that part moves, as this issue's own definition of done asks, to https://git.eeqj.de/sneak/bsdaily/issues/6. Formatting Markdown is https://git.eeqj.de/sneak/bsdaily/issues/7. ## Definition of done 1. `.gitignore`, `.dockerignore`, `.editorconfig`: the canonical copies from `sneak/prompts` `next`. `.dockerignore` adds the repo's own host-built files, root-anchored: `/bsdaily`, `/coverage.out`, `/coverage.html`. The old branch `issue-1-dotfiles-v2` is not used (its files came from another repo, not the canonical ones). 2. `Dockerfile`: a `lint` phase on the golangci-lint image already pinned here, running `golangci-lint run ./...` directly (the move to v2.14.0 goes with the config in https://git.eeqj.de/sneak/bsdaily/issues/6); a `test` phase on the Debian Go image pinned by digest, with the `sqlite3` and `zstd` tools installed, running the canonical test command; the build stage copying a file from each phase; the runtime stage last and unchanged. The build stage keeps today's plain `go build`: the version stamp is https://git.eeqj.de/sneak/bsdaily/issues/4. 3. `script/lint` and `script/test` build their phase by name, uncached and tagged; `script/cibuild`, `script/docker` and `.gitea/workflows/check.yml` are the canonical copies; `script/bootstrap` installs no linter. Nothing on the host gives a lint result: the `Makefile` `deps` target stops installing golangci-lint `@latest`. 4. `REPO_POLICIES.md` re-vendored; the README Entrypoints section and `TODO.md` match the new scripts. 5. A fresh clone passes `script/cibuild` on a host with only docker and git. A planted lint error fails `make lint` and `docker build .`; a planted failing test fails `make test` and `docker build .`; both reverted. Model: opus-5-5
clawbot changed title from Add missing standard config files: .gitignore, .dockerignore, .editorconfig, .golangci.yml to Bring the repo up to the standard layout: config files, Docker lint and test phases, scripts 2026-10-06 00:54:24 +02:00
Author
Collaborator

Built as #9, covering the plan's definition of done; the PR body lists the judgement call and what stays with #6 and #7.

Model: opus-5-5

Built as https://git.eeqj.de/sneak/bsdaily/pulls/9, covering the plan's definition of done; the PR body lists the judgement call and what stays with https://git.eeqj.de/sneak/bsdaily/issues/6 and https://git.eeqj.de/sneak/bsdaily/issues/7. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/bsdaily#1