Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

I2398 — Derive přesunutý na jiný stroj čeká na řadu v deklarované frontě

Udělat z derive offload schopnost spustitelného souboru: hostitelé a jejich limity deklarované jednou pod .ai/repo, hostitel vybraný podle volného disku a délky fronty, fronta FIFO na hostiteli, v níž lístek mrtvého čekatele nikoho neblokuje, vlastní adresář buildu pro každý derive a okružní cesta bundle-in/bundle-back s jejími odmítnutími, testovaná bez sítě a zdokumentovaná.

HOTOVO vlna 0 · p1 · profil implementation · bezpečné souběžně

Součást development-runtime — The runtime has a development surface.

Cíl

Udělat z derive offload schopnost spustitelného souboru: hostitelé a jejich limity deklarované jednou pod .ai/repo, hostitel vybraný podle volného disku a délky fronty, fronta FIFO na hostiteli, v níž lístek mrtvého čekatele nikoho neblokuje, vlastní adresář buildu pro každý derive a okružní cesta bundle-in/bundle-back s jejími odmítnutími, testovaná bez sítě a zdokumentovaná.

Proč

Každá relace odvozuje svou větev na jiném stroji pomocí ~/dev/.derive-offload.sh, skriptu mimo repozitář, který nic netestuje ani nerecenzuje. Změřeno 2026-10-11 00:18Z na lundra: jeden derive běží najednou 11 až 13 minut a pět čekalo, nejstarší 2 h 12 min, protože zámek hostitele byl `until mkdir; do sleep 15`: závod, ve kterém může poslední příchozí vyhrát pokaždé, ne fronta. Verze v2 napsaná té noci přidává volbu hostitele, FIFO frontu ticketů a minimum volného disku, ale je to opět soubor v domovském adresáři s hostiteli v něm vypsanými. V 00:25Z na druhém MacBooku derive spuštěný kolem zámku znovu postavil sdílený build adresář pod běžícím offloadovaným derive a stage C odmítla s `this executable is not of this tree's generation`.

Aktuální stav

Offload je ~/dev/.derive-offload.sh (v1, souběh mkdir) a ~/dev/.derive-offload-v2.sh (v2, FIFO lístky, volba hostitele, soukromý adresář sestavení). Oba nesou ve zdrojovém kódu dvě adresy hostitelů a minimum 10 GiB. Nic v repozitáři nedeklaruje hostitele, netestuje frontu ani nedokumentuje cestu tam a zpět.

Cílový stav

`majordomus offload derive <worktree>` dělá to, co v2, s hosty a limity čtenými z .ai/repo/offload/derive.yaml (druh derive-offload, schéma derive-offload/v1). `offload hosts` vypíše deklaraci a `offload probe` změří každého hosta a jmenuje toho, kterého by derive vzal. Fronta se rozhoduje v Rustu nad pozorováními hosta: dva čekající se obsluhují v pořadí příchodu, lístek mrtvého čekajícího se odstraní, zámek, jehož držitelé jsou všichni mrtví, se nahlas převezme a na zámek bez souboru držitele (čekajícího z v1 nebo v2) se čeká. Každý derive se staví ve vlastním copy-on-write klonu sdíleného build adresáře, který se na konci odstraní. Jeho cesty fronty a názvy lístků jsou z v2, takže oba druhy čekajících se navzájem vidí, zatímco relace přecházejí.

Rozsah

  • .ai/repo/offload/derive.yaml
  • .ai/repo/offload/README.md
  • share/schemas/majordomus/derive-offload/derive-offload.v1.schema.json
  • share/kinds.yaml
  • .ai/repo/knowledge/sources.yaml
  • apps/majordomus-cli/src/offload/mod.rs
  • apps/majordomus-cli/src/offload/declaration.rs
  • apps/majordomus-cli/src/offload/queue.rs
  • apps/majordomus-cli/src/offload/host.rs
  • apps/majordomus-cli/src/offload/remote.rs
  • apps/majordomus-cli/src/offload/run.rs
  • apps/majordomus-cli/src/commands/offload.rs
  • apps/majordomus-cli/src/cli.rs
  • apps/majordomus-cli/tests/offload.rs
  • .ai/repo/rules/project/a-derive-offload-waits-its-turn.v1.md
  • docs/OFFLOAD.md
  • .ai/repo/project/issues/I2398.yaml
  • docs/generated
  • site/content
  • site/data

Mimo rozsah

  • Vyřazení ~/dev/.derive-offload.sh a ~/dev/.derive-offload-v2.sh: jsou mimo repozitář a instance běží; relace přecházejí tím, že místo toho volají příkaz.
  • Instalace spustitelného souboru na hostitele nebo provoz hubu tam: hostitel potřebuje git, checkout tohoto repozitáře a toolchain, kterým se scripts/derive sestavuje, nic z této změny.
  • Udržování sdíleného adresáře buildu v teple ze soukromého adresáře dokončeného derive: v2 ne, a vyměnit jej pod builderem, který ignoruje zámek, je přesně to selhání, které tento úkol odstraňuje.

Závislosti

Žádné. Tento úkol je kořenem grafu.

Kritéria přijetí

  • Hostitelé, jejich soubory identit ssh, minimum volného disku, cesty front a vzdálené rozložení se čtou z .ai/repo/offload/derive.yaml a validují proti derive-offload/v1; žádná adresa hostitele není zapsána v crate ani ve skriptu
  • Dva čekající jsou obslouženi v pořadí příchodu a tiket, jehož čekající je mrtvý, se odstraní a nezablokuje další; doloženo proti skutečnému adresáři hostitele se skutečnými procesy
  • Host pod svým minimem volného disku nebo ten, který neodpovídá, se přeskočí a zvolí se host s nejméně běžícími nebo čekajícími derivacemi, shody rozhoduje pořadí deklarace
  • Derive přesunutý přes lokální náhradu ssh se vrátí staged a necommitnutý; probíhající merge cestuje s oběma rodiči; nesledované soubory, nevyřešený merge a derive, který smaže sledovaný soubor, jsou každý odmítnuty
  • Adresář buildu derive je jeho vlastní: build do sdíleného adresáře za běhu derive nenahradí spustitelný soubor, kterým se odvozuje
  • docs/OFFLOAD.md dokumentuje příkaz, deklaraci, frontu a etiketu nástěnky a mesh a pravidlo project.a-derive-offload-waits-its-turn jmenuje testy

Validace

  • cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --lib offload::
  • cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --test offload
  • bin/majordomus plan validate

Požadované důkazy

  • offload_queue_fairness_test
  • offload_round_trip_test

Důkazy

pokrývátypcommandvýsledeku commitu
offload_queue_fairness_testtestcargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --lib offload::queuetest result: ok. 16 passed; 0 failed (run 2026-10-14 between 07:40Z and 07:58Z on master ce5959db59)ce5959d
offload_round_trip_testtestcargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --test offload a_derive_comes_back_staged_and_uncommittedtest result: ok. 1 passed; 0 failed (run 2026-10-14 between 07:40Z and 07:58Z on master ce5959db59)ce5959d

Časová osa

zahájeno
2026-10-14T07:59:13Z
ověřeno
—
dokončeno
2026-10-14T07:59:22Z

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.

Kanonický záznam: .ai/repo/project/issues/I2398.yaml. Přečtěte jej zpět pomocí majordomus plan show I2398.

Prohledává názvy a popisy všech stránek, které tento web publikuje.