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 adr

Architektonická rozhodnutí repozitáře jako objekty: výpis, zobrazení, vyžádání dalšího volného identifikátoru, navržení jednoho s původem a validace celé sady proti tomuto stromu a všem ostatním refům.

Architektonická rozhodnutí repozitáře jako objekty: výpis, zobrazení, vyžádání dalšího volného identifikátoru, navržení jednoho s původem a validace celé sady proti tomuto stromu a všem ostatním refům.

  • mění stav
  • paměť
  • --json

propose zapíše status 'proposed' a odmítá --status: přijetí rozhodnutí je úprava pole člověkem. Identita se alokuje nad nejvyšší značkou čtyř zdrojů — tento pracovní strom, každý sourozenecký worktree tak, jak je na disku, každý ref a nástěnka peerů — a nikdy do díry, protože díra je identita vzatá a stažená, nebo vzatá a ještě nezapsaná; next se na ten průzkum ptá, aniž cokoli zapíše, a říká, co každý zdroj nárokoval. check odmítne duplicitní identity, nahrazený záznam bez náhrady, jednostranné nahrazení a identitu, kterou tento strom přidává a u které jiný ref nese jiné rozhodnutí.

Syntaxe

majordomus adr <list|show <id>|next|propose "<title>"|check|affected> [--json]

Ž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:handover, finish.

Čte

  • .ai/repo/adrs/
  • .ai/repo/knowledge/sources.yaml
  • share/allow/adr.txt

Zapisuje

  • .ai/repo/adrs/
  • .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í
  • 10 kontrakt nesplněn
  • 12 chybějící artefakt
  • 13 interní chyba
  • 15 odmítnuto

Rozhodnutí, která nástroj navrhuje a přijímá jen člověk

Architektonické rozhodnutí je soubor v sekci adrs repozitáře: front matter splňující schéma rozhodnutí nad tělem s kontextem, rozhodnutím a jeho důsledky. Nic ho neregistruje — zdrojová třída `adr` ve zdrojích znalostí ho objeví nad sledovaným stromem a list, show, check, doktrína i MCP čtou tento jediný katalog. To, co nástroj zapíše, je vždy `proposed`, protože přijetí je akt člověka.

Rozhodnutí existuje, protože existuje jeho soubor

rozhodnutí sledováno
ano

Pro tento repozitář platí

# Installed, with one decision proposed and committed. Discovery is over the tracked tree,
# so a decision the working copy holds and git does not is not yet part of the layer: the
# commit is what makes the record discoverable, exactly as it is for every other kind.
. "$FIXTURE_SETUP/installed.sh"
"$MJ" adr propose "The registry is the one canonical declaration" --from file:docs/d --tag architecture >/dev/null
git add . && git commit -qm "adr: the registry is the one canonical declaration"

Spustit

$ majordomus adr list

Výstup obsahuje

  • adr-0001
  • navrženo

ukončení 0

Jeden řádek na rozhodnutí, v pořadí objevení: identita, stav, datum, kdy k němu došlo, a název.

Co kontrola zkoumala

rozhodnutí sledováno
ano

Pro tento repozitář platí

# Installed, with one decision proposed and committed. Discovery is over the tracked tree,
# so a decision the working copy holds and git does not is not yet part of the layer: the
# commit is what makes the record discoverable, exactly as it is for every other kind.
. "$FIXTURE_SETUP/installed.sh"
"$MJ" adr propose "The registry is the one canonical declaration" --from file:docs/d --tag architecture >/dev/null
git add . && git commit -qm "adr: the registry is the one canonical declaration"

Spustit

$ majordomus adr check

Výstup obsahuje

  • examined 1 decision\(s\)
  • každá identita jedinečná

ukončení 0

Čistý výsledek uvádí, co zkoumal, aby průchod nad prázdným adresářem nemohl vypadat jako průchod nad celou sadou.

Stav si nevybírá nástroj

rozhodnutí sledováno
ano

Pro tento repozitář platí

# Installed, with one decision proposed and committed. Discovery is over the tracked tree,
# so a decision the working copy holds and git does not is not yet part of the layer: the
# commit is what makes the record discoverable, exactly as it is for every other kind.
. "$FIXTURE_SETUP/installed.sh"
"$MJ" adr propose "The registry is the one canonical declaration" --from file:docs/d --tag architecture >/dev/null
git add . && git commit -qm "adr: the registry is the one canonical declaration"

Spustit

$ majordomus adr propose A decision that accepts itself --status accepted

Výstup obsahuje

  • nevolíte vy
  • člověk upravující záznam

ukončení 15

