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.

Sémantika vývoje žije v kanonickém runtime; povrch ji jen využívá

Sémantika vývoje žije v kanonickém runtime; povrch ji jen využívá

majordomus://rule/project.development-semantics-are-canonical@1aktivní architekturacapabilitiescockpitruntime

Zdůvodnění

Cockpit se stává vývojovým povrchem a vývojový povrch musí odpovídat na otázky jako „je tento úkol připraven?“, „co tato úloha ještě dluží?“, „smí se tato relace zavřít?“. Každá z nich je sémantika a každá už má v tomto repozitáři právě jednu správnou odpověď. Riziko není, že na ně povrch odpoví špatně. Je to, že na ně vůbec odpovídá, protože druhá odpověď je správná v den, kdy vznikla, a rozejde se při první změně té první.

Měření, které to zkonkretizuje, je v ADR 0040. Z 78 vestavěných schopností, které majordomus-cli capabilities list --format json hlásí, může cokoli měnit jen tři a všech 28 uzlů původu v nástrojích z majordomus-cli commands graph --format json je ze všech strojových povrchů vyloučeno. Runtime tedy dnes nabízí vývojovému povrchu téměř nic ke spotřebě a tlak, aby si ten povrch rozhodoval sám, je skutečný, nikoli hypotetický. Toto pravidlo existuje proto, aby se tlak řešil směrem k registru, a ne do šablony.

Pravidlo záměrně nezní „Cockpit musí být projekce“ — to už říkají docs/COCKPIT.md a ADR 0013 a Cockpit se jimi už řídí: jeho zdroje zmiňují .ai/ jednou, jako popisek k zobrazení. Toto pravidlo je opak, zaměřený na všechny povrchy najednou, včetně shellového nástroje, který sémantiku dnes vlastní. Říká, kde sémantika žije, aby přidání povrchu nikdy neznamenalo přidání implementace.

Požadované chování

Vývojová sémantika je jakékoli pravidlo, odvození nebo přechod nad plánem (issue, milestone), aktivním task, zkompilovaným context, session, execution, peer, event, evidence, obligation nebo dokončením. Každá je deklarována jednou, jako capability! pod apps/majordomus-cli/src/capability/builtin/, s typovaným vstupem a výstupem, a dostává se na své povrchy přes politiku expozice v command_graph/policy.rs — nikdy přes ručně psanou cestu, seznam nástrojů nebo stránku.

Plocha konzumuje. Cockpit vykresluje výstup schopností a odesílá jejich vstup; nepočítá žádný stav, nerozhoduje žádný přechod a nečte ani nezapisuje žádný soubor vrstvy. CLI, HTTP API, OpenAPI a MCP jsou tentýž registr promítnutý různě. Žádná plocha nespouští jiný program, aby získala vývojovou sémantiku: plocha, která volá shell, vlastní sestavení argumentů, interpretaci návratových kódů a vykreslení chyb, což jsou sémantika, ať jsou napsány kdekoli.

