Zdůvodnění
2026-09-29 dva auditní průchody jen pro čtení (Cockpit a veřejný web) klasifikovaly každý fakt a seznam, které rozhraní ukazují. Nic nebylo zfalšováno, ale tenká vrstva nebyla tím, čím vypadala. Kontrola zdraví byla ok, protože její stav byl literál HealthStatus::Ok. Čipy efektů počítaly 0, protože počet byl literál 0. Upstream bez sledovacích dat četl +0 −0. Model bez deklarovaného stavu četl „dostupný“, protože to byla #[default] výčtu. Pás statistik vypouštěl součty, které byly špatné. Na webu byla deklarovaná záruka vybarvena jako prokázaná. Každé pravidlo, které se toho týká (product-surface-derived, entry-reports-only-evidence, web-surface-declared-once, projekční kontrola ADR 0012), drží jednu část. Žádné neříká celou invariantu a žádné nedosáhlo na literály Rustu v Cockpitu. ADR 0089 zaznamenává rozhodnutí.
Požadované chování
- Žádná zesměšněná data produkčního UI. Stránka vykresluje to, na co odpověděla schopnost nebo co odvodil generátor. Data fixtur nebo ilustrační data se nikdy nedodávají jako produkční hodnota.
- Žádný napevno zapsaný stav domény. Stav, počet, zralost nebo verdikt nikdy není literál v šabloně, stránce nebo handleru. Literál, který je správný ze své konstrukce, to říká v komentáři
// ui-integrity: <reason>. - Žádné duplicitní inventáře. Seznam tras, oblastí, stavů, efektů nebo součtů se čte z jediného místa, které ho deklaruje. Vedle tohoto místa se znovu nepíše.
- Důkazy jsou povinné. Verdikt, který tvrdí zdraví, aktuálnost nebo důkaz, pojmenovává, z čeho byl rozhodnut (
decided_by,evidence, preflightCheck). Deklarovaný stav je stylisticky oddělen od pozorovaného. - Neznámé není zdravé. Chybějící, selhavší nebo nerozhodnutá hodnota se vykreslí jako neznámá. Nikdy se nevykreslí jako ok, zdravá, dostupná, aktuální ani nula. Žádný výčet nemá výchozí zdravou variantu.
- Čerstvost je explicitní. Hodnota přečtená jednou a zobrazená později říká, kdy byla pozorována. Kde je deklarována hranice zastarání, hodnota říká, kdy zastarala.
- Frontend počítá prezentaci, ne realitu. Stránka Cockpitu se ptá schopnosti přes
Context::execute. Nečte ani index, ani — mimo deklarovaný seznam povolených hodnot navigace — registr, model produktu nebo katalog Why. Verdikt se rozhoduje ve schopnosti, ne v pohledu.
Chování při selhání
Kontrola ui-integrity (scripts/ci/cockpit-projection-check --ui-integrity, job structure, každý plán) skončí s kódem 10 při nálezu, který .ai/repo/ui-integrity-baseline.txt nesplňuje. Nálezy, které vidí, jsou:
- přímé čtení
ctx.registry,ctx.productneboctx.whyv souboru Cockpit mimo allow-list; - kontrola zdraví, které se
status: HealthStatus::Okpředá jako literál; #[default]na zdravé variantě enumu;- chybějící počet vykreslený jako nula v
pages.rs.
Kontrola cockpit-projection skončí s exit 10 při přímém čtení indexu. Baseline se jen zmenšuje: řádek se splácí opravou jeho nálezu. --strict baseline ignoruje, a to je cílový stav.
Ověření
test/cases/547_the_ui_says_only_what_is_derived.sh zasadí každé porušení do fixture stromu. Ověřuje, že každé je odmítnuto kontrolou, souborem a řádkem, že čistý strom a vyňatá místa projdou a že ratchet připustí známý dluh, odmítne nové nálezy, hlásí splacené řádky a pod --strict se ignoruje. test/cases/389_cockpit_projection.sh drží polovinu indexu. Dílčí pravidla 1, 3, 4 a 6 jsou zde vynucována jen tam, kam dosáhne skenování řádků. Zbytek a šablony webu jsou následné kroky, které uvádí ADR 0089.