Exit 15 je REFUSED. Nástroj, který může zapsat `accepted`, mění vlastní odvození v pravdu repozitáře a čtenář o měsíce později nepozná, která rozhodnutí skutečně učinil člověk.

Požadavek na neexistující

rozhodnutí sledováno
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 adr show adr-9999

Výstup obsahuje

  • adr list

ukončení 12

Exit 12 je MISSING_ARTIFACT a zpráva jmenuje příkaz, který vypíše, co existuje.

Ke kterým rozhodnutím sada změn dosáhne

rozhodnutí jmenující soubor
ano

Pro tento repozitář platí

# One decision, committed, that names what it put in force. `propose` writes provenance —
# where the record came from — and never `related`, which is the other direction and a
# person's statement: this rule, this file, are what the decision did.
. "$FIXTURE_SETUP/adr-recorded.sh"
adr="$(ls .ai/repo/adrs/0001-*.md)"
sed -i.bak 's|^status: proposed$|status: proposed\
related:\
  - rule:majordomus.adr-integrity\
  - file:docs/d|' "$adr" && rm -f "$adr.bak"
git add . && git commit -qm "adr: name the rule and the file the decision put in force"

Spustit

$ majordomus adr affected

Výstup obsahuje

  • žádné rozhodnutí nepojmenovává nic, čeho se tato sada změn dotkla

ukončení 0

Čte se z toho, co rozhodnutí samotná jmenují: čistý strom se nedotýká ničeho a změna pojmenované cesty jmenuje rozhodnutí za ní. Jen poznámky k posouzení — zda rozhodnutí stále platí poté, co se kód, který řídí, pohnul, nástroj nehodnotí, takže exit kód zůstává 0.

Reference

Architektonická rozhodnutí repozitáře jako objekty: co se rozhodlo, proč, co to stálo a odkud záznam pochází. V sekci vrstvy adrs.

Rozhodnutí je soubor .ai/repo/adrs/<NNNN>-<slug>.md — YAML front matter splňující share/schemas/majordomus/adr/adr.v1.schema.json nad tělem nesoucím # Context, # Decision a # Consequences. Nic jej neregistruje: třída zdroje adr v .ai/repo/knowledge/sources.yaml jej objeví nad sledovaným stromem, což je táž deklarace, kterou indexuje spustitelný soubor v Rustu. Kontrakt viz SCHEMAS.md.

majordomus adr list [--status <status>] [--json]      every decision: id, status, date, title
majordomus adr show <id> [--json]                     the path, then the file as written
majordomus adr next [--json]                          the next free identity, and every source surveyed
majordomus adr propose "<title>" [--from <ref>]...    write a new decision, status proposed
                       [--tag <tag>]... [--supersedes <id>]
