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, které web publikuje, je UI trunku, a UI, které chybí, je starší nebo zkrácené, aniž by to řeklo, je selhaná publikace

UI, které web publikuje, je UI trunku, a UI, které chybí, je starší nebo zkrácené, aniž by to řeklo, je selhaná publikace

majordomus://rule/project.the-published-ui-is-the-trunks@1aktivní uipublikacewebstránky

odkazuje na něj

Zdůvodnění

ADR 0141 dalo UI na veřejný web jako snímek: majordomus web report ui-snapshot přečte UI jednou na publikovaném commitu a zapíše je jako soubory, sestaví jej úloha workflow pro pages a úloha nasazení je umístí na mount UI. ADR uvedlo, co vynechalo: žádnou veřejnou sondu mountu po nasazení.

Audit 2026-10-12 odhalil, k čemu toto opomenutí vedlo. Každá kontrola publikace četla něco jiného. scripts/pages verify četla /build.json, které pojmenovává commit webu a složené povrchy, ne snapshot. verify-docs a verify-rustdoc četly své vlastní povrchy. scripts/ci/pages-check, kontrola pages-live, která běží při každém finish a v třicetiminutovém plánu, kladla pět otázek a žádná se netýkala UI. A skutečnost, že publikace vůbec snapshot obsahuje, byla zapsána na jediném místě, v kroku .github/workflows/pages.yml, takže jiná cesta nasazení o ní nevěděla: scripts/site-deploy spuštěné člověkem vyprázdní publikovaný branch a zkopíruje site/public, do kterého build webu snapshot nikdy nevloží, a publikoval tak web, jehož připojení UI odpovídalo 404 při zelených všech kontrolách.

Tři selhání vyplynula z jedné příčiny, z povrchu, který existuje jen tam, kde běžel jeho producent, a jemuž nic navazujícího nebylo podřízeno:

  • Chybí. Nasazení, které nespustilo krok workflow, mount zahodí.
  • Starší. Snímek ponechaný v site/public z dřívějšího buildu, nebo CDN, která stále odpovídá předchozími soubory, servíruje UI čtené na jiném commitu vedle stránek, které jmenují nový. UI je první obrazovka produktu; čtenář nemá jak poznat, že je z minulého týdne.
  • Krátký. Producent je záměrně omezený a zaznamenává, co vynechal a co jej zastavilo. Napůl zkopírovaný strom nebo záznam, který neříká, co čtení ukončilo, vypadá stejně jako celý, dokud se nezeptáte na stránky, které záznam uvádí.

Vztah kontrolovaný v jedné fázi a v další nikým nevlastněný je nejopakovanější vada tohoto repozitáře (project.the-crate-reference-is-published je stejné zjištění o referenci crate). Fáze po producentovi je nyní vlastněna.

