I3839 — A build that cannot take its build directory's lock never falls back to a cold private directory below the free-disk bound: it waits, bounded, or refuses naming the bound and the holder
Make lib/rust_bin.sh's mj_cargo_bounded, when the shared build directory's lock is held past its wait, consult the free-disk bound before it moves the build to mj_cargo_private_dir: above the bound it may go private as today; at or below it, it keeps waiting within a stated bound and then refuses with the free space, the bound and the lock's holder, never starting a cold private build.
PŘIPRAVENO vlna 0 · p1 · profil implementation · bezpečné souběžně
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I3839 bude přijato.
Cíl
Make lib/rust_bin.sh's mj_cargo_bounded, when the shared build directory's lock is held past its wait, consult the free-disk bound before it moves the build to mj_cargo_private_dir: above the bound it may go private as today; at or below it, it keeps waiting within a stated bound and then refuses with the free space, the bound and the lock's holder, never starting a cold private build.
Proč
Measured by f8 at 06:3xZ on 2026-10-21: `scripts/rust-check --quality` timed out on the shared build directory's lock, held by two other cargo runs, silently fell back to a cold build in ~/.cargo/build-private/<cksum>, and grew it to 5.3 GB while the volume held 32-35 GiB free, under the owner's 35 GiB floor of 2026-10-21. The same fallback built a cold private directory under a commit hook of dev-03's the same night. With several builds waiting, every one of them goes private at once, which multiplies the disk use exactly when the disk is lowest.
Aktuální stav
mj_cargo_bounded waits on cargo's \"Blocking waiting for file lock\" and then rebuilds in mj_cargo_private_dir (a cold one compiles every dependency once) whatever the free space; the floor (MAJORDOMUS_MIN_FREE_MB, default 5120) is checked only before the first build starts.
Cílový stav
No build goes private below the bound; a refused one says why and what holds the lock, and the bound is the one the floor and the owner's relaxation name.
Rozsah
- lib/rust_bin.sh
- bin/majordomus-cli
- docs/DEVELOPMENT_RUNTIME.md
Mimo rozsah
- The number of concurrent builders (I3825)
- A hook's build (I3831)
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- With the shared lock held by a fixture process and free space reported below the bound, a build never creates a private build directory and ends with a refusal naming the free space, the bound and the holder's pid
- With free space above the bound the fallback to a private directory works as before
- The refusal is reached within the stated wait bound, never an unbounded wait
Validace
- bash test/run.sh 3849_a_locked_build_never_goes_private_below_the_disk_bound
- bin/majordomus plan validate
Požadované důkazy
- a_locked_build_never_goes_private_below_the_disk_bound_test
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3839.yaml. Read it back with majordomus plan show I3839.