What happened
touched packages on PR #1438 went red on cmd/codeaf (2026-09-24, CI run 36037211855). The PR's only cmd/codeaf change is one new case in update_test.go; the failing test is elsewhere in the package:
--- FAIL: TestCloseAllJoinsStandingTickerAndLaterProcessCanStart (0.13s)
testing.go:1464: TempDir RemoveAll cleanup: unlinkat /tmp/codeaf-ci/TestCloseAllJoinsStandingTickerAndLaterProcessCanStart1246116880/003: directory not empty
FAIL github.com/Agent-Field/codeaf/cmd/codeaf 98.730s
Every assertion in the test passes. What fails is t.TempDir()'s own cleanup: something writes into one of the test's temp directories while Go is removing it, after closeAll() has returned. So some writer outlives closeAll, either the later process's standing ticker or another background writer v3TestProcess starts.
Replication
Deterministic (no model). On dev@c26ea9c98, with no other change:
go test -count=30 -run '^TestCloseAllJoinsStandingTickerAndLaterProcessCanStart$' ./cmd/codeaf/
This failed 1 time in 30 on a laptop, with the same TempDir RemoveAll cleanup … directory not empty line. Raising -count makes it show up more reliably.
Field (real models). Not applicable.
Acceptance
go test -count=200 -run '^TestCloseAllJoinsStandingTickerAndLaterProcessCanStart$' ./cmd/codeaf/ passes. The fix should make whatever writes into the test's temp tree after closeAll() returns stop before it returns, rather than retrying the cleanup or skipping the check. The test exists to prove that nothing writes after Close.
What happened
touched packageson PR #1438 went red oncmd/codeaf(2026-09-24, CI run 36037211855). The PR's onlycmd/codeafchange is one new case inupdate_test.go; the failing test is elsewhere in the package:Every assertion in the test passes. What fails is
t.TempDir()'s own cleanup: something writes into one of the test's temp directories while Go is removing it, aftercloseAll()has returned. So some writer outlivescloseAll, either the later process's standing ticker or another background writerv3TestProcessstarts.Replication
Deterministic (no model). On
dev@c26ea9c98, with no other change:This failed 1 time in 30 on a laptop, with the same
TempDir RemoveAll cleanup … directory not emptyline. Raising-countmakes it show up more reliably.Field (real models). Not applicable.
Acceptance
go test -count=200 -run '^TestCloseAllJoinsStandingTickerAndLaterProcessCanStart$' ./cmd/codeaf/passes. The fix should make whatever writes into the test's temp tree aftercloseAll()returns stop before it returns, rather than retrying the cleanup or skipping the check. The test exists to prove that nothing writes after Close.