Požadované chování

  1. Deklarováno jednou. .ai/repo/ci/pages.yaml jmenuje pod deploy.snapshots každý povrch, který publikace drží a který build webu nesestavuje: servírovaný povrch, jehož je snímkem, kam jej zapisuje jeho producent, producenta a atribut, kterým jeho stránky uvádějí svůj commit. Mount se tam nezapisuje; je to mount topologie pro daný povrch (docs/generated/web.json), protože publikace drží snímek tam, kde proces servíruje originál. scripts/pages snapshots je jediné čtení položky a workflow, deploy, probe i kontrola procházejí jím.
  2. Čte se u commitu, který je publikován. Snímek, který deploy publikuje, uvádí ve svém surface.json commit, který uvádějí stránky webu. Hlava trunku v rámci okna deploye je to, čemu je web podroben (scripts/ci/pages-check, oddíly 1 a 3); UI je podrobeno commitu webu, a tedy témuž oknu, nikdy volnějšímu vlastnímu.
  3. Žádná cesta nasazení bez něj. scripts/site-deploy odmítne web, jehož strom nemá na svém mountu deklarovaný snímek, nese snímek čtený z jiného commitu než HEAD nebo nese deklaraci, která jmenuje jiný mount, než na kterém stojí. Odmítnutí jmenuje producenta a umístění. --release-metadata není nasazením webu — přidává dva soubory k tomu, co větev už servíruje — a nevyžaduje se.
  4. Ověřeno tam, kde se s tím čtenář setká. scripts/pages verify-ui se ptá veřejného webu: surface.json snímku odpoví, pojmenuje commit a mount, na kterém je poskytován; úvodní stránka odpoví a její banner uvádí tentýž commit; snapshot.json odpoví, pojmenuje týž commit a řekne, co ukončilo čtení a které stránky byly vynechány; a každá stránka, kterou tento záznam uvádí, odpoví 200. Počet dotazovaných stránek omezuje --max-pages, rovnoměrně rozprostřený přes seznam, a verdikt uvádí, kolik jich bylo zkoumáno, kolik ne, kolik jich snímek sám vynechal a co jej zastavilo.
  5. Přerušení se uvádí, nikdy neskrývá. Snapshot, který se zastavil na limitu nebo rozpočtu, je úspěch, který to říká. Ten, jehož záznam neuvádí, co ukončilo čtení, nebo nevypisuje, co vynechal, je selhání: „každá stránka“ a „stránky, na které byl čas“ se musí dát rozlišit jen z veřejných bajtů.
  6. Kontrola, ne poznámka. Workflow pages spouští sondu po nasazení, jakmile web poskytuje commit, a krok není continue-on-error. scripts/ci/pages-check se jí ptá na publikovaný commit jako oddílu 2c; UI, které chybí, patří jinému commitu nebo není celé, je exit 10, a to, které nešlo posoudit, je exit 12 s uvedenou polovinou ve verdiktovém řádku, nikdy ne úspěch.
  7. První obrazovka je rozhodnutá. Údaje, kterými první obrazovka UI vede, jsou to, podle čeho návštěvník produkt čte, a proces, který čte snapshot, není server: nedrží žádnou nástěnku peerů a nespouští žádný mesh. Obrazovka tedy vede jen tím, o čem tento proces může rozhodnout. Jeho údaj o zdraví je verdikt repository z health.report, nejhorší z dimenzí, které nejsou dimenzemi obsluhujícího procesu (PROCESS_DIMENSIONS: server, jeho nástěnka, jeho runtime meshe), a tam, kde neběží žádný runtime meshe, údaj o meshi to říká a nepočítá žádné stroje. První obrazovka, která v některém z těchto údajů ukazuje odznak neznámého nebo zdroj, který neodpověděl, je nález sondy, vlastního případu snapshotu, a tedy nasazení.

Chování při selhání

  • scripts/pages snapshots skončí 12, když deklarovaný povrch nemá mount v topologii nebo záznam nejmenuje svůj artefakt, producenta a značku.
  • scripts/site-deploy skončí s 10 a REFUSE pro každý případ položky 3 a pro model, který je přítomen a nelze jej přečíst; nic se nepushuje.
  • scripts/pages verify-ui skončí kódem 10, když web odpověděl a UI chybí, je z jiného commitu nebo není celé — na stderr jeden řádek FAIL za zjištění, každý zakončený příkazem, který ho ukáže znovu — a kódem 12, když web nikdy neodpověděl nebo nešlo přečíst žádný commit, vůči kterému by se UI posuzovalo.
  • scripts/pages verify-ui také končí kódem 10, když úvodní stránka vede nerozhodnutým údajem; řádek FAIL pojmenovává každý údaj.
  • V .github/workflows/pages.yml je to krok the UI it publishes; selhání shodí nasazení. V scripts/ci/pages-check je to sekce 2c kontroly pages-live, na kterou se ptá finish (at-finish) a plánovaný běh stránek se ptá každých třicet minut a při selhání nasazuje.

Ověření

test/cases/2983_the_published_ui_is_the_trunks.sh, bez spustitelného souboru v Rustu a bez sítě: položka modelu rozliší svůj mount z topologie a workflow sestaví a nahraje to, co říká; verify-ui proti lokálně servírovanému webu projde snapshotem přečteným na commitu, s --commit i bez něj, a odmítne jmenovitě zastaralý built_from, chybějící surface.json, uvedenou stránku, která chybí, záznam z jiného běhu, banner jiného commitu a záznam, který neuvádí, co ukončilo jeho čtení; uvede, co přerušený snapshot vynechal a na co se --max-pages neptal, a vrátí 12 pro web, který neodpovídá; pages-check projde čtením UI na publikovaném commitu a skončí kódem 10 pro commit jiný i pro žádný; scripts/site-deploy odmítne web bez snapshotu, s cizím commitem i s umístěným špatně a publikuje HEAD. test/cases/180 a test/cases/96 drží kontrolu a nasazení nad celým webem, který jeden nese; test/cases/1092 a test/cases/1093 drží producenta.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/the-published-ui-is-the-trunks.v1.md
identity
project.the-published-ui-is-the-trunks@1
dostupné také jako
Zdroj MCP majordomus://rule/project.the-published-ui-is-the-trunks@1 · majordomus entity show rule/project-the-published-ui-is-the-trunks-1 · GET /api/v1/entity?uri=majordomus://rule/project.the-published-ui-is-the-trunks@1
v Cockpitu
/cockpit/objects/rule/project-the-published-ui-is-the-trunks-1

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.