Merge next into main: standard layout, lint config, version stamp, command line in internal/ #10

Open
clawbot wants to merge 5 commits from next into main
Collaborator

What next holds over main:

  • The repo now follows the standard layout. The shared ignore and editor files, policies, CI workflow and build scripts are copied unchanged from sneak/prompts at commit cc440118c876. The Dockerfile has separate lint and test phases, and every image build runs both, so a plain docker build . cannot skip them.
  • make fmt and make fmt-check also format Markdown with prettier. Node and yarn come from script/bootstrap at pinned versions when they are not already installed.
  • The shared .golangci.yml is adopted unchanged, linted with golangci-lint v2.14.0, and the code is fixed to it: long functions split into named steps, with the same flags, output files, SQL and order of steps.
  • bsdaily now reports its version. A plain docker build . of a clone stamps the commit's tag or short commit, logs it on the first line of every run, and prints it with --version.
  • cmd/bsdaily is a single call; the command line lives in internal/cli, with table tests for the date and flag rules. Flags, help text and messages are unchanged.

Worth knowing before merging or deploying:

  • A docker build . whose context has .git but cannot read a version from it now fails. Without .git the binary reports dev.
  • One behaviour fix rides along with the lint work: the extraction transaction is now rolled back on every early return. Before, most failures skipped the rollback.
  • CI now runs on every push to every branch, not only on main.
  • script/cibuild installs what it needs first (Go via apt, and node and yarn, on the runner image).

Nothing here waits on you.

Model: opus-5-5

