test/session/prompt.test.ts's "loop includes MCP instructions in model system context" is failing consistently on dev HEAD, independent of any feature branch — confirmed on 5+ consecutive dev CI runs since 2026-09-06 (e.g. run 34288658587, job unit (linux)).
Signature is the same every time: InterruptError: All fibers interrupted without error, always at ~20.5s-21.1s — a tight cluster, not the wide variance you'd expect from generic CI-load contention (compare to the subprocess cold-start flakes fixed in #162, which varied by hundreds of ms around their bound).
Suspicion: the test deliberately hangs the mock LLM response (llm.hang(), backed by Stream.never) while asserting the SSE request body contains MCP instructions. A ~20s clustering this tight smells like a fixed idle/read timeout somewhere in the HTTP client stack (Bun's fetch, or Effect's FetchHttpClient) firing on a stream that intentionally never emits bytes, not an actual hang in prompt.loop itself.
Not investigated further yet — flagging so it can be dug into without blocking unrelated feature PRs (#161, #162), which skip this specific test with a link to this issue in the interim.
test/session/prompt.test.ts's "loop includes MCP instructions in model system context" is failing consistently ondevHEAD, independent of any feature branch — confirmed on 5+ consecutivedevCI runs since 2026-09-06 (e.g. run 34288658587, jobunit (linux)).Signature is the same every time:
InterruptError: All fibers interrupted without error, always at ~20.5s-21.1s — a tight cluster, not the wide variance you'd expect from generic CI-load contention (compare to the subprocess cold-start flakes fixed in #162, which varied by hundreds of ms around their bound).Suspicion: the test deliberately hangs the mock LLM response (
llm.hang(), backed byStream.never) while asserting the SSE request body contains MCP instructions. A ~20s clustering this tight smells like a fixed idle/read timeout somewhere in the HTTP client stack (Bun'sfetch, or Effect'sFetchHttpClient) firing on a stream that intentionally never emits bytes, not an actual hang inprompt.loopitself.Not investigated further yet — flagging so it can be dug into without blocking unrelated feature PRs (#161, #162), which skip this specific test with a link to this issue in the interim.