This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

Preflight 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.

issueopenminoriss-2610161639025702

Preflight 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.

Evidence 2026-10-16 (abcd-a2, measured on this machine: 16 cores, macOS)

What a preflight costs

  • No model tokens. make preflight is local work only: format, lint and record gates, build, vet, unit tests, race tests, and the two eval lanes, which are build-tagged Go tests of about five seconds each. Its cost is CPU, memory and wall-clock time.
  • Wall-clock, from today's logs. Each figure is gate wait plus run.
Branch Total Waiting at the gate Running
embargo store fix 61 min 37.5 min about 23 min
messaging step 4 86 min 62 min about 24 min

The run takes about 23 to 24 minutes; the wait is the larger part.

What the queue costs

  • Race runs queued alone, without a preflight, waited at the gate:
    • 17 min (an independent reviewer's run);
    • 33 to 37 min (three sub-agents' checks);
    • one never opened inside its 2 h timeout (messaging step 3, fix round 2).
  • Depth. About 20 waiters were queued across seven sessions at 17:30. Six of this session's branch preflights were then folded into two integration branches, to cut its share to two runs.
  • Load. The gate's limit is 32 (2 × 16 cores). The one-minute load ran 38 to 75 through the afternoon and reached 164 after the reboot. Most of that was the operating system re-indexing (Spotlight, fseventsd, the VPN network extension), not test work, and it held the gate shut regardless.
  • Ordering. After the reboot, process ids wrapped. Pid-ordered admission then starved waiters started earlier, a separate defect fixed on fix/load-queue-start-order.

Where tokens actually go around preflights

  • Waiting is cheap. A session waiting on a gated preflight in the background reads one short notice and a few tail lines: hundreds of tokens.
  • Fix rounds cost the most. A fix-round sub-agent that runs the full package suites itself used about 200,000 to 390,000 tokens per round. Most of that was reasoning and reading code; the test output was the smaller part.
  • Reviews cost less. A review pair used about 60,000 to 240,000 tokens per reviewer.

Next measurement. A trial tonight runs two preflights at once, with the race stage kept to one at a time (feat/two-preflights). It will record each run's wall-clock, its peak one-minute load, and the gate waits, against these one-at-a-time figures. Resource-derived admission is iss-2610161756384596.

Evidence 2026-10-16 evening: waiters timing out at the gate

At about 20:00 the gate held 23 waiter processes across sessions, admitting one preflight at a time.

  • One session's preflight reached the Makefile's two-hour gate limit twice without any check failing. The second time, 8 waiters were ahead of it.
  • A retry rejoins at the back of the queue: a new pid under the pid order, and a new start under the start-time order.
  • The work-around in use is an outer abcd implement load --wait --timeout 8h -- make preflight, which keeps its place while the inner gate takes over.
  • One session folded four reviewed branches into one, to need one preflight instead of four.
  • A review's own race run also timed out after its 30-minute default without running a test.

Evidence: 2026-10-24

Two records-only branches (four issue records, and a draft intent with its index) failed abcd land five times between 16:20 and 23:19 CEST without a check failing:

  • once on a smoke lane killed at its 10-minute limit while seven preflights ran on the machine;
  • four times on the load gate's 2-hour wait, with first six and later two waiters ahead, the oldest waiting more than five hours.

Each retry re-ran every stage before the gate (about 20 minutes) and rejoined the queue at the back. A records-only change still needed the full build, test and race stages to earn the receipt the pre-push hook asks for (iss-2610171105560765 holds the timeout half).

Further evidence 2026-10-27 (abcd-1, build itd-82 lane-1)

  • The implement loop's landing commits its own records after the lane's preflight has passed: the spec step's landed: mark and the receipt's issue resolution, as one records-only commit (808720029 on build/run-2610260500113538-lane-1). That commit is the lane's new head, so the landing waits for a second whole make preflight before it pushes. The first, on 6594725b5, had passed at 09:24Z. The second started at 09:59Z, with the machine's shutdown window closing, for a diff that touches two record files and no code.

Frontmatter

idiss-2610161639025702
typeissue
lifecycleopen
severityminor

References1

mentions8