Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Rozsah repozitáře

rozsah repozitáře: co pracovník čte a co nikdy nečte, deklarováno jednou v `.ai/repo/scope.yaml`, jak se posuzuje cesta (název, velikost, obsah), co s ní dělá executable a `majordomus scope`

Vykresleno z docs/SCOPE.md — stejného Markdownu, který ukazuje GitHub.

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:

krokco se konzultujeverdikt
1out.paths, pak paths každé kategorie, proti cestěout: path, nebo kategorie
2names každé kategorie, proti názvu souboruven: secret, generated, archive, image, video, pdf, database_dump
3in, proti cestěnic neodpovídá: out, undeclared
4velikost, když je cesta existující soubornad fixtures.max_bytes pod cestou nebo názvem fixture: fixture_over_limit; nad max_bytes: over_limit
5prvních 8 KiB, když binary: truebajt 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 jako out_of_scope s 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á ok a konflikt mezi třídou a rozsahem je vidět v majordomus mcp --inspect a v majordomus://repository.
  • Index, a tedy každá projekce. MCP resources/list a resources/read, majordomus_get, majordomus_search, GET /api/v1/objects a 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 scope manifestu 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ého init seeduje (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 out
in                        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).

Tvrzení, která tento dokument definuje

Každý odkazuje na vlastní stránku s implementací, testem a místy použití.

Prohledává názvy a popisy všech stránek, které tento web publikuje.