Vývojový objekt zapisuje pouze runtime. Jeho úložištěm je úložiště, které repozitář už má — .ai/repo/project/{issues,milestones}/*.yaml, .ai/repo/sessions/*.md, .ai/local/state/ a jeho ledger.jsonl, evidence[] uvnitř objektu plánu, který splňuje, docs/generated/** přes generate::Target. Schopnost, která potřebuje nové místo, kam něco uložit, nejprve zaznamená rozhodnutí.

Trvalá změna stavu je událost ledgeru, jejíž jméno je registrováno v share/events.yaml. Typovaný proud provádění přes /events je živý pohled a nikdy záznam. Žádná z úrovní nesmí držet trvalý fakt, který druhá nevidí.

Vše zpřístupněné se řídí jedním odvozovacím řetězcem: kanonická deklarace → serializační schéma → HTTP routa a generované OpenAPI → nástroj nebo zdroj MCP → stránka Cockpit, která jej vykresluje. Povrch přidaný kdekoli na tomto řetězci ručně, místo aby byl odvozen, porušuje toto pravidlo i project.rust-canonical-declaration@1.

Přechodný dluh se přijímá výslovně, ne tiše. lib/*.sh je dnes jediným zapisovatelem většiny vývojových objektů — lib/plan.sh:514-515 zapisuje každé YAML úkolu a milníku, lib/session.sh každý záznam relace, lib/evidence.sh každé splnění. Tyto příkazy jsou uvedeny v .ai/repo/development-semantics-baseline.txt a smějí tam zůstat, dokud nezkonvergují ke schopnostem. Základ se může zmenšit a nesmí růst.

Chování při selhání

Porušení je FAIL z scripts/development-semantics-check, spouštěné v CI jako kontrola development-semantics v jobu structure, a kontrola skončí s kódem 10, přičemž jmenuje každé porušení a uvádí jeho soubor.

Kontrola rozhoduje o dvou věcech, obě ze sledovaných souborů a bez sestavování čehokoli:

  • Nepodložený vývojový příkaz. Veřejný příkaz share/commands.yaml, jehož class mutuje a jehož writes pojmenovává strom vývojových objektů (.ai/repo/project/, .ai/repo/sessions/, .ai/repo/adrs/, .ai/local/state/), pro který docs/generated/registry.json nedeklaruje žádnou schopnost druhu command v odpovídajícím modulu. Takový příkaz nemá typované vstupní schéma na žádné strojové ploše, takže plocha, která chce jeho sémantiku, ji musí implementovat znovu. Základ je ratchet: příkaz, který ho opustí, se nesmí vrátit, a ten, který v něm nikdy nebyl, selže v den, kdy se objeví.
  • Povrch sahající do vrstvy. Odkaz na .ai/repo, .ai/local nebo spustitelný soubor majordomus uvnitř apps/majordomus-cli/src/cockpit/** nebo share/cockpit/**, kromě vlastní provenance hlavičky generátoru. Tyto stromy vykreslují výstup schopností; cesta nebo podproces v nich je začátek druhé implementace.

Dvě věci, které kontrola nerozhoduje, uvedené, aby nikdo nepovažoval její mlčení za průchod. Zaprvé, zda je odvození uvnitř plochy sémantika, nebo prezentační volba: šablona, která skloňuje počet, není druhou implementací, ale šablona, která počítá připravenost, ano. Kontrola, která by hádala, by nebyla auditovatelná, proto nehádá a rozhodne recenzent — přesně jako majordomus.decision-threshold@1 nechává svůj práh recenzentovi. Změna, která vloží sémantiku do plochy a projde kontrolou, je při revizi stále odmítnuta. Zadruhé, kdo zapisuje vývojový objekt: zápis v shellu nemá spolehlivý syntaktický tvar a grep na stromy objektů by hlásil každého čtenáře jako zapisovatele. Rozhodnout to by vyžadovalo zapisovatele deklarované jako data — pole writes v share/commands.yaml rozšířené o jméno zapisující funkce, sladěné s lib/ tak, jak už je exit_codes — a to je otevřená položka, ne kontrola.

Ověření

scripts/development-semantics-check rozhoduje tři mechanické kontroly a vypisuje své počty; just gate development-semantics je spouští lokálně a job structure je spouští v CI z .ai/repo/ci/gates.yaml. Měření, na nichž spočívá, jsou reprodukovatelná samostatně: majordomus-cli capabilities list --format json pro to, co registr nabízí, a majordomus-cli commands graph --format json pro to, které příkazy dosáhnou na který povrch a proč je každý odepřený odepřen.

Architektura, hranice vlastnictví a celý změřený inventář jsou docs/DEVELOPMENT_RUNTIME.md; rozhodnutí je ADR 0040.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/development-semantics-are-canonical.v1.md
identity
project.development-semantics-are-canonical@1
dostupné také jako
Zdroj MCP majordomus://rule/project.development-semantics-are-canonical@1 · majordomus entity show rule/project-development-semantics-are-canonical-1 · GET /api/v1/entity?uri=majordomus://rule/project.development-semantics-are-canonical@1
v Cockpitu
/cockpit/objects/rule/project-development-semantics-are-canonical-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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