Co pracovník v tomto repozitáři čte a co nikdy nečte, deklarováno jednou jako data: .ai/repo/scope.yaml. Spustitelný soubor v Rustu to čte při startu, mimo to nic neobjevuje ani neindexuje, nic mimo to nepublikuje přes MCP, HTTP ani příkazovou řádku a pro libovolnou cestu odpoví, zda je uvnitř, nebo mimo, a proč. Shellový nástroj to zakládá v init a kontroluje v doctor. init založí položky sdílené každým repozitářem a pro každý stack, jehož značku najde v kořeni (mix.exs, Cargo.toml), blok tohoto stacku a vypíše, které našel. Pravidlo za tím je project.scope-is-declared pod .ai/repo/rules/project/; tvrzení je scope-declared v CLAIMS.yaml.
Rozsah úlohy (majordomus start --scope, cesty, kterých se úloha smí dotknout) je něco jiného se stejným slovem; tento dokument je o vlastní hranici repozitáře.
Deklarace
version: 1
in: # the allow-list: pathspecs anchored at the repository root
- .ai/manifest.yaml
- .ai/README.md
- .ai/repo/**
- src/**
- lib/**
- apps/**/src/**
- test/**
- docs/**
- README.md
- AGENTS.md
- Cargo.toml
- justfile
out: # wins over in; every category optional, each a reason
paths: # never read, by path
- .git/
- .ai/local/
- '**/node_modules/'
- '**/target/'
- vendor/
binary: true # content with a NUL byte in its first 8 KiB
max_bytes: 1048576 # any file over this
archive:
names: ['*.zip', '*.tar.gz', '*.jar']
image:
names: ['*.png', '*.svg']
video:
names: ['*.mp4']
pdf:
names: ['*.pdf']
database_dump:
names: ['*.dump', '*.sqlite']
generated:
paths: [docs/generated/, site/data/generated/]
names: ['*.min.js', '*.map']
secret:
names: ['.env', '.env.*', '*.pem', '*.key', 'id_rsa*']
fixtures:
paths: ['**/fixtures/', '**/testdata/']
max_bytes: 65536 # a fixture over this is data, not context
Pathspecs jsou podmnožinou globů vrstvy: * a ? zůstávají v rámci jednoho segmentu cesty, ** pokrývá libovolnou hloubku, koncové / jmenuje adresář a vše pod ním. Jsou ukotveny v kořeni repozitáře; **/target/ je způsob, jak říct „v libovolné hloubce“. Seznam names se porovnává jen s názvem souboru a nesmí obsahovat lomítko. Vzor s úvodním lomítkem, předponou :( nebo segmentem .. se zamítne s pojmenováním souboru a klíče, stejně jako klíč, který schéma nedeklaruje (share/schemas/majordomus/scope/scope.v1.schema.json; povolený seznam nástroje shellu share/allow/scope.txt se z něj generuje pomocí majordomus generate allow).
Jak se cesta posuzuje
V tomto pořadí, rozhoduje první pravidlo, které rozhodne:
| krok | co se konzultuje | verdikt |
|---|---|---|
| 1 | out.paths, pak paths každé kategorie, proti cestě | out: path, nebo kategorie |
| 2 | names každé kategorie, proti názvu souboru | ven: secret, generated, archive, image, video, pdf, database_dump |
| 3 | in, proti cestě | nic neodpovídá: out, undeclared |
| 4 | velikost, když je cesta existující soubor | nad fixtures.max_bytes pod cestou nebo názvem fixture: fixture_over_limit; nad max_bytes: over_limit |
| 5 | prvních 8 KiB, když binary: true | bajt NUL: binary |
dovnitř, s pathspec in, který jej připustil |
Adresář je zahrnut, když in pathspec může cokoli pod ním zachytit, a vyloučen, když ho jmenuje cesta out. Cesta, která neexistuje, se posuzuje jen podle jména a říká to (exists: false). Symlink se posuzuje podle jména a hlásí se jako neexistující: zdroje jsou běžné soubory. Kódování není starostí rozsahu: soubor Latin-1 projde krokem 5 a odmítne se tam, kde se čte, jako invalid_utf8.
Co s tím spustitelný soubor dělá
- Objevování. Každý soubor, který objeví třída
sources.yaml, se posoudí dřív, než se přečte. Ten mimo rozsah není objekt: hlásí se jakoout_of_scopes důvodem a pravidlem (discovered by class 'document' but out of the repository scope (over_limit: max_bytes 1048576); not read) a přeskočí se. Diagnostika je varování: index zůstáváoka konflikt mezi třídou a rozsahem je vidět vmajordomus mcp --inspecta vmajordomus://repository. - Index, a tedy každá projekce. MCP
resources/listaresources/read,majordomus_get,majordomus_search,GET /api/v1/objectsa ostatní jsou projekce indexu; co rozsah vyloučil, na žádné z nich nenajdete. - Součet. Při startu se každý sledovaný soubor posoudí podle jména a velikosti, jednou, aby report odpovídal z paměti: kolik jich je in, kolik out z jakého důvodu a které. Sledované tajemství je varování
tracked_secret: nikdy se nečte ani neposkytuje a nemělo by být v repozitáři. Obsah se pro součet nečte; binárka s nevinným jménem se zachytí při čtení. - Původ. Sekce
scopemanifestu jmenuje soubor. Repozitář, jehož manifest žádný nejmenuje, se čte pod výchozím nastavením distribuce,share/skeleton/ai/repo/scope.yaml, souborem, ze kteréhoinitseeduje (včetně každého bloku stacku), a report říkádistribution. Nic se nepředpokládá tiše.
Deklarace se zkompiluje jednou při startu procesu a nikdy se nečte znovu na požadavek: repository.scope a repository.scope_classify čtou z indexu, jak vyžaduje project.rust-hot-path.
Dotazování
majordomus scope # origin, the tally, every tracked file that is out and why
majordomus scope docs/CLI.md .env target/x # one line per path: in|out, reason, path, rule
majordomus scope --check --format json a b # exit 10 when any path given is outin docs/CLI.md (docs/**)
out secret .env (.env) [absent]
out path target/x (**/target/) [absent]
Tytéž dvě schopnosti, repository.scope a repository.scope_classify, jsou nástroje MCP majordomus_scope a majordomus_scope_classify, zdroj majordomus://scope a routy GET /api/v1/scope a GET /api/v1/scope/classify?path=...; reference je generated/modules/repository.md. Cesta, která je absolutní nebo nese segment .., je na každé z nich neplatný vstup.
doctor shellového nástroje hlásí soubor pod layout: jeho verzi, kolik pathspecs in deklaruje a že každý klíč je takový, který schéma deklaruje; manifest, který nejmenuje žádnou sekci rozsahu, je INFO říkající, že platí výchozí. init --extend zasévá soubor do vrstvy napsané před vznikem sekce a říká, že ji manifest musí jmenovat.
Jeho změna
Upravujte .ai/repo/scope.yaml, nikdy nástroj. Repozitář tvořený něčím, co výchozí nastavení nejmenuje, to přidá pod in (garden/**); ten, jehož generátory zapisují jinam, přidá adresář pod out.generated.paths; ten, který drží velké fixtures, zvýší out.fixtures.max_bytes. majordomus scope ukáže účinek na každý sledovaný soubor dřív, než se cokoli commitne; majordomus doctor a cargo test --test scope jsou kontroly. Výchozí nastavení distribuce se mění v kostře, se stejnou revizí.
Čím není
Rozsah řídí, co spustitelný soubor čte a obsluhuje. Nebrání člověku ani poskytovateli, aby soubor otevřel sám, neskenuje obsah kvůli tajemstvím nad rámec jmen, která deklarace uvádí, a není to .gitignore: sledovaný soubor může být mimo (generovaná data, obrázek) a nesledovaný soubor může být uvnitř (--discovery filesystem čte pracovní strom pod stejným rozsahem).