Development record
abcd's wait and timeout defaults are fixed numbers, while what they wait for grows with the project. The load gate gives up after 30 minutes by default and after 2 hours in preflight, and go test kills a package at 10 minutes unless told otherwise. On 2026-10-17 two preflights here lost hours to these limits without any check failing: one waited the full 2 hours at the gate and gave up, and another was killed when one package took about ten minutes on a loaded machine. As a managed project gets more packages, tests and concurrent sessions, every fixed default is outgrown in turn, and each time a person or session must notice it and raise it by hand.
abcd's wait and timeout defaults are fixed numbers, while what they wait for grows with the project. The load gate gives up after 30 minutes by default and after 2 hours in preflight, and go test kills a package at 10 minutes unless told otherwise. On 2026-10-17 two preflights here lost hours to these limits without any check failing: one waited the full 2 hours at the gate and gave up, and another was killed when one package took about ten minutes on a loaded machine. As a managed project gets more packages, tests and concurrent sessions, every fixed default is outgrown in turn, and each time a person or session must notice it and raise it by hand.
Evidence 2026-10-24
Three of one session's preflights waited the full 2 hours at the load gate and gave up with no check failing, each after about 25 minutes of finished gates and eval lanes it then threw away: two shut by a load of 26 to 104 on 10 cores, and one by two other preflights holding both test-stage slots for the whole window. The same session's plain go test runs of internal/core/implement/... and internal/surface/cli hit go test's default 10-minute timeout twice under that load (iss-2610241130157455 and iss-2610241412028278 are the related hold-ups).
Frontmatter
| id | iss-2610171105560765 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | minor |
.abcd/work/issues/open/iss-2610171105560765-abcd-s-wait-and-timeout-defaults-are.md
open on GitHub ↗ · commit history ↗
mentions3
- iss-2610161639025702Preflight throughput sets the pace of all work on this machine, and nothing keeps it in bounds. On 2026-10-16 the load gate admitted one make preflight at a time, each took about 40 minutes, and about 20 waiters were queued across seven sessions. Every reviewed branch had its own preflight, so a seven-step feature needed seven full runs, and records-only branches paid the same full cost as code. Sessions waited hours, and the queue's ordering after the reboot starved late waiters (fixed separately on fix/load-queue-start-order). No rule tells sessions to batch work, and no part of preflight scales its cost to what a change touches.
- iss-2610241130157455Plain go test runs that sessions start outside the load gate keep the one-minute load above the gate's limit, so the gated preflights starve: on 2026-10-24 three preflights of this account waited 18, 36 and 54 minutes at 'abcd implement load --wait' (load 26 to 76 against a limit of 20 on 10 cores) while three ungated 'go test -timeout 40m' runs of other sessions (internal/surface/cli, internal/core/identity and its neighbours) ran beside them, and the session filing this had itself run internal/core/implement/... and internal/surface/cli ungated earlier the same morning. The gate counts a running make preflight and a go test -race run as occupancy, but a plain go test only as load, so the runs that skip the gate are the ones that hold it shut for the runs that use it.
- iss-2610241412028278A session holding several push-ready branches drives each through preflight and landing by hand: on 2026-10-24 this session had four (docs/itd-82-landed-steps, fix/landing-marks-step-landed, fix/lapsed-release-hold, fix/name-ungated-tests), and with the rule relayed that day of one preflight per session at a time it started each preflight itself, watched for the 2-hour gate timeout (three runs timed out and had to be restarted by hand), ran 'abcd land' after each that passed, and kept the order in its own notes and wake-ups. No verb holds a session's queue of branches, so the chaining, the re-queue after a timeout and the landing all depend on the session staying alive and remembering.