internal/session: two tests fail only while other suites run beside them — a 40 ms wall-clock audit window, and a write under the home after Close
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 68/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- go
- 領域
- backend, testing-qa
調査の方向性
Start with the two named tests in internal/session/task_settle_test.go and internal/session/retiredpin_wire_test.go, then reproduce them under the supplied GOMAXPROCS=2 busy-loop commands. Trace the audit-window behavior and Agent.Close lifecycle, including errand writers under <CODEAF_HOME>/v3. Done means both -count=200 loops pass under load three times, the post-Close home probe finds no late writes, and touched packages remain green without a rerun.
索引モデルが issue の本文から書いたものです。
説明
What happened
Two internal/session tests fail only while other test suites run beside them on the same machine. Each passes when run alone. CLAUDE.md treats a failure like this as a bug report rather than a flake to rerun, so here it is. Both were seen during make pr-ready BASE=origin/dev runs for #1410 (santos/dev2) on 2026-09-24, and neither test file is touched by that branch. retiredpin_wire_test.go came to dev with #1108, and task_settle_test.go was last changed on dev in #949.
1. TestAStalledCheckerIsNamedAsAStallEvenWhenItSpentTheWindow (task_settle_test.go):
=== RUN TestAStalledCheckerIsNamedAsAStallEvenWhenItSpentTheWindow
task_settle_test.go:315: the report does not say what actually happened to the calls:
the check ran out of time before a call could be made — it had 40ms
Wrote greet.go with the greeting.
--- FAIL: TestAStalledCheckerIsNamedAsAStallEvenWhenItSpentTheWindow (0.75s)
The test sets config.auditWindow = 40 * time.Millisecond, a real wall-clock window, and scripts a checker that never answers on either of its two attempts. It expects the report to say the calls were abandoned. On a loaded box the 40 ms ran out before the first checker call was placed, so the report took the other true branch, "ran out of time before a call could be made". The assertion depends on the scheduler, not the code.
2. TestAnErrandBesideTheTurnDoesNotCarryTheTalkPin (retiredpin_wire_test.go):
=== RUN TestAnErrandBesideTheTurnDoesNotCarryTheTalkPin
testing.go:1464: TempDir RemoveAll cleanup: unlinkat /tmp/TestAnErrandBesideTheTurnDoesNotCarryTheTalkPin1419077516/001/v3: directory not empty
--- FAIL: TestAnErrandBesideTheTurnDoesNotCarryTheTalkPin (0.01s)
001 is the test's home.EnvVar directory. Something still writes under <home>/v3 after the test's agent.Close() cleanup has returned. The write races t.TempDir's RemoveAll, and it lands inside the removal only when the box is slow. The likely writer is the errand the test name refers to (a side call made beside the turn), or its journal, still running after Close. This is the same late-write-after-close class as #1198 and the cmd/codeaf hosted-welcome test (#1492). #1441 lists other load-only reds on the same branch; these two are not on it.
Replication
Deterministic (no model). Neither needs a key. Load the box, then loop the one test:
# load: one busy loop per core, stopped afterwards with `kill %1 %2 ...` or `pkill -x yes`
for i in $(seq "$(nproc)"); do yes >/dev/null & done
GOMAXPROCS=2 go test -count=200 -run '^TestAStalledCheckerIsNamedAsAStallEvenWhenItSpentTheWindow$' ./internal/session/
GOMAXPROCS=2 go test -count=200 -run '^TestAnErrandBesideTheTurnDoesNotCarryTheTalkPin$' ./internal/session/
Without the load the same loops pass: 20 of 20 and 50 of 50 on both santos/dev2 and its base. The only sightings so far are one failure of each inside a whole make pr-ready (the light gate plus every package the branch touches, internal/session among them, run beside internal/tui3). How often the loaded loop above fails has not been measured yet; the first job of whoever takes this is to get it failing on demand.
Field. Not needed. No model is involved.
Where
internal/session/task_settle_test.go,TestAStalledCheckerIsNamedAsAStallEvenWhenItSpentTheWindow. Search forconfig.auditWindow = 40 * time.Millisecond. The two report sentences arecheckerWindowClosed/ "without answering and was abandoned" and "ran out of time before a call could be made".internal/session/retiredpin_wire_test.go,TestAnErrandBesideTheTurnDoesNotCarryTheTalkPin, together with whateverAgent.Closeleaves running that writes under<CODEAF_HOME>/v3.
The fix
- The audit window in that test runs on the test's own clock, or the checker's first call is proven placed before the window is allowed to close, so the test asserts the stall sentence and never the scheduler.
Agent.Closewaits for everything it started that writes under the home, errands included, before it returns. This follows the close law #1259 and #1274 set for the process. AfterClosereturns, nothing writes under the home. The test must not be changed to skip the cleanup.
Acceptance
- Unit (under load): both
-count=200loops above are green with one busy loop per core running, three times in a row. - Unit (law): a probe that walks
<home>for files modified afteragent.Close()returned, after a 2-second wait, finds none for the talk-pin test's agent. touched packageson the next promotion stays green without a rerun.
- 主要言語
- Go
- スター
- 115
- フォーク
- 14
- 平均マージ
- 9時間 38分
- マージ済み PR(30日)
- 749
環境構築
このプロジェクトの環境構築ファイルはまだ確認していません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Agent-Field/CodeAF のほかの issue
-
area:chat feature
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
Agent-Field/CodeAF#1510 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
Agent-Field/CodeAF#1489 ·
メンテナーはふだん 1 日以内に返信
-
area:chat bug good first issue sev:papercut
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Agent-Field/CodeAF#1470 ·
メンテナーはふだん 1 日以内に返信
-
area:chat bug good first issue sev:papercut
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
Agent-Field/CodeAF#1469 ·
メンテナーはふだん 1 日以内に返信
-
area:chat bug sev:papercut
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
Agent-Field/CodeAF#1468 ·
メンテナーはふだん 1 日以内に返信
Agent-Field/CodeAF の issue をすべて見る
似ている issue
-
enhancement low priority
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
eugenioenko/ttt#674 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
GoogleCloudPlatform/k8s-config-connector#13462 ·
メンテナーはふだん 1 日以内に返信
-
bug good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
vavallee/bindery#2793 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信