mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-09 20:26:33 +00:00
The drill's space check required FREE >= PULLED, but the run is killed from outside by matrix.py's watchdog as soon as the runner drops below 6G free. The check knew nothing about that floor, so it waved through a drill that could not finish: 19008M free against a 13961M pulled tree passes FREE >= PULLED, and the sync then leaves 5047M, which is under the floor. That is what happened to the arch swarm drill in run 30830377785. The device sync reported the marker at 19:16:38.34, the watchdog fired at 19:16:39.73 on its next 30s tick, and the step died with rc 75 thirteen minutes into work that was already doomed when the precondition ran. The requirement is PULLED + FLOOR, not FREE >= PULLED and not 2 * PULLED. FREE is measured after the pull, so the first copy is already deducted; exactly one further copy is ever added on top of it - the device copy during the sync, and later the restore root, by which time base.sh has deleted the pulled tree. The two extra copies are sequential, never simultaneous. matrix.py owns the floor now and exports it as INFINITO_DISK_FLOOR_MB. It was previously a bare `6 * 2**30` the shell had no way to see, which is why the two sides could disagree about what "enough disk" means. This makes the failure honest and immediate; it does not create disk. The arch runner is short by about 1.1G, and closing that needs a capacity decision - bigger runner, smaller test dataset, or reclaiming build cache before the drill. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>