Okamžik
Adresář payments má README, které říká, že každá částka je celé číslo v nejmenších jednotkách, a proč. Relace přidá float. Recenzent ukáže na README. Relace načetla kořenový instrukční soubor, který o platbách neříká nic, a nic jí neřeklo, že na cestu, kterou upravuje, platí druhý dokument.
Proč k tomu dochází
Existují dvě špatná místa pro lokální pravidlo. V vždy načítaném souboru, kde stojí kontext každé relace, ať se relace dotýká plateb, nebo ne — tak jeden takový soubor ve zdrojovém materiálu vyrostl na jedenáct set řádků. Nebo v README vedle kódu, kde nestojí nic a nikdo je nečte, protože žádný mechanismus nespojuje cestu, které se pracovník dotýká, s dokumenty, které za ni mluví. Poskytovatelé, kteří načítají vnořené instrukční soubory, to dělají každý po svém, pro své vlastní názvy souborů, a žádný z nich neřekne, které dokumenty platily pro danou změnu.
Proč to lepší model nevyřeší
Worker nemůže přečíst soubor, který nedostal a o jehož existenci neví. Je to problém vyhledávání s deterministickou odpovědí — které dokumenty řídí tuto cestu — a deterministické odpovědi se nemají delegovat na inferenci.
Co to stojí
Vada, kterou musí revize zachytit pokaždé, dokud pravidlo zůstává neviditelné. A recenzent, který reaguje přesunutím pravidla do vždy načítaného souboru, což opraví tento adresář, ale zatíží každou relaci v repozitáři.
Co Majordomus dělá
Kontext je strom, ne soubor. Pod vrstvou .ai/ nese adresář kontextový dokument, pravdivý pro tento adresář a vše pod ním, a vrstva je jeden adresář, jehož manifest pojmenovává každou sekci a který lze číst bez nástroje. majordomus context resolve <path> vypíše řetěz od rootu k dané cestě, v jednom deterministickém pořadí, a context explain říká, proč je každý dokument zahrnut a proč je každý filtrovaný vyřazen. Dokument může také deklarovat, které zdrojové cesty sleduje, takže dokument o platbách se najde z lib/payments, ačkoli tam nežije. Nejbližší dokument se přidává k předkům a nikdy je nenahrazuje.
context validate shodí celý strom při rozbité referenci, cyklu, neznámém klíči nebo nepřípustném přepsání a neplatný strom neurčí nic. context affected čte množinu změn z gitu a hlásí, kterých dokumentů a rozsahů se dotýká. Pravidla mají stejný tvar: majordomus rules list vypíše efektivní sadu vyřešenou jako graf závislostí a u každého říká, zda ho nástroj vynucuje, nebo ho nevynucuje nikdo.
Před a po
before CLAUDE.md (root) loaded, says nothing about payments
lib/payments/README.md governs the change, loaded by nobody
after $ majordomus context resolve lib/payments
.ai/README.md final, order 10
.ai/repo/README.md extend, order 20
lib/payments/README.md extend, tracked by id ai.paymentsJak to ověřit
Přidejte kontextový dokument pro adresář a spusťte context resolve na cestě pod ním: dokument se objeví v řetězci, v pořadí. Rozbijte v něm odkaz a context validate selže pro celý strom, místo aby vyřešilo jeho část.
Co nedělá
Skládá dokumenty pro danou cestu; nenutí pracovníka je číst. Generovaný instrukční soubor pracovníkovi říká, aby před prací pod cestou rozlišil kontext, a briefing dodržuje rozpočet řádků a jmenuje každou sekci, kterou vynechal. Neparsuje vlastní konvence poskytovatele pro vnořené soubory: platí zdejší rozlišení a načítání poskytovatele se bere jako optimalizace.