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.

majordomus evidence

Zaznamená důkaz k aktivní úloze: jeden jí deklarovaný závazek, splněný, nebo jednu validační kontrolu modelu CI, která se ohlásila — každý jako řádek ledgeru nesoucí otisk souborů, nad nimiž vznikl.

Zaznamená důkaz k aktivní úloze: jeden jí deklarovaný závazek, splněný, nebo jednu validační kontrolu modelu CI, která se ohlásila — každý jako řádek ledgeru nesoucí otisk souborů, nad nimiž vznikl.

  • mění stav
  • úloha
  • vyžadována aktivní úloha
  • --json

Každý argument, který shellový příkaz bere, je volba, takže slovo na první pozici nikdy není jeho vlastní: show, claim, proves, record a stamp jsou podpříkazy Rust executable, který drží knihu toho, co běželo (docs/EVIDENCE.md), a launcher mu je předá se všemi argumenty beze změny. Která slova to jsou, se čte z deklarace executable, nikdy se nevypisují v launcheru. Nepotřebují aktivní úlohu, jejich exit kódy jsou kódy executable a co každý čte a zapisuje, je na jeho vlastní stránce pod /docs/cli/evidence/.

Syntaxe

majordomus evidence (--covers <token> [--type <kind>] (--command <cmd> | --artifact <ref>) | --gate <id> --exit <status>) [--result <r>] [--json] | majordomus evidence <show|claim|proves|record|stamp> [options]

Životní cyklus

  1. Nastavit
  2. Začít
  3. Pracovat
  4. Ověřit
  5. Uzavřít
  6. Prozkoumat

Další příkazy v této fázi:context, checkpoint, decision, question, prompt, skills, capture.

Čte

  • share/obligations.yaml
  • .ai/repo/ci/gates.yaml
  • .ai/local/state/current.yaml

Zapisuje

  • .ai/local/state/ledger.jsonl

Návratové kódy

Jen kódy, které tento příkaz může vrátit. Úplný kontrakt je na indexu příkazů.

  • 0 ok
  • 2 použití
  • 12 chybějící artefakt
  • 13 interní chyba
  • 15 odmítnuto

Co úloha dlužila a co to dokládá

Rozsah úlohy říká, kam smí worker zapisovat. Její requires říká, co worker dluží. Důkazy splní jednu povinnost a nesou hash souborů, které tato povinnost jmenuje, takže změna kteréhokoli z nich důkaz odebere, místo aby ho zanechala.

Zaznamenání splnění

aktivní úloha
ano
úloha dluží testy
ano

Pro tento repozitář platí

# ... and an active task that owes an obligation, with work done inside its scope. The
# obligation is written into the record the way a caller would declare it, because what the
# scenario is about is the discharge, not how the list got there.
. "$FIXTURE_SETUP/installed.sh"
"$MJ" start "narrow the parser" --scope lib >/dev/null
echo work >> lib/a
python3 - <<'PY'
import io
p = '.ai/local/state/current.yaml'
s = io.open(p, encoding='utf-8').read()
io.open(p, 'w', encoding='utf-8').write(s.replace('outcome:', 'requires:\n  - tests\noutcome:'))
PY

Spustit

$ majordomus evidence --covers tests --type test --command bash test/run.sh

Výstup obsahuje

  • důkazy: testy zaznamenány

ukončení 0

Řádek přistane v hlavní knize, která je už jen pro připisování a kontrolovaná na integritu, a nese hash sledovaných souborů, které povinnost jmenuje. Nic dalšího se nezapisuje; druhé úložiště důkazů by bylo druhým výkladem týchž faktů.

Za něco, co úloha nikdy neslíbila

aktivní úloha
ano
úloha dluží testy
ano

Pro tento repozitář platí

