Co to znamená
Spustitelný soubor nejmenuje žádný soubor repozitáře kromě dvou konvencí, které vrstva dokumentuje, .ai/manifest.yaml a sources.yaml v sekci knowledge. Manifest říká, které sekce existují, sources.yaml říká, které soubory nesou který druh, tentýž share/allow/<kind>.txt, který používá shellový nástroj, říká, jaké klíče druh smí nést, a vložený schema/kinds.yaml spustitelného souboru říká, jak se druh čte. Napište pravidlo do .ai/repo/rules/project/, sledujte ho, restartujte server a je majordomus://rule/<id>@<version> s vlastním původem. Deklarujte novou třídu známého druhu v sources.yaml a bude servírována také.
Princip
src/discovery/mod.rs čte třídy a vyjmenovává každý pathspec přes git ls-files, seřazeně; src/index.rs čte každý soubor ve formátu jeho druhu, validuje jeho klíče proti allow-listu, bere identitu a titul z polí, která schéma jmenuje, a zaznamenává cestu, adresář, třídu a sekci. Nic v kódu nevětví podle cesty, názvu souboru ani jména providera.
Jak to vidět
majordomus init && git add -A && git commit -qm install
apps/majordomus-cli/target/debug/majordomus mcp --inspect | grep -c '^resource majordomus://rule/'
cat > .ai/repo/rules/project/example.v1.md <<'R'
---
id: project.example
version: 1
kind: rule
title: Example
description: An example.
statement: Do the example thing.
status: active
class: advisory
depends_on: []
tags: []
---
R
git add -A
apps/majordomus-cli/target/debug/majordomus mcp --inspect | grep '^resource majordomus://rule/project.example@1'
Počet naroste o jedna a nové URI je uvedeno; smažte soubor a zmizí.
Co nepokrývá
Druh, který spustitelný soubor nečte (kind: v sources.yaml bez položky v schema/kinds.yaml), se hlásí u každého souboru té třídy a neservíruje se u žádného: data popisují objekty, nedefinují, jak se čte nový druh. Objevování sleduje kontrakt vrstvy a jde přes git index, takže nesledovaný soubor se neservíruje, pokud o něj není požádáno --discovery filesystem. Hierarchické kontextové soubory se servírují jako dokumenty se zaznamenaným adresářem a nesloučí se, protože repozitář nedefinuje žádnou sémantiku sloučení.
Proč existuje
Tabulka zdrojů zapsaná do kódu by se od vrstvy rozešla s prvním novým pravidlem, což je druhý zdroj pravdy, kterému má 28_no_hardcoded_values.sh zabránit. apps/majordomus-cli/tests/external_extension.rs provede posloupnost přidání, odebrání a porušení přes sestavený binární soubor bez změny v Rustu; test/cases/72_rust_mcp.sh dokládá, že pravidlo přidané do vrstvy, kterou zapisuje init, je servírováno.