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.

Přistání, které mění to, co GitHub zobrazuje, tu změnu provede samo

Přistání, které mění to, co GitHub zobrazuje, tu změnu provede samo

majordomus://rule/project.the-projection-is-applied-at-landing@1aktivní projekcegithubvynucovánípřistáníci

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

Zdůvodnění

Úkoly a milníky na GitHubu jsou projekcí plánu na trunku. Přistání, které změní záznam plánu nebo cokoli, z čeho se vykreslení záznamu odvozuje, nechá GitHub pozadu přesně o tuto změnu, dokud scripts/github-sync --apply neproběhne ze špičky trunku.

Do 2026-10-12 byl tento běh věcí člověka. project.github-projection-gated to říkal výslovně, docs/INTEGRATION.md svěřil krok „tomu, kdo executor obsluhuje“ a .ai/repo/ci/github.yaml mu dal třicet minut, po jejichž uplynutí scripts/ci/github-check hlavní větev odmítne. Návrh byl ke své mezeře upřímný: tentýž odstavec říkal, že job při každém pushi do mastera by ruční krok odstranil, a označil to za otevřenou volbu vlastníka.

2026-10-12 se za tuto mezeru zaplatilo. Série přistání až do 81178f5362 změnila I2460 na I2478; relace obsluhující executor pokračovala dalším přistáním; okno uplynulo; běh 38278173940 validate zbarvil master do červena na kontrole github-projection. Nic ve stromu nebylo špatně. Krok, který provádí jen člověk, se neprovedl, a kontrola, která ho posuzovala, za sebou neměla žádného aktéra. Příkaz vlastníka téhož dne: úkoly, milníky a záměry jsou sladěny s repozitářem a pro budoucnost se to vynucuje.

To je tvar, který .github/workflows/version.yml odstranil pro verzi: soudce, který funguje, a zapisovač, který běží jen tehdy, když si na něj někdo vzpomene.

Požadované chování

  1. Aktérem je přistání. Workflow běží při každém pushi do výchozí větve, bez filtru cest, a podle plánu, aby se selhaný nebo zrušený běh zkusil znovu. Jeho model je .ai/repo/ci/github.yaml; soubor workflow nenese žádný trigger, oprávnění ani fázi, které model nedeklaruje.
  2. Zeptat se, aplikovat, dokázat, v tomto pořadí. scripts/github-sync --check říká, co je dlužno. Když něco dlužno je, scripts/github-sync --apply to zapíše a scripts/ci/github-check pak posoudí trunk přesně jako validate. Čisté první čtení je vlastním důkazem a nic se nezapisuje.
  3. Jen špička trunku. Workflow nemá žádný spouštěč, který by pull request dosáhl, checkoutuje výchozí větev a před aplikací se ptá remote na její špičku. Běh, který trunk předběhl, neaplikuje nic: přistání, které jej posunulo, zahájilo vlastní běh.
  4. Spustitelný soubor, nebo nic. Každá fáze odmítne běžet, když MAJORDOMUS_BIN žádný spustitelný soubor nejmenuje. Shellový záložní režim adaptéru četl model 2026-10-12 jinak (318 nálezů driftu proti 26) a aplikace z takového čtení přepisuje záznamy, které se nezměnily.
  5. Nejmenší oprávnění. issues: write a contents: read, deklarováno jednou pro celý workflow, a žádná úloha je nerozšiřuje.
  6. Po jednom, nikdy zrušeno. Jedna skupina souběžnosti, cancel-in-progress: false: zrušený apply je remote zapsaný jen napůl.
  7. Omezeno. Úloha deklaruje limit a každý krok deklaruje menší, takže krok, který se zasekne, ohlásí sám sebe, místo aby byl zabit i s úlohou.
  8. Text člověka se nepřepisuje. Workflow nikdy nepředává --force a nikdy nezapisuje baseline driftu. Oblast, kterou někdo upravil, běh shodí a čeká na člověka.
  9. Záložní postup je záložní postup. Když workflow selže, člověk spustí scripts/github-sync --apply z čisté špičky výchozí větve se spustitelným souborem. apply.window omezuje, jak dlouho to smí trvat, než kontrola trunk odmítne. Žádný postup, runbook ani instrukce agentovi nejmenuje ruční aplikaci jako krok, který běžně následuje po přistání.

Chování při selhání

Běh, který nemůže přečíst remote, nemůže sestavit spustitelný soubor, má mutaci odmítnutou GitHubem (exit 13) nebo nechá kontrolu s nálezem, je neúspěšný běh workflow github-projection a jmenuje krok. Trunk pak zaostává do dalšího běhu nebo do ručního použití člověkem a scripts/ci/github-check ho odmítne, jakmile apply.window projde, s pojmenovaným příkazem, jako dřív.

test/cases/1097_the_projection_is_applied_at_landing.sh selže, když se workflow a model rozcházejí v kterémkoli z výše uvedených bodů.

Ověření

test/cases/1097_the_projection_is_applied_at_landing.sh čte workflow a model a drží jedno vůči druhému: spouštěče, absenci filtru cest a jakéhokoli spouštěče pull requestem, oprávnění, skupinu souběhu, meze a pořadí tří příkazů. Poté vyjme skripty jednotlivých kroků z workflow a spustí je proti skriptovanému adaptéru a lokálnímu remote: bez spustitelného souboru se k adaptéru nedostane žádný, při dlužném driftu se aplikuje špička a checkout, který trunk předběhl, neaplikuje nic. Každé tvrzení bylo 2026-10-12 rozbito mutací workflow nebo modelu a hlavička případu je vypisuje.

test/cases/1038_a_head_is_judged_against_what_it_changes.sh drží okno, kterým je fallback ohraničen, a test/cases/26_ci_wiring.sh zavazuje každý workflow mít model.

Co zde nedokazuje žádný případ, je běh na samotném GitHubu: že token workflow je přijat pro každý zápis, který adaptér provádí. To se pozoruje při prvním přistání po tomto pravidle, ve vlastním logu běhu.

Odkud to pochází

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