# ... and an active task that owes an obligation, with work done inside its scope. The
# obligation is written into the record the way a caller would declare it, because what the
# scenario is about is the discharge, not how the list got there.
. "$FIXTURE_SETUP/installed.sh"
"$MJ" start "narrow the parser" --scope lib >/dev/null
echo work >> lib/a
python3 - <<'PY'
import io
p = '.ai/local/state/current.yaml'
s = io.open(p, encoding='utf-8').read()
io.open(p, 'w', encoding='utf-8').write(s.replace('outcome:', 'requires:\n  - tests\noutcome:'))
PY

Spustit

$ majordomus evidence --covers docs --command scripts/ci/reference-check

Výstup obsahuje

  • nevyžaduje 'docs'

ukončení 15

Zaznamenávat důkazy k povinnosti, kterou nikdo nedeklaroval, je způsob, jak kontrolní seznam roste o položky, o které nikdo nežádal. Odmítnutí jmenuje, co úloha skutečně vyžaduje.

Bez příkazu nebo artefaktu

aktivní úloha
ano
úloha dluží testy
ano

Pro tento repozitář platí

# ... and an active task that owes an obligation, with work done inside its scope. The
# obligation is written into the record the way a caller would declare it, because what the
# scenario is about is the discharge, not how the list got there.
. "$FIXTURE_SETUP/installed.sh"
"$MJ" start "narrow the parser" --scope lib >/dev/null
echo work >> lib/a
python3 - <<'PY'
import io
p = '.ai/local/state/current.yaml'
s = io.open(p, encoding='utf-8').read()
io.open(p, 'w', encoding='utf-8').write(s.replace('outcome:', 'requires:\n  - tests\noutcome:'))
PY

Spustit

$ majordomus evidence --covers tests

Výstup obsahuje

  • vyprávění není důkaz

ukončení 2

Tvrzení, že se něco udělalo, je přesně to, co má tento příkaz nahradit. Buď důkaz vytvořil příkaz, nebo na něj ukazuje artefakt.

Bez aktivní úlohy

aktivní úloha
ne

Pro tento repozitář platí

# A repository with Majordomus installed and projections generated, and one commit of work.
"$MJ" init >/dev/null
"$MJ" update >/dev/null
mkdir -p lib docs
echo a > lib/a
echo d > docs/d
git add . && git commit -qm base

Spustit

$ majordomus evidence --covers tests --command bash test/run.sh

Výstup obsahuje

  • žádná aktivní úloha

ukončení 12

Povinnost dluží úloha. Bez ničeho, k čemu by se připojila, by důkaz nepopisoval žádný slib.

Reference

Zaznamenat důkazy proti aktivní úloze: jeden závazek, který deklarovala, splněný, nebo jedna validační kontrola modelu CI, která podala zprávu.

majordomus evidence --covers <token> [--type <kind>] (--command <cmd> | --artifact <ref>) [--result <r>] [--json]
majordomus evidence --gate <id> --exit <status> [--command <cmd>] [--result <r>] [--json]
majordomus evidence <show|claim|proves|record|stamp> [options]

Třetí forma patří druhému programu. Každý argument, který tento příkaz přijímá, je volba, takže slovo na první pozici nikdy není jeho vlastní: show, claim, proves, record a stamp jsou podpříkazy spustitelného souboru v Rustu, který drží knihu toho, co proběhlo (EVIDENCE.md), a launcher mu je předá se všemi argumenty beze změny — včetně --repo na kterékoli straně příkazu. Jejich návratové kódy jsou kódy spustitelného souboru a nepotřebují aktivní úlohu. Která slova to jsou, se čte z vlastní deklarace spustitelného souboru (docs/generated/cli.yaml v checkoutu, help evidence <word> dodaného spustitelného souboru v nainstalovaném stromu), takže majordomus evidence --help vypíše přesně ty podpříkazy, které tato instalace dosáhne. Slovo, které nemá žádný z programů, se zde odmítne s kódem 2. Zbytek této sekce je o prvních dvou formách.

Obě formy zaznamenávají různé druhy faktů a nikdy nejsou jedním voláním. Povinnost je slib, který úloha dala; kontrola je to, co o stromu řekla validační pipeline. Řádek, který by se tvářil jako obojí, by se nedal číst jako ani jedno, takže zadání --covers a --gate zároveň skončí kódem 2.

