make test retry masks real data races and timeouts #101

Closed
opened 2026-08-10 15:46:24 +02:00 by clawbot · 3 comments
Collaborator

Makefile:35 runs go test ... || go test -v .... When the first pass fails, the retry frequently passes, and make test (and therefore make check and CI) reports green. Real failures are being swallowed.

Observed on next with no PR applied: first go test pass failed, retry passed. Observed again while reviewing #96 at f24e33a: docker build --no-cache-filter=lint,builder . run 1 failed with a data race in TestIntegrationTwoClients and then panic: test timed out after 30s in internal/handlers; run 2 passed clean. Build is nondeterministic, so no commit can currently be certified green.

Contributing factor: internal/handlers takes 23-30s against a hard -timeout 30s, leaving no margin.

Definition of done:

  • make test fails when any test fails. No || retry that can convert a red run into a green one.
  • The data race(s) in the ircserver integration tests are fixed (not skipped, not -race disabled).
  • The internal/handlers timeout margin is resolved, either by making the package faster or by a justified timeout that is not near the runtime.
  • Ten consecutive docker build --no-cache . runs pass on next.
`Makefile:35` runs `go test ... || go test -v ...`. When the first pass fails, the retry frequently passes, and `make test` (and therefore `make check` and CI) reports green. Real failures are being swallowed. Observed on `next` with no PR applied: first `go test` pass failed, retry passed. Observed again while reviewing https://git.eeqj.de/sneak/neoirc/pulls/96 at `f24e33a`: `docker build --no-cache-filter=lint,builder .` run 1 failed with a data race in `TestIntegrationTwoClients` and then `panic: test timed out after 30s` in `internal/handlers`; run 2 passed clean. Build is nondeterministic, so no commit can currently be certified green. Contributing factor: `internal/handlers` takes 23-30s against a hard `-timeout 30s`, leaving no margin. Definition of done: - `make test` fails when any test fails. No `||` retry that can convert a red run into a green one. - The data race(s) in the `ircserver` integration tests are fixed (not skipped, not `-race` disabled). - The `internal/handlers` timeout margin is resolved, either by making the package faster or by a justified timeout that is not near the runtime. - Ten consecutive `docker build --no-cache .` runs pass on `next`.
sneak was assigned by clawbot 2026-09-03 15:49:35 +02:00
Author
Collaborator

Reassigned to clawbot: this issue asks no decision of sneak, only the fix in its definition of done. neoirc's main/next greening is owned by the green watch manager (sneak/project-management#20); PR 105's race fix is on next as 915f56ee, and the || retry, the internal/handlers timeout margin and the ten consecutive clean builds remain.

model: opus-5-5

Reassigned to clawbot: this issue asks no decision of sneak, only the fix in its definition of done. neoirc's `main`/`next` greening is owned by the green watch manager (https://git.eeqj.de/sneak/project-management/issues/20); PR 105's race fix is on `next` as `915f56ee`, and the `||` retry, the `internal/handlers` timeout margin and the ten consecutive clean builds remain. model: opus-5-5
sneak was unassigned by clawbot 2026-10-02 03:03:42 +02:00
clawbot self-assigned this 2026-10-02 03:03:42 +02:00
Author
Collaborator

Plan, for one worker, one PR against next:

next (729c671) already has the race fixes and the longer test timeout from #105; Makefile line 35 still runs go test ... || go test -v .... What is left:

  1. make test runs go test once, keeping -timeout 120s -race -cover, so a failing first pass fails make test, make check and the Docker build.
  2. Prove the tests hold without the retry: ten consecutive docker build --no-cache-filter=lint,builder . runs on the branch. Any failure or race that shows up is fixed at its cause in this PR: no t.Skip, no dropping -race, no raising the timeout to hide it. If any package runs anywhere near 120s, make it faster or justify the timeout in one line next to it.
  3. Commit and PR title: Run make test once so a failing test fails the build (closes #101).

Does not touch #96.

Model: opus-5-5

Plan, for one worker, one PR against `next`: `next` (`729c671`) already has the race fixes and the longer test timeout from https://git.eeqj.de/sneak/neoirc/pulls/105; `Makefile` line 35 still runs `go test ... || go test -v ...`. What is left: 1. `make test` runs `go test` once, keeping `-timeout 120s -race -cover`, so a failing first pass fails `make test`, `make check` and the Docker build. 2. Prove the tests hold without the retry: ten consecutive `docker build --no-cache-filter=lint,builder .` runs on the branch. Any failure or race that shows up is fixed at its cause in this PR: no `t.Skip`, no dropping `-race`, no raising the timeout to hide it. If any package runs anywhere near 120s, make it faster or justify the timeout in one line next to it. 3. Commit and PR title: `Run make test once so a failing test fails the build (closes #101)`. Does not touch https://git.eeqj.de/sneak/neoirc/pulls/96. Model: opus-5-5
Author
Collaborator

State, paused for host memory: branch fix/101-no-test-retry (37bde0d) has step 1 of the plan above, the single go test run in make test. Steps 2 and 3 remain: the ten consecutive builder-stage runs, then the PR against next. Without the retry, next (729c671) and main (e332440) each passed their first go test run.

Model: opus-5-5

State, paused for host memory: branch `fix/101-no-test-retry` (`37bde0d`) has step 1 of the plan above, the single `go test` run in `make test`. Steps 2 and 3 remain: the ten consecutive builder-stage runs, then the PR against `next`. Without the retry, `next` (`729c671`) and `main` (`e332440`) each passed their first `go test` run. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/neoirc#101