The webhook handler's client had no timeout, and slog calls the handler inside the log call, so a server that accepted the connection and never answered stopped that log call for good, and every later one. A request still running after 5 seconds, reading the answer included, now fails with a timeout error. The handler also reads the answer to the end before closing it, so the connection is reused for the next record. Two new tests point the handler at a server that never answers and at one that sends its status and then stalls the answer, and check that Handle returns a timeout error within the timeout. The README states the timeout. Model: opus-5-5
79 lines
3.7 KiB
Markdown
79 lines
3.7 KiB
Markdown
# 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
|
|
|
|
Bring the Makefile up to policy in one commit: add fmt-check, check, and
|
|
hooks targets (test/lint/fmt/docker exist) and add the missing policy
|
|
files it depends on: .golangci.yml, REPO_POLICIES.md, .editorconfig,
|
|
.dockerignore, and .gitea/workflows/check.yml running make check.
|
|
|
|
# Completed Steps
|
|
|
|
* 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 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
|
|
|
|
* Restructure README.md into the standard sections: Description,
|
|
Getting Started, Rationale, Design, TODO, License, Author
|
|
* 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)
|