From 8bc311b5d223dfad92676ce963f13756efca916f Mon Sep 17 00:00:00 2001 From: clawbot <35+clawbot@noreply.example.org> Date: Mon, 5 Oct 2026 00:00:10 +0000 Subject: [PATCH] Refuse a script/loadtest clients count that starts with 0 vegeta reads a leading 0 in its worker count as octal, so 00 gave no workers and 010 gave eight. The clients check before the build now refuses any value starting with 0, zero included. The duration needs no change: vegeta reads it as decimal, so 05s is five seconds. TODO.md: the load test entry is once, at the top of Completed Steps, and the entries for https://git.eeqj.de/sneak/pixa/issues/206 and https://git.eeqj.de/sneak/pixa/issues/204 are no longer repeated. Model: opus-5-5 --- TODO.md | 33 ++++++++++++--------------------- script/loadtest | 4 +++- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/TODO.md b/TODO.md index 4a48921..f4f1dce 100644 --- a/TODO.md +++ b/TODO.md @@ -31,27 +31,6 @@ P2: security: per-IP rate limiting on the image routes # Completed Steps -- 2026-10-04 `config.yml` stays out of git and the Docker build context (closes - #212): `.gitignore` now ignores `config.yml`, the config file Getting Started - creates with the signing key, and `.dockerignore` leaves it out in every - directory and in any letter case, as it already did `config.yaml` and - `config.dev.yml`. -- 2026-10-04 local config files stay out of the Docker build context (closes - #211): `.dockerignore` now leaves out `config.yaml` and `config.dev.yml` in - every directory and in any letter case, the local config files `.gitignore` - keeps out of git because they can hold the signing key. - `configs/config.example.yml` is still sent. `config.yml`, which Getting - Started creates, is in neither file: - https://git.eeqj.de/sneak/pixa/issues/212. -- 2026-10-04 `cmd/pixad/main.go` is one call into `internal/` (closes #206): - what it did (the command line and its `--config` flag, setting - `PIXA_CONFIG_PATH`, ignoring `SIGPIPE`, starting the fx app) is now `Run` in - `internal/app`, unchanged, and `main` calls it with `Version`, which the build - still sets through `-X main.Version`. That code had no tests to move. -- 2026-10-04 `.gitignore` ignores `.claude/` (closes #204): the entry and its - comment are copied from the canonical `.gitignore` in `sneak/prompts`, - unanchored so it matches at every depth. `.dockerignore` already has - `.claude`. - 2026-10-04 load test (closes #81): `script/loadtest [duration [clients]]` (`make loadtest`, defaults `10s` and `4`), a benchmark that `script/check` does not run, measures three scenarios, each against a new pixad container and @@ -67,6 +46,18 @@ P2: security: per-IP rate limiting on the image routes not pixad's limit); `miss` 70 r/s, p50 52 ms, p95 91 ms, p99 122 ms, peak 100 MiB, one fetch per request; `herd` 74 r/s, p50 52 ms, p95 69 ms, p99 111 ms, peak 60 MiB, 188 fetches for 749 requests. +- 2026-10-04 `config.yml` stays out of git and the Docker build context (closes + #212): `.gitignore` now ignores `config.yml`, the config file Getting Started + creates with the signing key, and `.dockerignore` leaves it out in every + directory and in any letter case, as it already did `config.yaml` and + `config.dev.yml`. +- 2026-10-04 local config files stay out of the Docker build context (closes + #211): `.dockerignore` now leaves out `config.yaml` and `config.dev.yml` in + every directory and in any letter case, the local config files `.gitignore` + keeps out of git because they can hold the signing key. + `configs/config.example.yml` is still sent. `config.yml`, which Getting + Started creates, is in neither file: + https://git.eeqj.de/sneak/pixa/issues/212. - 2026-10-04 `cmd/pixad/main.go` is one call into `internal/` (closes #206): what it did (the command line and its `--config` flag, setting `PIXA_CONFIG_PATH`, ignoring `SIGPIPE`, starting the fx app) is now `Run` in diff --git a/script/loadtest b/script/loadtest index 885b283..bcc361e 100755 --- a/script/loadtest +++ b/script/loadtest @@ -51,8 +51,10 @@ main() { "" | *[!0-9]*) usage ;; esac [ "$number" -gt 0 ] || usage + # The number of clients is a whole number that does not start with 0, + # which also refuses zero: vegeta reads a leading 0 as octal. case "$clients" in - *[!0-9]* | 0) usage ;; + *[!0-9]* | 0*) usage ;; esac cd "$ROOT"