Format Markdown with prettier in make fmt (closes #43)
check / check (push) Failing after 3s

script/fmt and script/fmt-check now run prettier on every Markdown file
after their Go steps, as the standard scripts from sneak/prompts at
dd4027b do. script/bootstrap gains the standard node, nvm and yarn
install next to its goimports install, and the last Dockerfile stage
copies package.json and yarn.lock before running it. .prettierrc,
.prettierignore and yarn.lock are the standard copies. package.json is
the standard one without its licence field and marked private, because
this repo's licence is the WTFPL. .dockerignore keeps the log of a failed
yarn install out of the build context. README.md and TODO.md are
reformatted once with it; REPO_POLICIES.md already matched.

Model: opus-5-5
This commit was merged in pull request #44.
This commit is contained in:
2026-10-06 16:22:56 +02:00
parent 17796569b8
commit cb74aa593d
11 changed files with 303 additions and 165 deletions
+73 -70
View File
@@ -1,86 +1,89 @@
# Workflow
* branch (from `main`)
* do the work in Next Step
* move Next Step to the top of Completed Steps
* move the top item of Future Steps into Next Step
* commit (`TODO.md` changes in the same commit as the work)
* merge to `main` if the branch is not protected, otherwise open a PR
* push
- branch (from `main`)
- do the work in Next Step
- move Next Step to the top of Completed Steps
- move the top item of Future Steps into Next Step
- commit (`TODO.md` changes in the same commit as the work)
- merge to `main` if the branch is not protected, otherwise open a PR
- push
# Status
1.0+
Tagged v1.0.0 (2024-06-14) and 1.0.1 (2026-02-08). In post-1.0
maintenance; the library is referenced by the Go styleguide.
Tagged v1.0.0 (2024-06-14) and 1.0.1 (2026-02-08). In post-1.0 maintenance; the
library is referenced by the Go styleguide.
# Next Step
Restructure README.md into the standard sections: Description, Getting
Started, Rationale, Design, TODO, License, Author
Restructure README.md into the standard sections: Description, Getting Started,
Rationale, Design, TODO, License, Author
# Completed Steps
* 2026-10-06: re-vendored the standard files from `sneak/prompts` at
commit `dd4027b`: `REPO_POLICIES.md`, the CI workflow, `.gitignore`,
and `.golangci.yml` together with the lint stage's new image, plus
the `.editorconfig` and `.dockerignore` this repo lacked, which
finishes the Makefile and policy-files step. `script/cibuild` now
bootstraps and runs `script/check` before building the image, the
format check runs only on the host, the last `Dockerfile` stage runs
`script/bootstrap`, which installs goimports at a pinned commit
* 2026-10-06: a webhook request now times out after 5 seconds, so a
server that never answers no longer stops every log call; the webhook
handler also reads each answer to the end so its connection is reused
* 2026-10-06: the console handler takes the file and line it prints from
the record's `PC` instead of counting stack frames, so they name the
call site whether the record came through a `slog.Logger` or straight
to `Handle`
* 2026-10-06: the tests run under the race detector, in Docker:
`script/test` builds the `test` stage of the `Dockerfile`, which runs
`go test -race`, and a new final stage makes a plain `docker build`
run both the `lint` and `test` stages
* 2026-10-06: the linter runs only in Docker: `script/lint` builds the
`lint` stage of the `Dockerfile`, every `docker build` in `script/`
runs without the build cache, and `script/bootstrap` no longer
installs golangci-lint
* 2026-10-06: every handler now returns a failed delivery from `Handle`
instead of discarding it: console and JSON return the stdout write
error, the webhook also fails on a non-2xx answer, and the multiplex
delivers to every handler and returns their errors joined
* 2026-08-10: fixed every handler discarding slog attributes: console,
JSON and webhook handlers now emit record attributes, accumulate
WithAttrs without mutating the receiver, and honour WithGroup;
slog.Group values nest and LogValuer values are resolved; console
keys and values holding invalid UTF-8 are quoted
* 2026-08-07: added canonical `.golangci.yml` (v2 schema), pinned the
`Dockerfile` lint stage to golangci-lint v2.12.2 (tag+digest), and
fixed all findings the v1→v2 jump surfaced without changing any
exported signatures or behavior
- 2026-07-07 Adopted scripts-to-rule-them-all: `script/` entrypoints,
Makefile shims, README Entrypoints section
* 2026-02-08: fixed JSONHandler deadlock from recursive log.Println,
with regression test; tagged 1.0.1
* 2024-06-14: 1.0 prep: lint and fmt enforced in Docker build, call
stack depth fix so log locations report correctly, example script,
removed non-building RELP code; tagged v1.0.0
* 2024-05-22: module path moved to sneak.berlin/go/simplelog
* 2024-05-14: initial library: slog-based console, JSON, webhook, and
RELP handlers, MultiplexHandler, caller file/line info, UTC ISO
timestamps, level-colored output
- 2026-10-06: `make fmt` and `make fmt-check` also format Markdown, with
`prettier` at the standard settings, pinned through `package.json` and
`yarn.lock`; `script/bootstrap` installs node and yarn for it, and the
existing Markdown was formatted once
- 2026-10-06: re-vendored the standard files from `sneak/prompts` at commit
`dd4027b`: `REPO_POLICIES.md`, the CI workflow, `.gitignore`, and
`.golangci.yml` together with the lint stage's new image, plus the
`.editorconfig` and `.dockerignore` this repo lacked, which finishes the
Makefile and policy-files step. `script/cibuild` now bootstraps and runs
`script/check` before building the image, the format check runs only on the
host, the last `Dockerfile` stage runs `script/bootstrap`, which installs
goimports at a pinned commit
- 2026-10-06: a webhook request now times out after 5 seconds, so a server that
never answers no longer stops every log call; the webhook handler also reads
each answer to the end so its connection is reused
- 2026-10-06: the console handler takes the file and line it prints from the
record's `PC` instead of counting stack frames, so they name the call site
whether the record came through a `slog.Logger` or straight to `Handle`
- 2026-10-06: the tests run under the race detector, in Docker: `script/test`
builds the `test` stage of the `Dockerfile`, which runs `go test -race`, and a
new final stage makes a plain `docker build` run both the `lint` and `test`
stages
- 2026-10-06: the linter runs only in Docker: `script/lint` builds the `lint`
stage of the `Dockerfile`, every `docker build` in `script/` runs without the
build cache, and `script/bootstrap` no longer installs golangci-lint
- 2026-10-06: every handler now returns a failed delivery from `Handle` instead
of discarding it: console and JSON return the stdout write error, the webhook
also fails on a non-2xx answer, and the multiplex delivers to every handler
and returns their errors joined
- 2026-08-10: fixed every handler discarding slog attributes: console, JSON and
webhook handlers now emit record attributes, accumulate WithAttrs without
mutating the receiver, and honour WithGroup; slog.Group values nest and
LogValuer values are resolved; console keys and values holding invalid UTF-8
are quoted
- 2026-08-07: added canonical `.golangci.yml` (v2 schema), pinned the
`Dockerfile` lint stage to golangci-lint v2.12.2 (tag+digest), and fixed all
findings the v1→v2 jump surfaced without changing any exported signatures or
behavior
* 2026-07-07 Adopted scripts-to-rule-them-all: `script/` entrypoints, Makefile
shims, README Entrypoints section
- 2026-02-08: fixed JSONHandler deadlock from recursive log.Println, with
regression test; tagged 1.0.1
- 2024-06-14: 1.0 prep: lint and fmt enforced in Docker build, call stack depth
fix so log locations report correctly, example script, removed non-building
RELP code; tagged v1.0.0
- 2024-05-22: module path moved to sneak.berlin/go/simplelog
- 2024-05-14: initial library: slog-based console, JSON, webhook, and RELP
handlers, MultiplexHandler, caller file/line info, UTC ISO timestamps,
level-colored output
# Future Steps
* Delete the old plain TODO file once this TODO.md lands
* Add .aider.* to .gitignore and remove the stray aider artifacts from
the working tree
* Pick one tag scheme before the next release (v1.0.0 vs 1.0.1 are
inconsistent)
* Tag v1.0.2, with the leading v, once the attribute fix lands, so
consuming repos can move off pseudo-version pins in one step
* Fix RELP output to cache (from old TODO)
* Re-add RELP delivery over TCP to remote rsyslog imrelp; removed
2024-06-14 because it did not build (README planned feature)
* Add regex filtering for webhook logs (from old TODO)
* Better console output format (from old TODO)
- Delete the old plain TODO file once this TODO.md lands
- Add .aider.\* to .gitignore and remove the stray aider artifacts from the
working tree
- Pick one tag scheme before the next release (v1.0.0 vs 1.0.1 are inconsistent)
- Tag v1.0.2, with the leading v, once the attribute fix lands, so consuming
repos can move off pseudo-version pins in one step
- Fix RELP output to cache (from old TODO)
- Re-add RELP delivery over TCP to remote rsyslog imrelp; removed 2024-06-14
because it did not build (README planned feature)
- Add regex filtering for webhook logs (from old TODO)
- Better console output format (from old TODO)