# 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 # 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. # Next Step Restructure README.md into the standard sections: Description, Getting Started, Rationale, Design, TODO, License, Author # Completed Steps - 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)