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.

UI se publikuje jako snímek čtený na jednom commitu a publikace nikdy nepředstírá, že je proces

UI se publikuje jako snímek čtený na jednom commitu a publikace nikdy nepředstírá, že je proces

majordomus://adr/adr-0141navrženo architekturarozhraníuistránky

odkazuje na

  • put_in_force apps/majordomus-cli/src/ui/mod.rs (soubor)
  • put_in_force apps/majordomus-cli/src/web/report/snapshot.rs (soubor)
  • put_in_force adr-0022
  • put_in_force adr-0086
  • put_in_force adr-0135
  • put_in_force docs/GITHUB_PAGES_ARCHITECTURE.md (dokument)
  • put_in_force docs/MAJORDOMUS_UI.md (dokument)
  • put_in_force project.the-published-ui-is-the-trunks@1
  • put_in_force test/cases/1092_the_ui_snapshot_holds_every_screen.sh (test)
  • put_in_force test/cases/1093_the_ui_snapshot_links_nothing_absent.sh (test)
  • put_in_force test/cases/2983_the_published_ui_is_the_trunks.sh (test)

odkazuje na něj

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-snapshot v 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 pod target/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 --limit strá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): id ui-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 /ui po 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, unknown nebo not 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-lab validate 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) a scripts/site-build jej 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že lib/common.sh dnes 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í (jako verify-rustdoc pro referenci) nebyla s tímto rozhodnutím přidána a nyní existuje: scripts/pages verify-ui, spouštěná krokem the UI it publishes úlohy nasazení a sekcí 2c scripts/ci/pages-check (kontrola pages-live), přičemž scripts/site-deploy odmítne web, kterému chybí snapshot, který model publikace deklaruje (deploy.snapshots v .ai/repo/ci/pages.yaml). Pravidlem je project.the-published-ui-is-the-trunks; test/cases/2983_the_published_ui_is_the_trunks.sh ho 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.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0141-the-ui-is-published-as-a-snapshot-read-at-one-commit.md
identity
adr-0141
dostupné také jako
Zdroj MCP majordomus://adr/adr-0141 · majordomus entity show adr/adr-0141 · GET /api/v1/entity?uri=majordomus://adr/adr-0141
v Cockpitu
/cockpit/objects/adr/adr-0141

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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