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 changedCo 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.