Co to znamená
Toto není implementováno. Publikuje se, aby známá mezera byla viditelná a nepředpokládalo se, že je pokryta.
Rozsah je tvrzení o tom, kterých cest se tento worker dotkl. check na něj odpovídá pomocí git diff <base>..HEAD plus pracovního stromu — a rozsah commitů nemá autora. Když jiná relace commituje na stejnou větev ve stejném checkoutu, každý soubor, kterého se dotkla, se hlásí jako mimo váš rozsah. Report má o souborech pravdu a o tom, kdo je změnil, se mýlí.
Zamýšlený tvar je, že úloha zná množinu commitů, které vyprodukovala, protože každý zaznamenala, jak vznikal, místo aby je odvozovala ze dvou krajních bodů.
Jak to funguje dnes
mj_git_touched v lib/common.sh sjednocuje git status --porcelain s git diff --name-only <recorded head> HEAD. check, finish a watch všechny měří rozsah proti této množině. Je přesně správná pro jednoho pracovníka na jedné větvi a zhoršuje se ve chvíli, kdy tento předpoklad přestane platit.
Pole worktree na záznamu úlohy vyřešilo sousední problém — záznam z jiného checkoutu už na vašem nevynucuje svůj rozsah. Tento je jiný: checkout je skutečně týž, takže žádné identifikační pole nemůže oba pracovníky rozlišit.
Jak to vidět
majordomus start "my task" --scope lib/auth
# another session commits to this branch, in this checkout, touching docs/ and site/
majordomus check
# FAIL scope docs/README.md — outside claimed scope (lib/auth)
# FAIL scope site/templates/base.html — outside claimed scope (lib/auth)
Ani jeden soubor není váš. Dnešní náprava je majordomus handover --close a začít znovu na aktuálním commitu, což docs/CONTINUITY.md dokumentuje pod „What this does not do“.
Co nepokrývá
Dvě vlastnosti jsou záměrná odmítnutí, ne otevřené otázky, a právě ony dělají tvar hodným stavby, a ne jen pohodlným.
Seznam je vyhledávání, nikdy autorita. Každá jeho odpověď se ověřuje proti samotným commitům a kde se obě neshodují, vyhrává git a neshoda je nález. Je to totéž pravidlo, které záznam úlohy už dodržuje pro head a branch; není to nový princip, jen existující aplikovaný na nové pole.
Přepsaný commit se hlásí jako nerozpoznaný, nesleduje se potichu. Amend nebo rebase znamená, že zaznamenaný commit už neexistuje. Tiše to rozřešit na „asi tenhle“ by učinilo záznam měkčím než git, což maří důvod, proč se vůbec zaznamenává.
Kromě toho nepřipisuje práci uvnitř jednoho commitu, neví o commitech vytvořených pomocí --no-verify a neříká nic o tom, kdo napsal který řádek.
Proč existuje
Přišlo se na to používáním nástroje. Čtyři záznamy úloh byly za jediný večer uzavřeny a znovu zahájeny, protože peers commitující do téže větve zastarávali základ každé úlohy — kontrola rozsahu měla pokaždé pravdu a pokaždé byla k ničemu.
Pozorování, které návrh rozřešilo, bylo, že chybějící fakt se týká commitu, ne úlohy, a že git ho už nese: každý commit má autora a čas a hook pre-commit, který už spouští doctor, stojí v jediném okamžiku, kdy je odpověď zdarma. Toto vymezení také zlevňuje druhou otázku — history by pak mohlo odpovědět „co tato úloha změnila“ bez jakéhokoli diffu — a návrh, který usnadní nesouvisející otázku, obvykle řeže po vláknu, ne proti němu.
Je to větší než pole worktree, potřebuje odpověď pro amend a rebase a je tu zaznamenáno jako směr, a ne ponecháno jako folklor ve vlákně zpráv.