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.

Projekci na GitHub kontroluje kontrola, ne to, že si někdo vzpomene ji spustit

Projekci na GitHub kontroluje kontrola, ne to, že si někdo vzpomene ji spustit

majordomus://rule/project.github-projection-gated@1aktivní projekcegithubvynucovánídrift

Zdůvodnění

scripts/github-sync --check končí exit 11 při driftu od dne, kdy byl napsán. Nikdo ho nikdy nezavolal.

scripts/ci/core-check spouštěl --plan a --render adaptéru, které dokazují, že projekci lze z kanonického modelu vytvořit. Zda ji remote přijal, se nikdy neptal. Projekce se tak aplikovala jednou, 2026-09-04, a pak chátrala — změřeno při 867f3a9, 200 zjištění driftu proti 15 milníkům a 184 úkolům, z nichž 181 byly kanonické záznamy, které na GitHubu nikdy neexistovaly. Každý build byl po celou dobu zelený a .ai/repo/project/README.md dál tvrdil, že úkoly a milníky na GitHubu pocházejí z majordomus plan.

Poučné je, který povrch zůstal poctivý. Všech osm projektovaných milníků bylo synchronizovaných, protože milníků je málo a ručně se jich dotýkalo. Povrch, na který se člověk dívá, byl povrch, který se stále shodoval, a právě proto si toho pět dní nikdo nevšiml.

To je vlastní uvedený režim selhání tohoto repozitáře — tvrzení, jehož důkazem je skript, který existuje, místo kontroly, která běží — uplatněný na jediný subsystém, jehož celým smyslem je zabránit tomu, aby si dva záznamy téže práce odporovaly.

Změněno na místě, 2026-10-10

Do tohoto dodatku pravidlo odmítalo behind, state, milestone a closed při každém běhu, ať šlo o běh čehokoli. Adaptér promítá jen trunk a nic ho automaticky neaplikuje, takže pull request, který upravoval projektovaný záznam, byl odmítnut za jedinou věc, kterou před mergem nemohl udělat: #855 změnil jeden řádek I1900 a #820 uzavřel osm záznamů a ani jeden nemohl zezelenat na vlastním headu. Kdyby některý přistál, trunk by byl odmítán, dokud by někdo ručně neaplikoval. Dodatek přidává jednu třídu, pending, a omezuje ji z obou stran; nic dalšího, co pravidlo odmítalo, se neodmítá méně.

