Co to znamená
Repozitář v jednom sledovaném souboru říká, které cesty worker čte (in: pathspecy jako src/**, docs/**, .ai/repo/**) a které nikdy nečte (out: správa verzí, lokální polovina vrstvy, závislosti a výstupy buildu, tajné údaje, generované assety, archivy, obrázky, video, PDF, dumpy databází, fixtures nad velikost, jakýkoli soubor nad velikost, binární obsah). out vítězí nad in a cesta, která nevyhovuje ničemu, je mimo s důvodem undeclared. Spustitelný soubor tento soubor čte jednou při startu a od té chvíle soubor mimo rozsah není objektem indexu: není vypsán, čten, prohledáván ani servírován, ať přes MCP, HTTP, nebo příkazovou řádku. Na libovolnou cestu se lze zeptat: majordomus scope <path> odpoví uvnitř nebo vně, důvod a vzor či mez, které rozhodly. Repozitář, který nedeklaruje žádný rozsah, se čte podle výchozího nastavení distribuce, tentýž soubor, který naplňuje majordomus init, a odpověď to uvede.
Princip
apps/majordomus-cli/src/scope.rs typuje deklaraci (deny_unknown_fields a JSON Schema scope pod share/schemas/, z něhož se generuje seznam povolených shellového nástroje), validuje každý vzor a kompiluje je do uspořádaných pravidel: out.paths a paths každé kategorie proti cestě relativní k repozitáři, names každé kategorie proti samotnému názvu souboru, pak pathspecy in, pak velikost proti fixtures.max_bytes a max_bytes, nakonec první bajty obsahu. Index::build posoudí každý objevený soubor před čtením a zaznamená out_of_scope s důvodem; také jednou sečte každý sledovaný soubor podle názvu a velikosti, takže repository.scope odpovídá z paměti, a ohlásí sledované tajemství. Scope::load čte sekci scope manifestu nebo share/skeleton/ai/repo/scope.yaml distribuce. doctor shellového nástroje kontroluje verzi a klíče souboru proti share/allow/scope.txt a init jej zaseje.
Jak to vidět
just build
B=apps/majordomus-cli/target/debug/majordomus
$B scope # origin, the tally, every tracked file that is out and why
$B scope docs/CLI.md .env target/x site/data/generated/plan.json
$B scope --check --format json docs/CLI.md .env; echo "exit $?" # 10: a path is out
# in an MCP client: majordomus_scope_classify {"path": "priv/dump.sql.gz"}
curl -s 'http://127.0.0.1:8741/api/v1/scope/classify?path=.ai/local/state/current.yaml'Co nepokrývá
Rozsah řídí, co spustitelný soubor čte a servíruje; nebrání člověku ani provideru, aby soubor otevřel sám, a neskenuje obsah na tajemství nad rámec jmen, která deklarace uvádí. Součet posuzuje jména a velikosti, ne obsah: binárka s nevinným jménem se zachytí při čtení, nepočítá se předem. Rozsahy úloh (majordomus start --scope) jsou něco jiného: cesty, kterých se úloha smí dotknout.
Proč existuje
Provozovatel zadal hranici jako seznam: uvnitř .ai/repo/**, zdrojové kódy, testy, konfigurace, kořenové manifesty; vně .git/, .ai/local/, závislosti, výstupy buildu, binárky, archivy, obrázky, video, PDF, výpisy databází, fixtures nad limit, generované assety, tajemství. Do té doby byla hranice tvořena třemi nesouvisejícími mechanismy: lokální polovina přeskakovaná při objevování, limit velikosti zkompilovaný do čtečky a cokoli, co zrovna odpovídalo třídě zdroje. Jedna deklarace, kterou čte spustitelný soubor a kontroluje shellový nástroj, je nahrazuje a test/cases/93_scope_policy.sh dokazuje, že ji spustitelný soubor dodržuje.