What `next` holds over `main`: - The repo now follows the standard layout. The shared ignore and editor files, policies, CI workflow and build scripts are copied unchanged from `sneak/prompts` at commit `cc440118c876`. The `Dockerfile` has separate lint and test phases, and every image build runs both, so a plain `docker build .` cannot skip them. - `make fmt` and `make fmt-check` also format Markdown with prettier. Node and yarn come from `script/bootstrap` at pinned versions when they are not already installed. - The shared `.golangci.yml` is adopted unchanged, linted with golangci-lint v2.14.0, and the code is fixed to it: long functions split into named steps, with the same flags, output files, SQL and order of steps. - bsdaily now reports its version. A plain `docker build .` of a clone stamps the commit's tag or short commit, logs it on the first line of every run, and prints it with `--version`. - `cmd/bsdaily` is a single call; the command line lives in `internal/cli`, with table tests for the date and flag rules. Flags, help text and messages are unchanged. Worth knowing before merging or deploying: - A `docker build .` whose context has `.git` but cannot read a version from it now fails. Without `.git` the binary reports `dev`. - One behaviour fix rides along with the lint work: the extraction transaction is now rolled back on every early return. Before, most failures skipped the rollback. - CI now runs on every push to every branch, not only on `main`. - `script/cibuild` installs what it needs first (Go via apt, and node and yarn, on the runner image). Nothing here waits on you. Model: opus-5-5
clawbot self-assigned this 2026-10-06 08:27:18 +02:00
clawbot added 1 commit 2026-10-06 08:27:18 +02:00
Bring the repo up to the standard layout (closes #1)
check / check (push) Successful in 5m6s
17b6b84322
Vendors .gitignore, .dockerignore, .editorconfig, REPO_POLICIES.md,
script/cibuild, script/docker, script/lint, script/test and the CI
workflow byte-identical from sneak/prompts commit cc440118c876; the
two ignore files then add this repo's own build output, root-anchored
so cmd/bsdaily/ stays in. The Dockerfile gains a lint phase on the
golangci-lint image already pinned and a test phase on the Debian Go
image with sqlite3 and zstd; the build stage copies a file from each,
so a plain docker build cannot skip them. Nothing installs
golangci-lint on the host. On apt, script/bootstrap refreshes the
package lists once before its first install.

.golangci.yml and the lint cleanup: #6

Model: opus-5-5
clawbot removed their assignment 2026-10-06 08:53:52 +02:00
sneak was assigned by clawbot 2026-10-06 08:53:52 +02:00
clawbot added the merge-ready label 2026-10-06 08:53:52 +02:00
clawbot added 1 commit 2026-10-06 12:24:54 +02:00
script/fmt now also runs prettier over every Markdown file, and
script/fmt-check checks them without writing. prettier is pinned in
package.json and yarn.lock. script/bootstrap keeps its Go and apt
handling and gains the canonical node and yarn install (nvm from a
hash-checked archive, yarn through corepack), at the pinned versions
when they are absent; a node or yarn already installed is used as is.
Both fmt scripts find yarn the canonical way. The new files come from
sneak/prompts at cc440118c876. README.md and TODO.md are rewrapped by
make fmt, with no wording changes.

Deviation: package.json drops the canonical "license": "MIT" line; this
repo is WTFPL.

Model: opus-5-5
Co-authored-by: clawbot <sneak+clawbot@sneak.cloud>
clawbot changed title from Merge next into main: standard repo layout to Merge next into main: standard repo layout, Markdown formatting 2026-10-06 12:25:07 +02:00
clawbot added 1 commit 2026-10-06 14:24:50 +02:00
Vendor .golangci.yml byte-identical from sneak/prompts at cc440118 and
move the Dockerfile lint phase to golangci-lint v2.14.0 by the digest
REPO_POLICIES.md names. Fix the code to that config with flags, help
text, output files, SQL and the order of steps unchanged; long
functions are split into named steps.

Judgement call: the extraction transaction is now rolled back on every
early return; the old deferred rollback missed most failures and could
dereference a nil transaction.
Thirteen //nolint directives (gosec, unconvert, mnd, unqueryvet), each
with its reason.

Model: opus-5-5
clawbot changed title from Merge next into main: standard repo layout, Markdown formatting to Merge next into main: standard repo layout, Markdown formatting, shared lint config 2026-10-06 14:25:12 +02:00
clawbot added 1 commit 2026-10-06 18:41:54 +02:00
A plain `docker build .` now stamps bsdaily's version: the VERSION
build argument when one is given, otherwise `git describe --tags
--always` on the .git in the build context, as the canonical
Dockerfile does. The build fails if .git is there and the version
still comes out empty, dev or unknown. A host `make` build stamps the
same `git describe`, or dev. bsdaily logs the version on the first
line of every run and prints it with --version; a build that stamps
nothing, or an empty value, reports dev.

Judgement call: the build line also takes the canonical -trimpath and
-s -w.
One //nolint (gochecknoglobals): -X can only set a package-level
variable.

Model: opus-5-5
Co-authored-by: clawbot <sneak+clawbot@sneak.cloud>
clawbot changed title from Merge next into main: standard repo layout, Markdown formatting, shared lint config to Merge next into main: standard layout, Markdown formatting, shared lint config, version stamp 2026-10-06 18:42:07 +02:00
clawbot added 1 commit 2026-10-06 23:07:53 +02:00
cmd/bsdaily/main.go now only passes Version to cli.Main and exits with
the status it returns, as REPO_POLICIES.md requires of cmd/. The cobra
command, the flag rules and the date parsing moved unchanged into
internal/cli, so flags, help text, error messages, exit status and the
first log line stay as they were. The fallback to dev for an empty
version moved with them into cli.Main.

parseTargetDates is exported as ParseTargetDates so that a table test
outside the package can reach it; the test never touches the filesystem
or runs the extraction. README describes the new layout and TODO.md
records the step.

Model: opus-5-5
Co-authored-by: clawbot <sneak+clawbot@sneak.cloud>
clawbot changed title from Merge next into main: standard layout, Markdown formatting, shared lint config, version stamp to Merge next into main: standard layout, lint config, version stamp, command line in internal/ 2026-10-06 23:08:07 +02:00
All checks were successful
check / check (push) Successful in 4m15s
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin next:next
git checkout next
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/bsdaily#10