141. UI je publikováno jako snímek čtený v jednom commitu a publikace nikdy nepředstírá, že je proces
Kontext
majordomus ui je primární povrch (ADR 0135) a je to projekce, na kterou odpovídá běžící proces: každá obrazovka skládá schopnosti v okamžiku, kdy je požádána. Veřejný web jsou soubory na GitHub Pages. Dosud se ti dva nikdy nepotkali. Topologie deklarovala UI served-only, web jmenoval Cockpit a nikdy UI a člověk, který repozitář neklonoval, první obrazovku produktu vůbec neviděl.
2026-10-12 vlastník požádal, aby UI bylo také na GitHub Pages, a vybíral ze tří tvarů: statický snímek čtený na připnutém commitu, jen dokumentace a snímky obrazovek, nebo nic nepublikovat. Vlastník zvolil snímek.
Statická kopie živého povrchu může lhát třemi způsoby a každý z nich se někde stal nějakému dashboardu:
- Může vypadat živě. Stránka, která říká „přečteno v“ a sama se obnovuje, na hostiteli, který na každý dotaz odpovídá stejným souborem, ukazuje staré čtení pod novým časem.
- Nemůže vést nikam. Odkazy UI jsou trasy a dotazy (
/ui/governance?rule=…,/cockpit/…,/api/v1/…). Souborový hostitel odpoví na cestu souborem nebo 404 a dotaz ignoruje. - Může to být druhá implementace. Generátor, který vykresluje „tytéž obrazovky“ ze stejných dat, je další UI a obě se rozejdou.
Rozhodnutí
- Snímek je vlastní odpověď UI, zapsaná.
majordomus web report ui-snapshotv procesu sestaví tentýžUi, na který směruje server, nad jedním čtením repozitáře, zeptá se ho na každou obrazovku a panel a pak na stránky, na které odkazují, a každou odpověď zapíše jako soubor podtarget/web/ui-snapshot. Exportér nic nevykresluje. Neexistuje druhá šablona, druhý seznam tras ani druhá datová cesta. - Je omezeno a omezení je spravedlivé. Obrazovky a panely se zapisují vždy. Stránky, na které odkazují (inspektor pro každé pravidlo, tvrzení, úkol), se berou po jedné stránce na rodinu v kruhu, dokud není zapsáno
--limitstránek nebo neuplyne--budget-seconds, takže dlouhý seznam nemůže zabrat celé omezení a pomalý zdroj nemůže zadržet publikaci. Stránka za kteroukoli mezí nebo dotaz s více než jedním párem ve snapshotu není; běh zaznamená každou z nich a co čtení ukončilo (snapshot.json:left_out,stopped_by). - Soubor se adresuje jako soubor. Odkaz mezi dvěma stránkami snímku je relativní, takže adresář funguje na jakémkoli mountu i z disku. Dotaz inspektoru se stává adresářem (
governance/_rule/<id>/index.html). - Odkaz, na který odpovídá jen proces, to říká. Cockpit, API, formulář, vynechaná stránka: každý vede na jedinou stránku snímku o živém UI a nese cestu, kterou myslel. Odkaz na povrch, který publikace drží (říká to topologie), si zachová cestu a odkaz do servírovaného sestavení dokumentace se přebazuje na publikovaný web, z něhož je sestaveno. V exportéru se nepíše žádný seznam povrchů.
- Snapshot se znovu nečte. Tělo nese
data-snapshot; jediný skript UI pak nenačítá žádný panel a nic neobnovuje. Každá stránka uvádí commit, ve kterém byla přečtena, kdy a kterým executable, a odkazuje na to, jak ji vidět živě. - Je to plocha publikace a žádného procesu. Producent deklaruje adresář vedle svého výstupu (
surface.json): idui-snapshot, mount/ui,published-only, sestaveno z tohoto commitu. UI samo obsluhuje proces na/ui; publikace tam drží snímek. Topologie kontroluje mounty podle světa (obsluhovaný, publikovaný), takže se nesrážejí, stejně jako domovská stránka a nasazený web oba drží/. - Pages ho sestaví z commitu, který publikuje. Workflow Pages získává jednu úlohu, která sestaví spustitelný soubor a zapíše snímek, a úloha deploy ho umístí na
/uipo vlastních kontrolách webu a před pushem. Je to druhý příkaz Rustu na cestě publikace, po rustdoc (ADR 0086), ze stejného důvodu: jeho výstup jsou publikované bajty. Běží vedle úlohy rustdoc, ne po ní.
Důsledky
- Návštěvník webu otevře
/ui/a vidí přehled, plán rozvoje, důkazy a pravidla repozitáře tak, jak byly při publikovaném commitu, s funkční navigací a inspektory a s upozorněním na každé stránce, že jde o snímek. - Snímek nemůže vědět, co UI nemohlo přečíst tam, kde byl pořízen. Runner Pages nemá mesh, pozorování forge ani běžící provedení; tyto panely čtou
none,unknownnebonot answered, jak vyžaduje pravidlo UI (ui-derived-state), nikdy nulu. Snímek není důkazem o živém stavu čehokoli. - Inspektor stojí, co stojí jeho zdroje, a na masteru se dnes čtou znovu pro každou stránku: na vytížené pracovní stanici jeden inspektor trval 9 až 12 s a rozpočet 120 s zapsal 16 obrazovek a panelů a 8 inspektorů. Cache schopností z dávky výkonu UI (
perf/the-ui-answers-at-once) přivede tytéž obrazovky na desítky milisekund, takže tato změna má přistát po ní; do té doby rozpočet rozhoduje, jak hluboko snapshot jde. - Publikace čeká na build spustitelného souboru: asi dvě minuty za tepla na hostovaném runneru (úloha
mesh-labvalidate run 38223440282 jej sestavila za 125 s), oproti asi 70 s pro rustdoc. Úloha nasazení začíná, když obě skončily. - Snímek je generovaný povrch: existuje tam, kde běžel jeho producent, takže není v commitnuté topologii (
docs/generated/web.json) ascripts/site-buildjej neskládá. Skládá ho vlastní krok úlohy nasazení a odmítne, když snímek chybí nebo byl sestaven z jiného commitu. Naučit jediné skládání (mj_web_composed) o površích deklarovaných producentem jako jen publikovaných by ten krok odstranilo; zůstává jako navazující práce, protoželib/common.shdnes drží jiná změna. - Vlastní kontroly webu (
scripts/site-check) stránky snapshotu neposuzují, protože je zařazen až za nimi. Jeho vlastním důkazem jsou testy exportéru a případy 1092 a 1093. Veřejná sonda/ui/po nasazení (jakoverify-rustdocpro referenci) nebyla s tímto rozhodnutím přidána a nyní existuje:scripts/pages verify-ui, spouštěná krokemthe UI it publishesúlohy nasazení a sekcí 2cscripts/ci/pages-check(kontrolapages-live), přičemžscripts/site-deployodmítne web, kterému chybí snapshot, který model publikace deklaruje (deploy.snapshotsv.ai/repo/ci/pages.yaml). Pravidlem jeproject.the-published-ui-is-the-trunks;test/cases/2983_the_published_ui_is_the_trunks.shho drží. - Vyhledávací formulář horní lišty vede ve snapshotu na stránku o živém UI, protože hledání se ptá procesu.
Stav
Navrhla relace p12 dne 2026-10-12 na základě volby vlastníka statického snapshotu. Akceptace je aktem vlastníka.