I0902 — Objekt nasazení se stává typovaným Rustem, který odmítá nesmysly
Zpracovat kanonický objekt nasazení do silně typovaného Rustu — výčty a newtypy místo řetězců — a validovat jej tak, aby nasazení, které nemůže fungovat, bylo odmítnuto dříve, než se cokoli sestaví.
HOTOVO vlna 1 · p0 · profil implementation · bezpečné paralelně
Součást fly-deployment — Image kontejneru je projekcí modelu repozitáře a jeho smoke test je jeho důkazem.
Cíl
Zpracovat kanonický objekt nasazení do silně typovaného Rustu — výčty a newtypy místo řetězců — a validovat jej tak, aby nasazení, které nemůže fungovat, bylo odmítnuto dříve, než se cokoli sestaví.
Proč
Generování z nevalidovaného dokumentu vytvoří Dockerfile, který vypadá platně a míří na binárku, která neexistuje. Validace je bod, ve kterém chyba v nasazení stojí selhání testu místo selhání produkčního rolloutu.
Aktuální stav
apps/majordomus-cli/src/deploy/ existuje a parsuje objekt nasazení do typovaných struktur a apps/majordomus-cli/src/capability/builtin/deploy.rs jej projektuje přes registr. Stejně jako u I0901 se práce dostala na master, aniž by byla kdy zaznamenána k úkolu. Změřeno na masteru 6042f4286, 2026-09-10; zde není označeno jako dokončené, protože validace tohoto úkolu nebyla nad tímto stromem znovu spuštěna.
Cílový stav
Modul deploy parsuje objekt do typovaných struktur, validuje každý invariant, který lze rozhodnout lokálně, a hlásí selhání, které jmenuje soubor, klíč, co bylo špatně a co dělat.
Rozsah
- apps/majordomus-cli/src/deploy
Mimo rozsah
- Projekce provideru; to je I0913
- Jakékoli síťové volání, jakékoli spuštění procesu, jakýkoli přístup k API Fly
- Obecná hierarchie traitů pro více poskytovatelů pro jediného poskytovatele
Závislosti
Co na tom čeká
- I0903HOTOVO Čtení nasazení se deklaruje jednou a promítá se všude
- I0904HOTOVO Adresa, na které se naslouchá, je jeden fakt se dvěma projekcemi
- I0905PŘIPRAVENO Liveness a readiness jsou registrované schopnosti, ne hacky routeru
- I0907PŘIPRAVENO Běžící proces říká, co je zač, z povolenky
- I0908PŘIPRAVENO Hostovaný proces nemá repozitář a řekne to místo selhání
- I0909ZABLOKOVÁNO Produkční image je vygenerovaná projekce specifikace buildu
- I0913ZRUŠENO Konfigurace providera se generuje a levný profil je deklarován
- I0918ZRUŠENO Bootstrap přihlašovací údaj se použije jednou a nepatří nikomu
Kritéria přijetí
- Porty, paměť, třída CPU, počty strojů a trasy jsou typované, ne řetězce, a neplatnou hodnotu nelze vytvořit
- Validace odmítne nulovou paměť, neplatný port, trasu zdraví nebo připravenosti, kterou nezaregistruje žádná schopnost, balíček nebo binárku, kterou workspace neobsahuje, vstup sestavení, který se nevyřeší, a minimální počet běžících nad počtem strojů
- Každé odmítnutí jmenuje zdrojový soubor, klíč, pozorovanou hodnotu a nápravu
- Testy vlastností pokrývají invarianty, které musí platit pro jakýkoli přijatý objekt, ne jen příklady v repozitáři
- Unit testy pokrývají každé odmítnutí
Validace
- cargo test --workspace --all-features
- cargo clippy --workspace --all-targets --all-features -- -D warnings
Požadované důkazy
- typed_parse
- validation_refuses
- property_invariants
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| typed_parse | test | cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --lib deploy::tests | test result: ok. 30 passed; 0 failed (run 2026-10-14 between 07:40Z and 07:58Z on master ce5959db59) | ce5959d |
| validation_refuses | test | cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --lib deploy::tests | test result: ok. 30 passed; 0 failed (run 2026-10-14 between 07:40Z and 07:58Z on master ce5959db59) | ce5959d |
| property_invariants | test | cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --lib deploy::tests | test result: ok. 30 passed; 0 failed (run 2026-10-14 between 07:40Z and 07:58Z on master ce5959db59) | ce5959d |
Riziko
Validace tras potřebuje registr schopností, takže model nasazení závisí na indexu. Číst registr, který už existuje, je správně; sestavovat druhý seznam tras, aby se závislosti předešlo, není.
Časová osa
- zahájeno
- 2026-10-14T08:00:59Z
- ověřeno
- —
- dokončeno
- 2026-10-14T08:01:10Z
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/I0902.yaml. Přečtěte ho zpět pomocí majordomus plan show I0902.