Development record
2026-10-16 — The product thinker approved a measured trial of two preflights in their test stages at once, with the race stage kept to one at a time; the default stays one, and a person may raise it only for their own machine (load.preflights in ~/.abcd.noindex/config.json, or ABCD_LOAD_PREFLIGHTS), never from a repository file. So the setting takes 1 or 2 and nothing more: 3 and 4 are refused, saying the limit rises once a measured trial supports it. At the default of one the preflight runs exactly as before, its race gate opening at once.
decisiondcn-2610161814279204
2026-10-16 — The product thinker approved a measured trial of two preflights in their test stages at once, with the race stage kept to one at a time; the default stays one, and a person may raise it only for their own machine (load.preflights in ~/.abcd.noindex/config.json, or ABCD_LOAD_PREFLIGHTS), never from a repository file. So the setting takes 1 or 2 and nothing more: 3 and 4 are refused, saying the limit rises once a measured trial supports it. At the default of one the preflight runs exactly as before, its race gate opening at once.
Frontmatter
| id | dcn-2610161814279204 |
|---|---|
| type | decision |
| date | 2026-10-16 |
.abcd/work/decisions/dcn-2610161814279204-the-product-thinker-approved-a-measured.md
open on GitHub ↗ · commit history ↗
mentions6
- dcn-26101701411392862026-10-17 — Refines dcn-2610161814279204, the two-preflights trial (iss-2610161639025702), on how the two gates share the hold. Each gate now keeps its own hold record, the first gate's in load-wait.json, the name it had before the race gate existed, and the race gate's in load-wait-race.json, and a wait judges and takes only its own gate's record. A first gate's command hold, taken by --wait -- make preflight, lasts until its preflight starts its race run, up to sixty minutes. While it also shut the race gate, an earlier preflight's race waiter on the same account waited on it, and the holder's own race waiter, which the hold does not shut because the holder is its ancestor, queued behind that earlier race waiter, which started earlier and has the lower pid; neither moved until its timeout. Even without the cycle, the earlier preflight's race stage waited out the holder's whole test stages. Rejected: letting a race waiter beneath a holder jump the race queue, as the first gate's waiter beneath one does. It breaks the cycle but keeps the stall, and since the queue is read across accounts, it would let that race waiter open beside another account's race waiter queued ahead of it, two race stages at once. Cost of the chosen fix: the first gate is no longer shut for two minutes after a race gate opens, nor the race gate after a first gate opens; with two slots each running preflight still takes a slot, and the load limit still applies, so nothing the trial relies on is lost. An abcd released before the race gate reads only load-wait.json, as before.
- dcn-26101701445917422026-10-17 — Refines dcn-2610161814279204, the two-preflights trial (iss-2610161639025702), on a machine config.json that cannot be read for load.preflights. The load gate now reads past it: a file that others can write, that is not valid JSON, or whose load is not an object gives the default of one preflight at a time, and the waiter prints one line on stderr naming the file, the cause and how to fix it; a key under load that nothing reads is named on that line, and a usable load.preflights beside it still counts. Only a load.preflights that is there and unusable (out of range, or not a whole number), or an unusable ABCD_LOAD_PREFLIGHTS, refuses the wait. Reason: with one slot the gate never read that file before the setting existed, so refusing made a file that holds other machine settings stop every make preflight of a person who never set the count, a regression against main. This departs from the layered reader's rule that an unreadable file fails loudly; the note is what stays loud, and what a read past drops is only a count the file could not be trusted to carry, falling back to the setting's safe default. Rejected: keeping the refusal with a clearer message, which the branch had, since a person who never set the count still could not run a preflight without editing a file they did not know mattered.
- dcn-26101701494326652026-10-17 — Refines dcn-2610161814279204, the two-preflights trial (iss-2610161639025702), on a lone race run gated with --wait -- go test -race. With two slots a live race run does not shut the first gate by itself, and the command form's hold ends once its race run starts, so a second such run saw one unit of two busy and opened, two race runs at their full -p together. Chosen: a command-form waiter whose command is a race run (go, then test with -race, read as a race run's arguments are) is gated as a race run for both gates. Above one slot it stays shut while another race run is live, judges and takes the race gate's hold as well as the first gate's (its hold record is written to both), and every race gate and every other such waiter counts it as a race run from the moment it opens, its mark showing it running before its go test is in the table. With one slot nothing changes: the first gate is already shut by every race run and every running waiter, and the race gate opens at once. Rejected: letting a live race run shut every command-form first-gate waiter. It closes the same gap, but it also holds --wait -- make preflight shut through every other preflight's race stage, which is the overlap the trial exists to measure. A shell or make that runs a race run is not read into; only a command whose program is go is judged one.
- dcn-26102820400854032026-10-28 — The product thinker asked on 2026-10-28 for the machine's capacity to be used, so load.preflights now takes a whole number from 1 to 4 (MaxPreflightSlots rises from the 2 of the trial in dcn-2610161814279204), and above one slot a preflight queued at its race gate takes no first-gate slot until its race run starts (iss-2610282016250805). The grounds: one race run at a time, kept by the race gate, and the load wait limit stay the bounds; each stage's go test -p is still the cores divided among the slots, never below a quarter of them; and the count is the person's own machine setting, never a repository's, one by default.
- itd-2610262127138979A preflight waits for its turn as one whole run
- itd-2610262141001890abcd adjusts how many preflights run at once from what it recorded