Split out of #2323, which enumerated every wall-clock budget in the repo's test
gates and fixed the Vitest, Testing Library and Playwright ones. Five rows in
its Group F/G were marked assess — they need a read that survey did not do,
and #2323 says so explicitly under "Follow-up work identified but not in scope".
The cheap, definite one (F6, hoisting the 19 scattered Playwright locator
budgets into scripts/lib/browser-timeouts.mjs) was folded in; these are the
rest.
Each needs the same two questions answered that #2323 answered for the others:
is this a ceiling on a poll or a fixed sleep, and is the number one
somebody chose for a machine running three or four concurrent worktree gates.
| # |
Site |
Current |
What to decide |
| F1 |
scripts/lib/announced-child.mjs:48-49 |
timeoutMs = 30_000, pollMs = 250 |
Bounds test-server readiness for every smoke that needs one, so it gates the widest surface of the five. |
| F4 |
scripts/lib/mcp-app-flow.mjs:177-179 |
goto 30_000, connect 45_000, ready 45_000 |
Predates browser-timeouts.mjs and duplicates its ui/roundTrip split by hand. Either adopt those constants or say why this flow differs. |
| F5 |
scripts/lib/deep-link-connect.mjs:60-61 |
goto 30_000, connect 45_000 |
Deliberately mirrors F4 — keep them shared, don't fork. Same call as F4. |
| F7 |
scripts/lib/pty.mjs:133 |
spawnSync(…, { timeout: 5000 }) |
Probes for script(1). A 5s bound on a process spawn under 8x oversubscription is thin, and its expiry means "no pty available" rather than "slow", so a false negative silently changes what the TUI smoke tests. |
| G1 |
.github/workflows/main.yml — no timeout-minutes on any job or step (5 jobs) |
GitHub's 360 min default |
Set an explicit per-job budget as a hung-job guard, not as a flake fix. Nothing in #2323's evidence implicates CI — GitHub runners are not the contended machine. sdk-watch.yml:119 already does this (timeout-minutes: 20) and is the precedent. |
Not in scope
Acceptance
- Each of the five rows is either changed with a comment saying what the budget
covers, or recorded on this issue as "keep, the default is correct" with the
reasoning.
- F4 and F5 end up sharing whatever they end up with.
- If any Playwright budget moves, it moves in
scripts/lib/browser-timeouts.mjs
(or joins it), not at a call site.
Split out of #2323, which enumerated every wall-clock budget in the repo's test
gates and fixed the Vitest, Testing Library and Playwright ones. Five rows in
its Group F/G were marked assess — they need a read that survey did not do,
and #2323 says so explicitly under "Follow-up work identified but not in scope".
The cheap, definite one (F6, hoisting the 19 scattered Playwright locator
budgets into
scripts/lib/browser-timeouts.mjs) was folded in; these are therest.
Each needs the same two questions answered that #2323 answered for the others:
is this a ceiling on a poll or a fixed sleep, and is the number one
somebody chose for a machine running three or four concurrent worktree gates.
scripts/lib/announced-child.mjs:48-49timeoutMs = 30_000,pollMs = 250scripts/lib/mcp-app-flow.mjs:177-179goto 30_000,connect 45_000,ready 45_000browser-timeouts.mjsand duplicates itsui/roundTripsplit by hand. Either adopt those constants or say why this flow differs.scripts/lib/deep-link-connect.mjs:60-61goto 30_000,connect 45_000scripts/lib/pty.mjs:133spawnSync(…, { timeout: 5000 })script(1). A 5s bound on a process spawn under 8x oversubscription is thin, and its expiry means "no pty available" rather than "slow", so a false negative silently changes what the TUI smoke tests..github/workflows/main.yml— notimeout-minuteson any job or step (5 jobs)360min defaultsdk-watch.yml:119already does this (timeout-minutes: 20) and is the precedent.Not in scope
setTimeout(r, N)with no condition always waits the full window, so raisingit slows every passing run and still races on a loaded one. Replace one with a
condition wait when it actually flakes (Flaky web test: ServerImportJsonModal debounce guard fails under a full parallel run #2250).
retry.verify:test-timeoutsenforces its absence, for thereason test-stability: eliminate timeout flakiness in the web test suite (zero-flake requirement) #1596 gives.
Acceptance
covers, or recorded on this issue as "keep, the default is correct" with the
reasoning.
scripts/lib/browser-timeouts.mjs(or joins it), not at a call site.