I0909 — Produkční image je generovaná projekce specifikace buildu
Vygenerovat vícestupňový build kontejneru a jeho ignore soubor ze specifikace buildu objektu nasazení: připnutý runtime Alpine, který drží binárku, runtimové prostředky a nic jiného, spouštěný neprivilegovaným uživatelem.
BLOKOVÁNO vlna 3 · p0 · profil deep-work · bezpečné paralelně
Součást fly-deployment — Image kontejneru je projekcí modelu repozitáře a jeho smoke test je jeho důkazem.
Blokováno. Tento úkol nemůže začít, dokud není hotov I0905. Stav je z toho odvozen, ne deklarován.
Cíl
Vygenerovat vícestupňový build kontejneru a jeho ignore soubor ze specifikace buildu objektu nasazení: připnutý runtime Alpine, který drží binárku, runtimové prostředky a nic jiného, spouštěný neprivilegovaným uživatelem.
Proč
Ručně psaný Dockerfile je druhý popis binárky, assetů a portu. Generování zachovává jeden popis; připnutí základu podle digestu zachovává image reprodukovatelný; minimální runtime stage udržuje malý útočný povrch i účet.
Aktuální stav
deploy/Dockerfile existuje a je generovaný: apps/majordomus-cli/src/deploy/render.rs ho vykresluje spolu s .dockerignore z objektu nasazení a generate.rs je vlastní jako cíle; docker-image.yml a úloha image v release.yml ho sestavují do ghcr.io/korczis/prismatic-majordomus. fly.toml byl vykreslován vedle nich do 2026-10-12, kdy bylo Fly.io vyloučeno jako cíl a soubor opustil strom. Výrok, který toto pole dříve nesl — že nikde neexistuje žádný Dockerfile — byl vyvrácen před 2026-09-10 a nikdy nebyl opraven. Naměřeno na masteru 6042f4286, 2026-09-10; odstranění fly.toml na 722228ef3c, 2026-10-12.
Cílový stav
Generovaný Dockerfile je idiomatický a revidovatelný, nese hlavičku jmenující svůj zdroj a příkaz pro regeneraci a generate --check jej odmítne, byl-li upraven ručně.
Rozsah
- deploy/fly
- apps/majordomus-cli/src/deploy/container.rs
Mimo rozsah
- Buildpacks, Nixpacks nebo druhá implementace kontejnerů
- Jakýkoli argument buildu, vrstva nebo soubor nesoucí přístupový údaj
- Shellový entrypoint nebo jakýkoli shell ve fázi runtime
Závislosti
- I0902HOTOVO Objekt nasazení se stává typovaným Rustem, který odmítá nesmysly
- I0904HOTOVO Adresa, na které se naslouchá, je jeden fakt se dvěma projekcemi
- I0905PŘIPRAVENO Liveness a readiness jsou registrované schopnosti, ne hacky routeru
Co na tom čeká
- I0910BLOKOVÁNO Profil release se volí měřením, ne lidovou moudrostí
- I0911BLOKOVÁNO Změna zdroje nepřestavuje svět a kontext zůstává malý
- I0912BLOKOVÁNO Image obsluhuje web, který vytvořil kanonický pipeline
- I0914ZRUŠENO Jedno jádro nasazení, jeden příkaz a nanečisto, které nic nemění
- I0919BLOKOVÁNO Nic tajného a nic lokálního neopouští image
- I0920BLOKOVÁNO Závislosti image jsou známé a jeho bezpečnostní upozornění jsou politika
- I0930BLOKOVÁNO Skutečný image běží pod skutečnými limity, než se cokoli nasadí
Kritéria přijetí
- Základní image je připnut na explicitní aktuální stabilní verzi Alpine a, kde je to možné, na její digest; v produkčním buildu se neobjevuje žádný plovoucí tag
- Fáze runtime obsahuje binárku, deklarované assety runtime, certifikáty, pokud jsou vyžadovány, a nic jiného — žádný kompilátor, toolchain, zdrojový strom, historii, cache ani testy
- Proces běží jako vyhrazený neprivilegovaný uživatel a test dokazuje, že jeho id uživatele není nula
- Entrypoint spouští spustitelný soubor přímo ve formě exec, bez shellového obalu
- Rozhodnutí o musl a statickém linkování se činí proti skutečnému grafu nativních závislostí a každá zbývající dynamická běhová závislost je jmenována, zdůvodněna, instalována záměrně a testována
- Generovaný soubor uvádí svůj zdroj a příkaz regenerace, aniž by porušil formát, a generate --check selže na ruční úpravě
Validace
- majordomus generate --check
- cargo test --workspace --all-features
Požadované důkazy
- generated_dockerfile
- pinned_base
- non_root
- musl_decision
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á.
Riziko
Generování může způsobit, že Dockerfile bude nečitelný, což je horší než duplikace. Zdroj popisuje záměr, výstup popisuje mechaniku a výstup musí obstát v review u někoho, kdo generátor nikdy neviděl.
Č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.
Kanonický záznam: .ai/repo/project/issues/I0909.yaml. Načtěte ho zpět pomocí majordomus plan show I0909.