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.

Publikace je podmíněna vším, co může učinit publikovaný web chybným, a na nic jiného nečeká; kontroly, které rozhodují, zda se změna smí mergovat, běží vedle ní na stejném commitu, ne před ní

Push do masteru, který může změnit web, spustí jednu úlohu a ta publikuje, jakmile jsou bajty dokázány: commitnutá odvozená data jsou pro strom aktuální, web se z nich sestaví a projdou všechny statické kontroly nad výstupem. Nečeká na behaviorální sadu, kontroly crate, pokrytí, sadu pro macOS, kontrolu měření výkonu ani sondu v prohlížeči. Ty běží nad stejným commitem paralelně ve validačním workflow a brání sloučení přes stav ci — chrání repozitář, ne publikované bajty. Nic, co může publikované bajty učinit chybnými, nebylo z cesty publikace odstraněno; odstraněno bylo jen to, co ji mohlo pouze zdržet. Nasazení jsou serializovaná a to běžící se nikdy neruší: GitHub drží jen nejnovější čekající běh, takže novější push nahradí každé starší *pending* nasazení, kdežto zrušení běžícího by publikaci vyhladovělo, kdykoli merge přicházejí rychleji, než běh doběhne. Publikace se měří zvenčí, ne předpokládá ze zeleného jobu: web servíruje commit, ze kterého byl sestaven, workflow čeká, až veřejná URL pojmenuje tento, a čte vlastní build větve, kterou GitHub pro pushnutou větev provedl — build, který skončil chybou, je selhání běhu, který publikoval, protože publikace jsou dva kroky a jen první je věcí tohoto repozitáře.

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Publikační cesta dokazuje, že commitnutá odvozená data jsou aktuální podle hashe vstupu, staví z nich web, spouští nad výstupem každou statickou kontrolu a pushuje gh-pages, v jedné úloze spouštěné přímo pushem na master na cestách odvozených z modelu kontrol; předběhnuté běhy se ruší; sada, kontroly crate, pokrytí, sada na macOS, kontrola měření výkonu a sonda prohlížeče běží ve validate.yml na stejném commitu a podmiňují merge. Případ dokazuje spouštěč, odvozené cesty, rušení, oprávnění, že na cestě není žádná těžká kontrola a žádná neopustila validate.yml, a že build, který přeskočí generování, je byte po bytu totožný s tím, který ho nepřeskočí.

Co to znamená

Push do masteru, který může změnit web, spustí jednu úlohu a ta publikuje, jakmile jsou bajty dokázány: commitnutá odvozená data jsou pro strom aktuální, web se z nich sestaví a projdou všechny statické kontroly nad výstupem. Nečeká na behaviorální sadu, kontroly crate, pokrytí, sadu pro macOS, kontrolu měření výkonu ani sondu v prohlížeči. Ty běží nad stejným commitem paralelně ve validačním workflow a brání sloučení přes stav ci — chrání repozitář, ne publikované bajty. Nic, co může publikované bajty učinit chybnými, nebylo z cesty publikace odstraněno; odstraněno bylo jen to, co ji mohlo pouze zdržet. Nasazení jsou serializovaná a to běžící se nikdy neruší: GitHub drží jen nejnovější čekající běh, takže novější push nahradí každé starší pending nasazení, kdežto zrušení běžícího by publikaci vyhladovělo, kdykoli merge přicházejí rychleji, než běh doběhne. Publikace se měří zvenčí, ne předpokládá ze zeleného jobu: web servíruje commit, ze kterého byl sestaven, workflow čeká, až veřejná URL pojmenuje tento, a čte vlastní build větve, kterou GitHub pro pushnutou větev provedl — build, který skončil chybou, je selhání běhu, který publikoval, protože publikace jsou dva kroky a jen první je věcí tohoto repozitáře.

Princip

