Observed (2026-08-01, ~05:56-05:59 local)
A builder (aspir-1286) ran the unit + CLI-integration suites plus manual real-agy verification. Within the same two-minute window the user got a burst of dozens of agy login browser windows — the #1077 forkbomb, back through a path the #1250 fix explicitly does not cover.
Evidence from the user-global consult metrics DB (consult stats --json):
- 8 gemini + 2 codex invocations timestamped within ~1.5s (12:58:57-58Z), all 0.0s duration
workspace_path values are throwaway test dirs: /var/folders/.../codex-test-mmxOf7, .../codev-consult-test-1785589137328
- one gemini row carries
error_message: "agy timed out producing the review" — a real agy spawn attempt from a test process
- An identical fingerprint exists from 2026-07-25 06:11 (8× gemini 0.0s + 2× codex 0.0s), so this happens on every suite run that exercises these paths; it only becomes visible when agy happens to want login (agy updated to 1.1.9 on 07-31, which triggered re-auth)
This also matches the earlier report on #1077 of a tab burst while running pnpm --filter @cluesmith/codev test:e2e:cli.
Why the #1250 fix doesn't help here
Two deliberate design points of the auth cache compose badly in the test path:
agyAuthCacheDisabled() returns true under VITEST unless CODEV_AGY_AUTH_CACHE_DIR is set — correct for keeping unit tests off the developer's real ~/.cache/codev, but it also means burst protection is off for any test that reaches the real lane. Spawned codev consult child processes inherit VITEST from the runner's env, so CLI-integration/e2e children are inert too.
- Tests that don't pin a fake agy resolve the real binary from PATH. Pre-flight disabled + real binary = unconditional spawn per test = one login window per spawn when agy is unauthenticated.
Separately, those same child processes record into the real user-global metrics DB (rows id ~35478-35487 and counting) — every suite run appends ~10 junk rows with test-temp workspace paths, silently skewing consult stats.
Fix directions (for the builder to evaluate)
- The test harness (unit setup + the helpers that spawn
codev consult subprocesses in CLI-integration/e2e) should pin CODEV_AGY_BIN (or equivalent) to a fake agy unconditionally, so no test can resolve the real binary by omission.
- Consider a belt-and-braces guard in
runAgyConsultation: refuse to spawn a real agy when running under a test environment (VITEST/CODEV_TEST-style detection) without an explicit opt-in — misconfigured future tests should fail loudly, not open browser windows.
- Metrics isolation: same treatment as the auth cache — tests pin a metrics DB path into their temp dir (or metrics writes are inert under test env unless a path is pinned). Consider whether the existing junk rows warrant a one-off scrub.
- Builders doing deliberate real-agy manual verification (as aspir-1286 legitimately did) are out of scope — the issue is tests spawning real agy by omission.
Acceptance criteria
Related
Observed (2026-08-01, ~05:56-05:59 local)
A builder (aspir-1286) ran the unit + CLI-integration suites plus manual real-agy verification. Within the same two-minute window the user got a burst of dozens of agy login browser windows — the #1077 forkbomb, back through a path the #1250 fix explicitly does not cover.
Evidence from the user-global consult metrics DB (
consult stats --json):workspace_pathvalues are throwaway test dirs:/var/folders/.../codex-test-mmxOf7,.../codev-consult-test-1785589137328error_message: "agy timed out producing the review"— a real agy spawn attempt from a test processThis also matches the earlier report on #1077 of a tab burst while running
pnpm --filter @cluesmith/codev test:e2e:cli.Why the #1250 fix doesn't help here
Two deliberate design points of the auth cache compose badly in the test path:
agyAuthCacheDisabled()returns true underVITESTunlessCODEV_AGY_AUTH_CACHE_DIRis set — correct for keeping unit tests off the developer's real~/.cache/codev, but it also means burst protection is off for any test that reaches the real lane. Spawnedcodev consultchild processes inheritVITESTfrom the runner's env, so CLI-integration/e2e children are inert too.Separately, those same child processes record into the real user-global metrics DB (rows id ~35478-35487 and counting) — every suite run appends ~10 junk rows with test-temp workspace paths, silently skewing
consult stats.Fix directions (for the builder to evaluate)
codev consultsubprocesses in CLI-integration/e2e) should pinCODEV_AGY_BIN(or equivalent) to a fake agy unconditionally, so no test can resolve the real binary by omission.runAgyConsultation: refuse to spawn a real agy when running under a test environment (VITEST/CODEV_TEST-style detection) without an explicit opt-in — misconfigured future tests should fail loudly, not open browser windows.Acceptance criteria
Related
test:e2e:cli