diff --git a/Makefile b/Makefile index 4562048..c2d6274 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,10 @@ fmt-check: lint: golangci-lint run $(GO_PKGS) -# Run the test suite. +# Run the test suite. Quiet on success; on failure, rerun verbosely for the +# full output and still fail the target (the first run already proved the +# tests are broken, so a flaky pass on the rerun must not rescue the build). test: - go test $(GO_PKGS) + @go test -timeout 30s -race -cover $(GO_PKGS) || \ + { echo "--- Rerunning with -v for details ---"; \ + go test -timeout 30s -race -v $(GO_PKGS); exit 1; } diff --git a/TODO.md b/TODO.md index e99d21b..c0833bc 100644 --- a/TODO.md +++ b/TODO.md @@ -34,6 +34,19 @@ wizard commands). # Completed Steps +- 2026-08-09 Policy-shaped `make test` (`make-test-policy-pattern`): the `test:` + target was a bare `go test $(GO_PKGS)` and now runs + `-timeout 30s -race -cover` with the mandated conditional verbose rerun (on + failure it reruns with `-v` and then `exit 1`, so a flaky pass on the second + attempt cannot rescue the build). `$(GO_PKGS)` is kept rather than hardcoding + `./...`. The substance was `-race`, not the Makefile edit: this is the first + time the suite has run under the race detector, and it is clean — no data + races across five consecutive uncached runs, including the tcell terminal + layer and the `os.Exit`-path playthrough tests. Wall clock 5.1s cold + (including the race build) and ~2.3s warm, against the 20s policy budget. The + failure path was exercised with a throwaway failing test to confirm the rerun + fires and `make` exits non-zero. Build tooling only; no game behavior change. + - 2026-08-07 Canonical linter config (`golangci-v2.12.2`): replaced `.golangci.yml` with the shared canonical config (v2 schema; settings now live under `linters.settings`, so the `lll`/`funlen`/`cyclop`/`dupl` thresholds