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.

Stav verdiktu je zelený, jen když plánování uspělo a každá kontrola vybraná plánem proběhla v úloze, která uspěla; selhaná nebo zrušená úloha, vybraná kontrola, jejíž úloha byla přeskočena, nebo plán, který nevybral nic, je červený

Požadovat se má jediný stav, ci, a nemůže být zelený omylem. Zda ho něco skutečně vyžaduje, je samostatná otázka a odpověď je dnes ne: viz ci-verdict-is-required. Toto tvrzení je o tom, co stav znamená, ne o tom, co zastaví. Počítá se ze dvou faktů: z plánu (které kontroly musela tato změna spustit) a z toho, co hlásily joby. Kontrola, kterou plán vybral, musela proběhnout v jobu, který uspěl; job, který selhal nebo byl zrušen, je červený, ať byla jeho kontrola v plánu, nebo ne; plán, který nevybral nic, je rozbitý plán a červený; selhaný job plánování je červený. Kontrola, kterou plán vynechal, smí být přeskočena a tabulka říká proč.

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

Úloha verdict se spouští vždy, takže stav nikdy nezůstane viset kvůli úloze, kterou plán přeskočil, a zapisuje tabulku každé kontroly s výsledkem její úlohy a důvodem, proč byla či nebyla naplánována. Případ ji pouští s fixture plány a kontexty needs přes každou červenou podmínku. Toto tvrzení znělo do 2026-09-11 "jediný stav, který pravidlo větve vyžaduje", což předpokládalo pravidlo větve, které neexistuje - viz ci-verdict-is-required níže. To, co scripts/ci/verdict počítá, platilo vždy; to, co na něm podmiňovalo merge, ne.

Co to znamená

Vyžadovat je třeba jediný stav, ci, a nemůže být zelený náhodou. Zda ho něco skutečně vyžaduje, je samostatná otázka a odpověď je dnes ne: viz ci-verdict-is-required. Toto tvrzení se týká toho, co stav znamená, ne toho, co zastavuje. Počítá se ze dvou faktů: z plánu (které kontroly musela tato změna spustit) a z toho, co hlásily úlohy. Kontrola vybraná plánem musela proběhnout v úloze, která uspěla; úloha, která selhala nebo byla zrušena, je červená, ať byla její kontrola plánována, či ne; plán, který nevybral nic, je rozbitý plán a červený; selhavší plánovací úloha je červená. Kontrola, kterou plán vynechal, smí být přeskočena a tabulka říká proč.

Princip

scripts/ci/verdict přebírá plán (plan.json, artefakt ci-plan) a kontext needs workflow (výsledek každého jobu) a rozhoduje; do souhrnu kroku zapíše tabulku každé kontroly, jejího jobu, zda byla plánována a proč, a výsledku jobu. Job ci v .github/workflows/validate.yml potřebuje každý job a běží s if: always(), takže přeskočený job nemůže nechat stav viset. test/cases/94_ci_plan.sh řídí verdikt pomocí fixture plánů a kontextů needs přes každou červenou podmínku i tu zelenou; test/cases/26_ci_wiring.sh dokládá, že job ci potřebuje každý job modelu a běží vždy.

Jak to vidět

scripts/ci-plan --full x > plan.json
printf '{"plan":{"result":"success"},"structure":{"result":"success"},"suite":{"result":"failure"}}' > needs.json
scripts/ci/verdict --plan plan.json --needs needs.json; echo "exit $?"
just test-shell 94_ci_plan

Co nepokrývá

Verdikt důvěřuje výsledkům jobů tak, jak je hlásí GitHub; kontrolu znovu nespouští. Kontrola, kterou model nedeklaruje, není v žádném plánu ani v žádném verdiktu. Ochrana větví je nastavení repozitáře, ne soubor v tomto stromě: stav existuje proto, aby mohl být vyžadován, a zda je vyžadován, se rozhoduje na GitHubu. K 2026-09-11 jej nevyžaduje nic — branches/master/protection odpovídá 404 a rulesets odpovídá [] — takže červený verdikt nezastaví žádný merge. Toto tvrzení znělo do té doby „jediný stav, který pravidlo větve vyžaduje“, čímž tvrdilo, že tomu tak je.

Proč existuje

Workflow přeskočený filtrem cest nikdy nehlásí a povinná kontrola, která nikdy nehlásí, nechá pull request čekat navždy; workflow, které vždy hlásí zeleně, když nic nebylo spuštěno, je horší. Filozofie Majordomus je důkazy místo tvrzení: stav jmenuje, co běželo a proč, a odmítá shrnout nic jako úspěch.

Detail vykreslený z docs/claims/ci-verdict.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Stav verdiktu je zelený, jen když plánování uspělo a každá kontrola vybraná plánem proběhla v úloze, která uspěla; selhaná nebo zrušená úloha, vybraná kontrola, jejíž úloha byla přeskočena, nebo plán, který nevybral nic, je červený

    Vytvořeno na CI.

  2. 2 · kanonické tvrzení

    ci-verdictdeklarovaný stav: zaručeno v docs/CLAIMS.yaml

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

  3. 3 · implementace

    scripts/ci/verdict

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

    Test: test/cases/94_ci_plan.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 94_ci_plan

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