Dva workflow. .github/workflows/validate.yml plánuje z .ai/repo/ci/gates.yaml, které kontroly může změna ovlivnit, a spouští je; scripts/ci/verdict z toho dělá jediný stav, který vyžaduje pravidlo větve. .github/workflows/pages.yml je publikační cesta: spouští se přímo při pushi do masteru, jehož cesty mohou změnit web — blok paths: je scripts/pages paths, sjednocení tříd modelu kontrol, které jmenují kontrolu site-build, plus samotná publikační cesta — v jediném jobu, který drží pages-<ref> s cancel-in-progress: false, s contents: write pro push větve a pages: read pro dotaz GitHubu, zda ji sestavil, a bez dalšího oprávnění. Job spouští scripts/pages build, scripts/pages check a poté scripts/site-deploy --skip-build, tentýž skript, kterým nasazuje člověk. pages build zjistí, že site/data/generated je aktuální, porovnáním kanonického vstupního hashe stromu s tím, který nese commitnuté source.json — generate-site-data --fingerprint, jeden hashovací proces nad vlastním seznamem vstupů generátoru — a pak jej vykreslí bez opětovného generování; strom, jehož commitnutá odvozená data jsou zastaralá, se odmítne, ne tiše regeneruje, protože projekce v rozporu se svými zdroji je vada k opravě u zdroje. Model je .ai/repo/ci/pages.yaml: spouštěč, cesta nasazení, řízené rozpočty a cache domény; ani workflow, ani skript nenese vlastní seznam cest, rozpočet nebo název kontroly. Každá fáze se v souhrnu jobu měří proti těmto rozpočtům, přičemž fronta Actions a vlastní „pages build and deployment“ GitHubu se hlásí vedle řízené cesty jako externí latence a nemíchají se do ní. Polovina publikování, kterou tento repozitář nevlastní, se čte, a ne odvozuje: vlastní „pages build and deployment“ GitHubu může skončit chybou na větvi, která byla pushnuta dokonale, a 2026-09-10 v 17:35:10Z se to stalo — gh-pages dfd9c989c, Page build failed., 27 minut zastaralého webu při zelených všech signálech. scripts/pages built je jediný čtenář stavu toho buildu pro oba volající: publikační job selže na errored ve chvíli, kdy k tomu dojde, a scripts/ci/pages-check položí tutéž otázku při další validaci masteru stejným příkazem. Build, který jen ještě neskončil, je poznámka, nikdy verdikt. test/cases/180_publication_is_observed.sh drží obě síťové poloviny proti fixture webu a stubovanému API buildů. test/cases/97_pages_fast_path.sh drží přímý spouštěč, odvozené cesty, že se žádné probíhající nasazení neruší, minimální oprávnění, že na publikační cestě není žádná těžká kontrola a žádná neopustila validační workflow, že jen publikační měření smí selhat měkce, že otisk je hodnota, kterou generátor zapisuje, a že build, který generování přeskočí, je bajt po bajtu web buildu, který ho nepřeskočí; test/cases/26_ci_wiring.sh drží oba workflow a dělení mezi nimi a shellová doktrína ci v lib/doctor.sh stále vyžaduje bash test/run.sh ve validačním workflow bez spolknutého exit kódu.

Jak to vidět

scripts/pages paths                                     # what a push must touch to publish
scripts/pages budget                                    # the controlled budgets, from the model
scripts/pages benchmark -n 5                            # the controlled path, measured here
just test-shell 97_pages_fast_path
gh run list --workflow pages --branch master --limit 5

Co nepokrývá

Nečiní publikaci bezpodmínečnou vůči správnosti: publikuje se master a o tom, co se na master může dostat, rozhoduje stav ci validačního workflow, což je nastavení repozitáře na GitHubu, nikoli vlastnost těchto souborů. Nezkracuje frontu Actions, přidělování runnerů ani vlastní sestavení Pages větve gh-pages na GitHubu; to se měří a hlásí a cíl end-to-end se vůči nim stanovuje, nevynucuje. Nenahrazuje prohlížečovou sondu: sonda stále běží při každém commitu, který může změnit web, a trasa, na které selže, je vada k opravě, ne zablokované nasazení.

Proč existuje

Publikace dříve čekala, pro každý commit masteru, na každou kontrolu, která rozhoduje, zda se změna smí mergovat — mezi nimi behaviorální sadu, kontroly crate a browser probe — a web se proto zveřejnil desítky minut po pushi, který jej změnil, pokud vůbec. Problémem nebyly kontroly, ale jejich pozice. Projekce nejnovějšího commitu stojí za publikaci ve chvíli, kdy je projekce prokázána, a důkaz, že je projekce správná, je něco jiného a mnohem menšího než důkaz, že je správný repozitář.

Podrobnosti vykresleny z docs/claims/site-deploys-from-verified-run.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Publikace je podmíněna vším, co může učinit publikovaný web chybným, a na nic jiného nečeká; kontroly, které rozhodují, zda se změna smí mergovat, běží vedle ní na stejném commitu, ne před ní

    Vytvořeno na CI.

  2. 2 · kanonické tvrzení

    site-deploys-from-verified-rundeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/GITHUB_PAGES_PERFORMANCE.md

  3. 3 · implementace

    .github/workflows/pages.yml

  4. 4 · test a scénáře

    Test: test/cases/97_pages_fast_path.sh

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 97_pages_fast_path

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