majordomus adr check [--json]                         validate every decision and every reference
majordomus adr affected [--base <ref>|--staged|--worktree] [--json]   the decisions a change set touches
  • list vypíše jeden řádek na každé objevené rozhodnutí, včetně neplatných; --status filtruje na jedno z proposed, accepted, superseded, rejected.

  • show vypíše cestu relativní k repozitáři na prvním řádku a pod ní soubor. Id, které není rozhodnutí, skončí kódem 12 a pojmenuje adr list.

  • next odpovídá, jaká je další volná identita, a říká, na co se při rozhodování podíval. Čtyři zdroje, z nichž každý hlásí, kolik identit si nárokoval: tento pracovní strom, každý sourozenecký worktree tak, jak je na disku (autorsky napsané a dosud necommitnuté je skutečný nárok), každý ref — větve, tagy, remote-tracking refy a HEAD každého propojeného worktree, v jednom git log --all --no-renames --diff-filter=A — a nástěnka peerů sdíleného serveru, která je jediným zdrojem, jenž ví o identitě, kterou se relace rozhodla vzít a nikam ji nezapsala. Zdroj, který nebylo možné oslovit, se hlásí jako nedostupný a nikdy se mlčky nevypouští ze jmenovatele. Alokace je monotónní: o jedna nad nejvyšší identitou, kterou kdy cokoli nárokovalo, nikdy do mezery. Mezera znamená, že identita byla vzata a stažena, nebo vzata a dosud nezapsána, a nic nepozná jedno či druhé od čísla, které nikdo nikdy nepoužil — 0034 tohoto repozitáře není na žádné větvi, v žádném tagu ani v žádném pracovním stromu a ADR 0035 ji cituje. Mezery se proto uvádějí jako spotřebované, s tím, co je cituje, pojmenovaným jako důkaz pro čtenáře. Shellový nástroj nemá vlastní identitu peera, takže relace, která ohlásila alokaci a pak se ptá, je přeskočena přes svůj vlastní nárok; výstup říká, kdy horní hranice pochází z nároku na nástěnce. propose alokuje přes stejný průzkum.

  • propose zapisuje status: proposed a nic jiného. Neexistuje způsob, jak zapsat accepted: --status skončí s 15 a jmenuje důvod, protože nástroj, který umí zapsat accepted, mění vlastní odvození v pravdu repozitáře a pozdější čtenář nepozná, která rozhodnutí skutečně učinil člověk. Identita se přiděluje pod zámkem nad adresářem sekce, takže dva worktree navrhující ve stejný okamžik dostanou dvě identity. Reference --from je <type>:<value> s typem jedním z decision, session, commit, issue, file, test; cesta file: nebo test:, která neexistuje, skončí s 2. Odkazovaný důkaz činí záznam provenance.origin: extracted a extrahovaný záznam bez důkazu se odmítne jako pouhé tvrzení. --supersedes zapisuje obě poloviny vztahu, takže řetězec lze projít z obou konců.

  • related je druhá polovina odkazů záznamu a je autorská, nikoli zapisovaná propose: rule:<id>, claim:<id>, file:<path>, test:<path> — co rozhodnutí uvedlo v platnost, na rozdíl od provenance.derived_from, což je to, odkud pochází. Každý je validován tam, kde podle svého typu cíl žije, a extraktor z něj udělá hranu grafu (declares, supports, references, tested_by), takže opačný směr — které rozhodnutí uvedlo toto pravidlo v platnost — je knowledge edges, a ne druhý seznam, který by někdo udržoval v souladu.

  • check validuje každý záznam proti seznamu povolených klíčů generovanému ze schématu (žádný neznámý klíč), schema: adr/v1, uzavřené množině stavů, id, jehož číslo se rovná prefixu názvu souboru, a povinným sekcím těla; a napříč množinou: duplicitní identity, záznam superseded bez superseded_by, jednostranné nahrazení a odkaz, který se nikam nepřeloží. Při jakémkoli selhání skončí kódem 10.

  • check klade i otázku, na kterou žádný jednotlivý strom o sobě odpovědět nemůže: pro každou identitu, kterou tento strom oproti základu přidává (origin/master, origin/main, master, main, v tomto pořadí; MJ_ADR_BASE přepíše a je pak jediným kandidátem), nese jiný ref odlišný dokument na téže identitě? Odlišný název souboru je konkurenční nárok a odmítne se se jmenováním obou dokumentů, refů, které nesou ten druhý, a majordomus adr next; stejný název souboru na dvou refech je úprava a řeší se sloučením. Verdikt vždy uvádí svůj předmět — kolik identit bylo přidáno a proti čemu se měřily — a když se základ nevyřeší, říká, že ostatní refy nebyly prozkoumány, místo aby skončil čistě, aniž by cokoli řekl. doctor provádí totéž zkoumání a doctor je pre-commit hook, takže kolize se odmítne na větvi, a ne až při merge, kde by generate --strict vyloučil každého žadatele a jmenoval jen identitu. ADR 0053 je zdůvodnění.

  • affected čte sadu změn — ve výchozím stavu pracovní strom proti HEAD, --staged pro index, --base <ref> pro <ref>..HEAD plus pracovní strom — a jmenuje každé rozhodnutí, jehož vlastní soubor se změnil nebo jehož related jmenuje cestu, které se změna dotýká (odkaz na adresář pokrývá vše pod ním). Každá položka je poznámka k revizi WARN a exit kód zůstává 0: zda rozhodnutí stále platí poté, co se pohnul kód, který řídí, je úsudek, který nástroj činit nesmí. Je to obrácená otázka, na kterou odpovídá graf — co rozhodlo o tomto souboru? — položená ze sady změn, a ne ze záznamu.

doctor a watch spouštějí stejné zkoumání přes doktrínu majordomus.adr-integrity. Práh pro zaznamenání rozhodnutí vůbec je pravidlo majordomus.decision-threshold, o kterém rozhoduje revizor: nástroj validuje záznamy a hlásí, čeho se změna dotýká, a nikdy netvrdí, že ví, že diff ztělesňoval rozhodnutí.

$ majordomus adr propose "The registry is the one canonical declaration" --from file:docs/CAPABILITIES.md
proposed: adr-0011  The registry is the one canonical declaration
.ai/repo/adrs/0011-the-registry-is-the-one-canonical-declaration.md
status is "proposed"; accepting it is a person editing that field.

$ majordomus adr check
examined 11 decision(s) in .ai/repo/adrs/
every identity unique, every status known, every reference resolves

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.

Způsoby selhání

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.