scope úlohy říká, kam smí pracovník zapisovat; její requires říká, co pracovník dluží, než bude dostupný výsledek completed. Tokeny jsou deklarovány v share/obligations.yaml — implementation, tests, docs, generated, rules, commit, push, target, pages, deploy, verify — každý jmenuje příkaz, který jej splácí, a tam, kde je fakt lokální, pathspecs, nad nimiž se berou jeho důkazy.

Čtyři z nich se zde nikdy nezaznamenávají. commit, push, target a pages jmenují fakta, která nástroj dokáže zjistit — čistý strom, remote-tracking ref, který dosáhne hlavy, kmen, který ji dosáhne, publikovaný web, který ji servíruje — a check a finish je rozhodují živě na HEAD, místo aby po pracovníkovi chtěly jejich přepis. Zaznamenat takový token nemá žádný účinek: zjištěný závazek se splácí tím, že je pravdivý, a odmítá se tím, že je nepravdivý. Kde to checkout nemůže rozhodnout (žádný remote, žádná zaznamenaná výchozí větev, web, který nikdy neodpověděl), token se vrací k zaznamenanému řádku a nález říká, o který šlo. deploy a verify zůstávají zaznamenávány ručně a share/obligations.yaml jednou řádkou říká proč: nasazení je fakt o stroji, který tento repozitář nikdy neoslovuje.

--command nebo --artifact je povinné: vyprávění není důkaz. Token, který slovník nedeklaruje, skončí s 2; token, který aktivní úloha nikdy neslíbila, skončí s 15, protože zaznamenávat důkazy pro něco, o co nikdo nežádal, je způsob, jak checklist roste o položky, které nikdo nechtěl.

Zapisuje: řádek task.evidence do knihy, nesoucí povinnost, způsob jejího splnění, příkaz nebo artefakt a hash sledovaných souborů, které povinnost jmenuje. Nezapisuje se nic jiného; kniha je už jen pro připisování, uspořádaná a kontrolovaná na integritu a její obálka už nese hlavu, větev a relaci.

Právě ten hash je podstatou. Důkaz splácí závazek, jen dokud se přepočtený hash jeho vstupů rovná zaznamenanému, takže změna kteréhokoli souboru, který závazek jmenuje, důkaz odebere, místo aby jej nechala být — táž otázka aktuálnosti, kterou klade vlastní source_hash webu, položená výsledku testu. Závazek, jehož fakt je vzdálený (push, integrace, publikace, nasazení), nemá žádné vstupy a je vázán na commit, v němž byl pořízen, posuzovaný exact | advanced | diverged | different_context jako každý jiný zdejší záznam.

check a finish vyhodnocují každou povinnost při každém běhu přes doktrínu majordomus.obligation-closure, takže zastaralý důkaz je vidět dřív, než na něm někdo staví; odmítnut je jen výsledek completed. Worker, který hlásí blocked, je upřímný, a jeho odmítnutí by ho naučilo tvrdit raději completed.

Zaznamenání kontroly

--gate jmenuje kontrolu z .ai/repo/ci/gates.yaml, modelu CI tohoto repozitáře, a --exit stav, který ohlásila; 0 je úspěch. Kontrola, kterou model nedeklaruje, končí kódem 2, stejně jako --exit, které není číslo.

majordomus evidence --gate rust-check --exit 0 --command 'scripts/rust-check --ci'

Zapisuje: řádek task.gate do knihy, nesoucí kontrolu, její návratový kód a hash souborů, které ji vybírají. Ty soubory se odvozují z modelu, nedeklarují se: sjednocení cest každé třídy, která kontrolu pojmenovává, a vše pro kontrolu, kterou vybírá každý plán, protože kontrola, kterou vybírá každý plán, je kontrola, kterou může zneplatnit jakákoli změna. Změňte jeden z nich a běh přestane kontrolu splňovat — zacommitováno či ne, protože sada změn, nad níž se úloha posuzuje, zahrnuje její pracovní strom.

