○zaručeno
Poskytování vrstvy AI klientůmzákladníoperátoragentzapisuje stav
Tři AI klienti jsou otevřeni v jednom checkoutu. Každý čte .ai/ ručně, žádný neví o ostatních a první, co dva z nich udělají, je úprava téhož souboru. Vrstva je kontrakt, ale nic ji neservíruje a nic neukazuje, kdo kde pracuje.
init: zapisuje vrstvu .ai/, kterou executable servíruje; konfigurace klientů v kořeni (.mcp.json, .gemini/settings.json, .codex/config.toml) spouštějí bin/majordomus-mcp, který v případě potřeby sestaví Rust executable
doctor: dokazuje, že vrstva a její projekce jsou konzistentní dřív, než je klient přečte, a že autostart klienta MCP je zapojen
setup: installed-wired
given:
- 'a repository with the layer installed and its projections generated'
steps:
- id: nothing-to-add
run: ['init', '--extend']
note: 'the layer is complete; the client configurations at the root start the server'
expect:
exit: 0
stdout_contains: ['nothing to add']
- id: healthy
run: ['doctor']
note: 'what the server will serve is what doctor proved'
expect:
exit: 0
stdout_contains: ['doctor: 0 failure']
then:
- 'an MCP client opened here starts the shared server through bin/majordomus-mcp and reads the same layer'
První klient, který otevře checkout, je jeho sdílený server; každý další klient téhož checkoutu se k němu připojí a linked worktree, protože je checkout, má vlastní. Každý klient vidí tytéž objekty jako zdroje majordomus:// a tytéž nástroje, vypisuje každého workera repozitáře přes majordomus_peers - vlastní nástěnku i nástěnku každého jiného checkoutu, každý peer označený worktree, v němž je (ADR 0044) - a oznamuje svůj záměr a cesty, kterých se dotkne, přes majordomus_announce. Lease, který klient zanechá, nikdy nezamkne ostatní a klient, který nemůže obsluhovat, to řekne, místo aby potichu servíroval degradovanou vrstvu.
Scénář
Provedeno proti skutečnému nástroji v repozitáři připraveném pomocí installed-wired, při každém generování tohoto webu. To, co následuje, není popis toho, co by se mělo stát; je to to, co se stalo.
dáno
- ·repozitář s nainstalovanou vrstvou a vygenerovanými projekcemi
kdy
- 1
majordomus init --extend - 2
majordomus doctor
pak
- ·klient MCP otevřený zde spustí sdílený server přes bin/majordomus-mcp a čte tutéž vrstvu
Co nástroj udělal
Důkaz běhu, ze kterého byla tato stránka vygenerována: pass, 2 kroky. Výstup je normalizován: cesta repozitáře, časová razítka, id a doby trvání jsou zástupné hodnoty; nic dalšího se neupravuje.
Testováno v test/cases/94_use_cases.sh, který spouští každý scénář a odmítne krok, jehož zaznamenaný výstup není tím, co vyprodukoval.
-
vrstva je kompletní; konfigurace klientů v kořeni spouštějí server
nothing to add; .ai/ already carries every file the skeleton seeds
local state: .ai/local/state/ (ignored by git; this checkout's own)
next: majordomus update # generate the provider instruction files named in the policy
next: majordomus doctor # verify nothing is declared that is not wired
hooks are not installed by init; add these two lines yourself, doctor verifies them:
pre-commit: majordomus doctor || exit $?
pre-push: majordomus finish --check || exit $?
- exit 0
- stdout_contains /nothing to add/
-
co server bude obsluhovat, je to, co doctor dokázal
OK knowledge graph — buildable here: 98 node(s), 58 edge(s), compiled into a temporary file and removed; no stored index to go stale
OK knowledge records — 0 record(s) valid against knowledge/v1; every reference resolves [reproduce: majordomus knowledge check]
OK knowledge candidates — 0 await review, cap 40
OK layout .ai/manifest.yaml — schema ai-repository/v1
OK layout .ai/repo/scope.yaml — version 1; 14 in pathspec(s); every key is one the schema declares
OK layout .ai/local/ — ignored, and nothing under it is tracked
OK layout .ai/ — every section the manifest names exists; the layer is readable without the tool
OK layout .ai/repo/prompts — present
OK layout .ai/local/state/handovers — present, 0 record(s)
OK layout .ai/local/state/checkpoints — present, 0 record(s)
OK records ledger.jsonl — every line is a well-formed event
OK policy 39 key(s) — every policy value the code reads is declared, with no reader-side default
OK bootstrap 3 projection(s) — each points at .ai/README.md, carries no rule of its own and names only rules in force
OK catalogue 0 use case(s), 0 application(s) — every command, doctrine, claim, responsibility, category, setup and cross-reference resolves, both directions
OK context .ai/ — 19 context document(s) carry the contract; ids unique, references resolve, no final document superseded, no cycle [reproduce: majordomus context validate]
OK policy .ai/repo/policy.yaml — parsed, version 1
OK profiles 4 files — parsed; default 'implementation' exists
INFO adr .ai/repo/adrs/ — no decisions; nothing to validate
OK records decisions.md — every entry is attributable
INFO project .ai/repo/project — no canonical project model here; nothing to validate
OK command surface — 30 public command(s), reconciled against the dispatch table [reproduce: majordomus doctor]
OK doctrine 50 of 61 rule(s) carry a validator — validator, dispatch, propagation, test and CI resolve for every one of the 50; the remaining 11 declare no validator and this check does not examine them
OK wiring doctor-on-commit — wired via .githooks/pre-commit
OK wiring finish-on-push — wired via .githooks/pre-push
OK command coverage — every public command is exercised and refuted [reproduce: bash test/run.sh 31_command_coverage]
OK resolver handovers — no record for this worktree and branch (absence, not a stale match) [reproduce: majordomus handover --resolve]
OK lifecycle activity — 0 episode(s) opened here; too few to judge whether the writers stopped
OK knowledge wiring — the close path and the compaction adapter call the deriver
OK knowledge deriver — no episode has closed here; nothing to judge
INFO project .ai/repo/project — no canonical project model here; nothing to validate
OK projection AGENTS.md — content matches its stamp
OK projection CLAUDE.md — content matches its stamp
OK projection GEMINI.md — content matches its stamp
OK budget AGENTS.md — 42 lines, budget 150
OK links AGENTS.md — all references resolve
OK counts AGENTS.md — no hardcoded counts
OK context builder — 21 lines, budget 300 [reproduce: majordomus context]
OK capture share/schemas/majordomus/capture/capture.v1 — 2 file(s) describe majordomus.capture/v1 at the path the identifier derives: the record as JSON Schema, the document as protobuf
OK capture .ai/local/prompts — ignored and untracked
OK capture .ai/local/prompts — no records yet; the archive is empty
OK capture .ai/local/prompts — every prompt is present as all three: the record, the Markdown and the YAML
OK prompts .ai/local/prompts — the archive and every record in it are readable by their owner only
OK prompts .ai/local/prompts — no records yet; the archive is empty
OK prompt 4 asset(s) — front matter valid, every token known
OK records open-questions.md — every entry parses
OK retention ledger — 1 lines, cap 5000
OK retention handovers — 0 files, cap 200
OK retention checkpoints — 0 files, cap 500
OK retention sessions — 0 records, cap 500
INFO project .ai/repo/project — no canonical project model here; nothing to validate
OK rules .ai/repo/rules/vendor/majordomus — every file matches the manifest (1 (1.0.0-alpha.4))
OK rules 61 rule(s) — resolve in one deterministic order; vendored baseline plus project rules, no override — 51 carry a validator, 10 are normative text this tool does not check
OK rules blocking — all 44 blocking rule(s) carry a validator
OK schema rules — 61 rule(s) resolve in one order: the vendored baseline in manifest order, then the project's, as a dependency graph
OK schema share/kinds.yaml — 36 kind(s); every one that carries metadata declares a schema
OK schema share/schemas — 53 schema(s), each valid JSON and each applied — by a kind, through an allow-list the tool reads, by a validator that names it, or as a generated document's contract (15)
OK records 0 record(s) — every changed_files names work, not generated or local state
OK session .ai/local/session-contexts — ignored and untracked
OK session .ai/local/session-contexts — no working contexts yet; the store is empty
INFO skill .ai/repo/skills/ — no skills; nothing to validate
INFO use-case 30 advisory gap(s) — not covered by an active use case, and the policy does not require it: command:init command:update command:doctor command:watch command:start command:context command:checkpoint command:handover command:check command:finish command:history command:decision command:question command:prompt command:evidence command:skills command:capture command:search command:doctrine command:plan command:version command:session command:knowledge command:adr command:usecase command:rules command:migrate command:recover command:bench command:archive [reproduce: majordomus usecase coverage]
OK use-case 0 of 30 target(s) covered — every public command the policy requires is named and run by an active use case (policy use_cases.coverage)
INFO env - — bash <version>, git <version>, jq <version>, shellcheck present
WARN clone unpushed — commits on no remote: main(2) — work on one disk is invisible to every other session and cannot be integrated [reproduce: git push -u origin <branch>]
OK clone uncommitted — no linked worktree, so no uncommitted work can sit in one
INFO clone trunk — no remote-tracking branch, so this checkout's distance from the remote trunk cannot be measured
· reasoning <decided by the advisors and the executable of the recording machine>
· budget doctor — <timed against the policy budget>
doctor: 0 failure(s)
- exit 0
- stdout_contains /doctor: 0 failure/
Proč to nástroj ví
Řetězec od této stránky ke kódu: případ užití jmenuje příkazy, pravidla a tvrzení; každé pravidlo se dispatchuje z registru a každé tvrzení jmenuje test, který ho dokazuje; scénář výše provedl příkazy. Nic v tomto řetězci není text o záměru.
Přes MCP se k téže vrstvě dostanete přes majordomus_repository, majordomus_list, majordomus_get, majordomus_peers, majordomus_announce (povrch MCP).
Pravidla, díky nimž platí
Uplatněné záruky
- ○zaručeno Spustitelný soubor v Rustu zpřístupňuje AI vrstvu repozitáře klientovi MCP přes stdio, přičemž na stdout jsou jen rámce protokolu
- ○zaručeno Soubor vrstvy, který server MCP nemůže přečíst, se vyloučí s diagnostikou jmenující jeho cestu a index uvede, že je degradovaný, nikdy ne potichu menší
- ○zaručeno Checkout obsluhuje jeden sdílený server: první majordomus mcp naváže loopback HTTP se Swagger UI a MCP přes HTTP vedle své relace stdio a zaloguje URL, každý další klient toho checkoutu se k němu připojí a skončí, když odejde poslední klient
- ○záruka Nic, co klient po sobě zanechá, nezamkne jiného klienta ze sdíleného serveru; poškozená, prázdná, zastaralá nebo opuštěná lease se převezme a pojmenuje, klient, který nemůže sdílet, je obsloužen samostatně s důvodem v logu a signál odstraní lease dřív, než server zemře
- ○zaručeno Každý klient připojený k serveru checkoutu je peer pojmenovaný vlastním initialize a majordomus_peers vypíše každého pracovníka repozitáře — jeho vlastní nástěnku i nástěnku každého jiného checkoutu, každý peer označený worktree, v němž pracuje — zatímco majordomus_announce říká ostatním, na čem pracuje a kterých cest se chystá dotknout
- ○zaručeno Klient MCP otevřený v repozitáři spustí server sám, a když je třeba, sestaví spustitelný soubor, přes konfigurace klientů v kořeni a bin/majordomus-mcp
- ○zaručeno URI majordomus:// se vyřeší stejně přes čtení zdroje MCP, nástroj majordomus_get i cestu objektu v HTTP a majordomus://repository odpovídá repository.info jako dokument JSON označený builtin
Související případy užití
Vypočteno z toho, co sdílejí: tvrzení, pravidla, příkazy, kategorie, aplikace. Tento seznam nikdo neudržuje.
- Rozšiřte, co spustitelný soubor poskytuje, přidáním souboru, nikdy jeho přebuildovánímPřidejte do .ai/ pravidlo, prompt nebo uzel znalostí a nechte je objevit se jako zdroj MCP, HTTP route a položka reference, se stejným binárním souborem.
- Podívat se, co repozitář obsahuje, a spustit jednu z jeho schopností, bez čtení souboruOtevřete sdílený server v prohlížeči a získejte celou vrstvu jako stránky: co existuje, odkud co pochází, co na čem závisí, co selhává, a formulář, který spustí libovolnou schopnost.
- Najděte objekt vrstvy, aniž byste četli všeHledejte trvalé záznamy doslovně napříč druhy z shellu a stejnou otázku položte sdílenému serveru přes MCP pomocí majordomus_search a majordomus_get.
- Řekněte jednou, k čemu vaše práce slouží, a nechte to říkat každý povrchZaznamenejte provozní způsob selhání jako jeden soubor a nechte na něj odpovídat příkazovou řádku, API, MCP i web, aniž by se kdekoli registroval.
- Nainstalovat nástroj jedním příkazem na stroji bez toolchainuVložte jeden řádek, získejte ověřenou binárku pro tento stroj a spusťte majordomus init — žádný git, žádný Rust, žádný Node, žádný Python, žádný root a žádná možnost nainstalovat archiv, jehož digest nesouhlasí.
Okamžiky, na které to odpovídá