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.

Milníky a úkoly na GitHubu se generují z kanonického modelu a ručně upravená generovaná oblast se hlásí, ne přepisuje

scripts/github-sync vykreslí každý kanonický záznam přes majordomus plan body a promítne ho na milník nebo úkol GitHubu: titulek, generovanou oblast těla, přiřazení milníku, štítky a zda je úkol otevřený. Komentáře, přiřazené osoby a jakýkoli text, který člověk napíše mimo generovanou oblast, patří GitHubu a nikdy se nedotknou. Lidská úprava *uvnitř* generované oblasti se ohlásí jako drift a nechá se být.

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

Adaptér leží ve scripts/, protože samotný nástroj nevolá žádnou síť, což dokazuje test/cases/08_no_forbidden_constructs.sh. Počáteční značka nese hash záznamu, z něhož byl vygenerován, což odlišuje přesunutý plán od ruční úpravy; druhá značka nese identitu záznamu, takže titulek, který člověk přepíše, ji nemůže osiřet. Toto tvrzení se týká toho, co adaptér vykresluje a odmítá. Zda remote skutečně přijal, je jiná otázka a odpovídá na ni tvrzení github-projection-gated.

Co to znamená

scripts/github-sync vykreslí každý kanonický záznam přes majordomus plan body a promítne ho na milník nebo úkol GitHubu: název, region těla, přiřazení milníku, štítky a zda je úkol otevřený. Komentáře, přiřazení a jakýkoli text, který člověk napíše mimo vygenerovaný region, patří GitHubu a nikdy se jich nedotkne. Lidská úprava uvnitř vygenerovaného regionu se hlásí jako drift a nechává se být.

Princip

Tělo se vloží mezi <!-- majordomus:begin <hash> --> a <!-- majordomus:end -->, stejným mechanismem oblasti, který Majordomus umožňuje sdílet CLAUDE.md s ručně psaným. Hash v počáteční značce je hash kanonického záznamu, z něhož byla oblast vygenerována, což odděluje dva případy: jiný hash znamená, že plán se posunul a oblast se obnoví; stejný hash s jiným obsahem znamená, že ji upravil člověk, a --apply odmítne bez --force.

GitHub je sdílený, takže --apply promítá jen trunk: odmítne (exit 15, s důvodem a příkazem, který jej reprodukuje), pokud HEAD není špičkou výchozí větve remote — refs/remotes/<remote>/HEAD, potvrzeno proti samotnému remote — a strom není čistý, a běží vždy jen jeden apply, pod zámkem ve společném adresáři gitu. Vlastní kód adaptéru podléhá témuž pravidlu: když se scripts/github-sync načte z checkoutu repozitáře, který promítá, musí být tento checkout trunkem na stejném commitu a čistý, protože se posílá jeho renderer a mapování stavů. Každý zápis, který provede, vytiskne řádek jmenující, co se změnilo a proč; zápis, který GitHub odmítne, je řádek FAIL a běh skončí 13, místo aby hlásil napůl aplikovaný remote jako hotový. --plan, --check a --render jen čtou a běží z jakékoli větve. Seznam, na který GitHub neodpoví, není prázdný remote: --check a --apply skončí 12 se jmenováním seznamu, nehlásí drift a nic nezapíší, zatímco čtení jako prázdný by hlásilo každý záznam jako chybějící a vytvořilo každý znovu.

Adaptér žije v scripts/ a ne v lib/, protože bin/, lib/, share/ a test/ neobsahují žádného síťového klienta a test/cases/08_no_forbidden_constructs.sh to dokazuje. Model, který promítá, pochází ze stejného lib/project.sh, jaký používá CLI.

Jak to vidět

scripts/github-sync --plan        # offline: what would be created or changed, and the body hashes
scripts/github-sync --check       # compare against the live repository; exit 11 on drift
scripts/github-sync --apply       # from the clean trunk only: create what is missing, update what changed

Co nepokrývá

Nic se nečte zpět. Uzavření úkolu na GitHubu ho kanonicky nedokončí; další --check nahlásí nesoulad a vítězí kanonický záznam. Není ani mapovací soubor. Úkol se páruje podle značky <!-- majordomus:record <id> -->, kterou nese jeho generovaná oblast, a jen úkol bez značky se páruje, jednou, podle id, kterým začíná jeho název; milník nenese značku a páruje se jen podle tohoto prefixu, takže přejmenování prefixu milníku na GitHubu jej osiří.

Proč existuje

GitHub je místo, kde probíhá diskuse, ale špatné místo pro uložení plánu: nemá graf závislostí, validaci ani způsob, jak odmítnout stav, který si protiřečí. Když se z něj stane projekce, spolupráce zůstane a pravda se přesune do repozitáře.

Detail vykreslen z docs/claims/github-projection.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Milníky a úkoly na GitHubu se generují z kanonického modelu a ručně upravená generovaná oblast se hlásí, ne přepisuje

    Učiněno na Planning, Plan.

  2. 2 · kanonické tvrzení

    github-projectiondeklarovaný stav: zaručeno v docs/CLAIMS.yaml

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

  3. 3 · implementace

    scripts/github-sync

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

    Test: test/cases/45_github_projection.sh

    Provedeno v Dokončit úkol, jen když existují jeho důkazy.

  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 45_github_projection

Kde se toto tvrzení používá

pokryté odpovědnosti

Okamžiky, na které to odpovídá

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