Upravuje verzi 1 místo vydání verze 2, protože pravidlo v otevřeném pull requestu (#831, project.a-failed-read-is-not-an-empty-answer) závisí na tomto @1 a závislost, která se nevyřeší, zastaví aplikaci celé množiny. Verze 2 nesoucí tento text následuje, jakmile je ten pull request na trunku.

Upraveno na místě, 2026-10-12

Do tohoto dodatku zněl poslední řádek požadovaného chování „Aplikace projekce zůstává záměrným lidským aktem. CI dokazuje shodu; úkoly nevytváří.“ Dne 2026-10-12 okno uplynulo se zpožděním I2460 až I2478, protože člověk, jehož to byl akt, přešel k dalšímu přistání, a master byl odmítnut (běh validate 38278173940 na 81178f5362). Vlastník nařídil, aby aplikace následovala po přistání. Řádek nyní pojmenovává pravidlo, které říká, kdo aplikuje, project.the-projection-is-applied-at-landing@1; nic, co toto pravidlo odmítá, se neodmítá méně a okno stále omezuje, jak pozdě smí být trunk. Změněno ve verzi 1 z důvodu, který uvádí výše uvedený dodatek.

Požadované chování

  • Kontrola čte remote a při driftu selže. Běží při každé změně, která může pohnout kanonickým modelem nebo adaptérem, což vybírá CI model podle třídy cest, ne tím, že to někdo přidá do seznamu kroků.
  • Stavy, které znamenají nový drift nebo ohrožení textu člověka, se odmítají od prvního běhu a nemají žádnou toleranci: behind, edited, conflict, unmanaged, state, milestone, closed.
  • Head se posuzuje proti tomu, co mění, ne proti živému stavu GitHubu. Ze stavů, které aplikace zapisuje (behind, state, milestone, closed), jsou pending, hlásí se a neodmítají, pro záznamy, které head změnil od svého merge base s větví, do níž se slučuje, a na trunku pro záznamy, které se změnily v přistání mladším než okno deklarované v .ai/repo/ci/github.yaml. Záznam se změnil, když se liší jeho soubor nebo jeho vykreslení, protože stav se odvozuje. Po uplynutí okna se trunk odmítne. Ostatní stavy nejsou nikdy pending a není jím ani žádný stav na záznamu, který head nezměnil.
  • Změna, kterou nelze změřit, se nepředpokládá ani tak, ani onak: bez základu, který by se dal dohledat, bez merge base, při mělkém klonu nebo bez deklarovaného okna kontrola řekne, který z těchto případů nastal, a odmítne to, co odmítala před dodatkem.
  • Nevyřízený objem projekce, která se přestala aplikovat, se drží západkou proti commitnuté základní hodnotě, místo aby se tiše tolerovalo. Číslo smí klesat a nikdy stoupat a jeho zápis je záměrný akt, jako už je u .ai/repo/claim-proof-baseline.txt.
  • Záznam, který head přidal, není backlog. missing je čekající, hlášený a neodmítaný, pro záznam, jehož soubor není v merge base headu, a na trunku pro záznam přidaný v přistání mladším než deklarované okno: nic ho zatím neprojektovalo a apply přistání ho vytvoří. Záznam, který chybí a který head nepřidal, drží ratchet jako dřív, stejně jako adopt u každého záznamu. Pozměněno ve verzi 1 dne 2026-10-13: pull request, který přidal 54 záznamů, na vlastním headu hlásil „chybí 73 záznamů, nad základním stavem 19“ a nemohl tam zezelenat, tatáž zeď, kterou výše uvedený dodatek odstranil pro záznam, který head upravuje.
  • Kontrola, která nedosáhne na vzdálený systém — žádný gh, žádný token, žádné oprávnění — končí jako nepoužitelná a řekne které, a nikdy neskončí čistě. Kontrola projekce, která tiše přeskakuje, znovu zavádí přesně tu vadu, kterou měla odstranit.
  • Tato kontrola dokazuje shodu a nic neaplikuje. Kdo aplikuje, je project.the-projection-is-applied-at-landing@1: přistání, prostřednictvím workflow, které tuto kontrolu spouští po aplikaci; aplikace člověkem je záložní cesta.

Chování při selhání

scripts/ci/github-check končí kódem 10 a vypíše jeden řádek na odmítnutý stav, každý s pojmenováním záznamů a příkazu, který jej reprodukuje, a jeden řádek na stav v západce s uvedením počtu a základní hodnoty. Končí kódem 12, když nemůže číst remote, s uvedením důvodu. Čekající záznam je jeden řádek PENDING pojmenovávající záznamy a commit, od něhož se měří, započítaný odděleně od nálezů v posledním řádku a nikdy není exit statusem; na trunku po oknu jsou tytéž záznamy odmítnutým řádkem, který pojmenovává scripts/github-sync --apply.

Ověření

test/cases/97_github_gate.sh dokazuje každou polovinu proti fixture remote, bez sítě: záznam, jehož kanonický text se posunul, neprojde kontrolou, záznam přidaný do modelu a nikdy nepromítnutý neprojde ratchetem, backlog na své základní hodnotě projde a kontrola je deklarována v .ai/repo/ci/gates.yaml pro třídy cest, které mohou posunout kteroukoli stranu.

test/cases/1038_a_head_is_judged_against_what_it_changes.sh dokládá stavy pending na fixtuře se základem, headem a dvěma přistáními. Pro přidaný záznam: je pending na headu i na mladém přistání, chybějící záznam, který head nepřidal, je odmítnut vedle něj, a po okně je odmítnut kmen. Dvě mutace kontroly byly provedeny 2026-10-13 a každá případ shodila: seznam přidaných záznamů ponechaný prázdný a každý chybějící záznam označený za přidaný.

test/cases/45_github_projection.sh dokazuje šest stavů, které kontrola čte.

test/cases/1038_a_head_is_judged_against_what_it_changes.sh dokazuje třídu pending proti skriptovanému gh: záznam, který hlavička změnila, je pending a běh skončí s 0, záznam, který nezměnila, je vedle toho odmítnut, záznam, jehož vykreslení se změnilo kvůli nedotčenému souboru, je pending, přistání uvnitř okna je pending na trunku a totéž přistání za oknem je odmítnuto s nápravou, a základ nebo okno, které nelze přečíst, se odmítne.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/github-projection-gated.v1.md
identity
project.github-projection-gated@1
dostupné také jako
Zdroj MCP majordomus://rule/project.github-projection-gated@1 · majordomus entity show rule/project-github-projection-gated-1 · GET /api/v1/entity?uri=majordomus://rule/project.github-projection-gated@1
v Cockpitu
/cockpit/objects/rule/project-github-projection-gated-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.