check a finish vyhodnotí každou kontrolu, kterou vybere vlastní sada změn úlohy, přes doktrínu majordomus.completion-gates, a každou hlásí v jednom slovníku:

statusvýznam
passproběhlo nad těmito vstupy a skončilo s kódem 0
failběželo nad těmito vstupy a neběželo
staleběžela a soubory, které ji vybírají, se od té doby změnily
blockedněco, bez čeho nemůže běžet, neprošlo
queuedplán jej vybere a žádný běh dosud nehlásil
exemptnic, co tato změna udělala, to nemůže učinit pravdivým ani nepravdivým
unknownnelze ho zde vůbec posoudit — model, který se nenaparsuje, čtečka, která není sestavena, chyby nebo žádná odpověď, žádné jq

fail, stale, blocked a unknown odmítnou výsledek completed: completed je tvrzení, že verdikt je znám, a verdikt, který nešlo přečíst, jej nemůže podpořit. Každý jiný výsledek je přijat i nad kterýmkoli z nich, označený „not refused“, a check hlásí, aniž by odmítal. Repozitář, který nedeklaruje žádný model CI, nemá žádnou kontrolu, o které by mohl být verdikt neznámý, a nic neodmítá. queued se hlásí jménem, nikdy se nepřijme jako pass a nikdy se neodmítne: verdikt, který nikdy nepřišel, a verdikt, který řekl pass, jsou různé skutečnosti, a 2026-09-10 nesl trunk tohoto repozitáře přes noc tři vady rozbíjející branch, protože vypadaly stejně (majordomus.never-reported-is-not-green).

Celý verdikt — každá kontrola, plán, který ji vybral, které závazky změna implikuje, a dvaadvacet otázek invariantu hotovo se zdrojem, který každou zodpověděl — je jeden dokument, gates.completion, čtený stejně příkazovou řádkou, HTTP API, MCP i Cockpitem:

majordomus-cli run gates.completion --input '{}' --format json | jq '.output.questions'

Závěrečné otázky

Tři z těchto otázek jsou ty, které si člověk klade, když relace končí, a pracovník není jejich zdrojem (project.a-closing-question-is-answered-by-measurement). Každá se čte ze záznamu, který drží daný fakt, měřeno od začátku úlohy:

otázkaptá sečteno zkdyž to není pass
no-new-debtnení zaznamenaný dluh větší než při zahájení úlohy?položky každého .ai/repo/*-baseline.txt v commitu, na kterém úloha začala, a v pracovním stromufail, jmenuje každý základ, který vzrostl, a o kolik
nothing-accumulatedzmizela znovu každá větev a worktree, které od té doby vznikly?reflogy gitu: kdy začala každá lokální branch a každý připojený worktreequeued, s uvedením toho, co zbývá, a se součty nyní
backlog-not-grownbyl od té doby uzavřen každý otevřený pull request?zaznamenané pozorování forge (majordomus prs refresh)queued, s jejich očíslováním; unknown, když forge nebyl od zahájení úlohy pozorován

Jsou to čtení repozitáře, ne jednoho pracovníka: git neříká, kdo větev vytvořil, takže větev, kterou vytvořila jiná relace od začátku úlohy, se počítá. Čtení, které nešlo provést, je unknown a říká proč; nikdy to není pass. majordomus check pojmenovává každou dosud dluženou otázku jako id=status na jejím řádku done, takže odpověď na „je vše hotovo a nezanechalo to repozitář větší, než ho našlo?“ je jeden příkaz, ne vzpomínka; důkazy za každým slovem jsou v questions dokumentu výše.

Důkazy

Každý případ níže běží v CI na Linuxu i macOS. Web se odmítne sestavit, pokud veřejný příkaz nemá behaviorální případ, negativní případ nebo ukázku.

Ukázka

Testuje test/cases/34_command_fixtures.sh, který přehraje fixture a porovná ji s tím, co příkaz vypíše.

Záruky, které tento příkaz nese

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