I1504 — Jeden vývojový přechod je schopnost, od začátku do konce
Deklarovat jeden vývojový přechod — `done` plánu — jako jediné `capability!` druhu command v modulu plánu, s typovaným vstupním schématem, případy měření a registrovanou událostí ledgeru, a nasměrovat lib/plan.sh na něj, místo aby YAML zapisoval sám.
PŘIPRAVENO vlna 0 · p0 · profil deep-work · běží samostatně
Součást development-runtime — The runtime has a development surface.
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I1504 bude přijato.
Cíl
Deklarovat jeden vývojový přechod — `done` plánu — jako jediné `capability!` druhu command v modulu plánu, s typovaným vstupním schématem, případy měření a registrovanou událostí ledgeru, a nasměrovat lib/plan.sh na něj, místo aby YAML zapisoval sám.
Proč
Je to nejmenší změna, která testuje architekturu, již uvádí ADR 0040, a závěrem samotného auditu je, že první fáze práce není UI. Nic v cílovém toku není nová infrastruktura: makro schopnosti, vstupní schémata, generovaný OpenAPI, MCP bridge i formulářový runner Cockpitu generovaný ze schématu existují a fungují — chybí šipka od vývojového přechodu k některému z nich. Registr má dnes tři schopnosti příkazů a ani jedna není o vývoji, proto `tools/call majordomus_plan_done` odpovídá `unknown tool`: neexistuje schopnost pro přechod plánu a ta chybová zpráva je architektura v jednom řádku. Pokud to přistane čistě, každá další fáze má stejný tvar, a pokud ne, nefungovalo by ani nic pozdějšího.
Aktuální stav
Přechody plánu existují jen v lib/plan.sh, které zapisuje YAML úkolů přímo. Rustová strana čte stejné záznamy přes plan.* a od základu auditu také přes devtask.issue a devtask.milestone a nic nezapisuje. .ai/repo/development-semantics-baseline.txt nese `backing:plan` jako přijatý záznam.
Cílový stav
Přesun jednoho úkolu na hotovo se rozhoduje na jednom místě. CLI, nástroj MCP, trasa HTTP, operace OpenAPI a generovaný formulář Cockpitu jsou každé projekcí té jediné deklarace, žádné není psáno ručně a nástroj shellu ji volá tak, jak lib/context.sh a lib/capture.sh už volají binárku Rustu.
Rozsah
- apps/majordomus-cli/src/capability/builtin/plan.rs
- apps/majordomus-cli/src/plan.rs
- share/events.yaml
- lib/plan.sh
- .ai/repo/development-semantics-baseline.txt
- test/cases
Mimo rozsah
- Ostatní přechody. Start a verify mají stejný tvar, jakmile je tento dokázán; rozšiřování před jeho důkazem je selhání, které má tento úkol zachytit.
- Jakákoli stránka Cockpitu. Stávající generický runner musí novou schopnost řídit bez úpravy zdroje Cockpitu; pokud nemůže, je to nález.
- Druhý model projektu. Kanonické záznamy zůstávají tam, kde jsou, a zachovávají svůj tvar.
Závislosti
Žádné. Tento úkol je kořenem grafu.
Co na tom čeká
- I1505BLOKOVÁNO Schopnost, která mění stav, zanechá trvalou událost a ledger lze přečíst zpět
- I1506BLOKOVÁNO Příkazy životního cyklu se stanou neinteraktivními schopnostmi
Kritéria přijetí
- Nástroj MCP existuje a tools/call přesune úkol do done
- Operace jiná než GET pro přechod se objeví ve vygenerovaném OpenAPI, aniž by někdo upravoval dokument
- Stávající generický runner Cockpitu ho řídí bez změny jediného souboru pod apps/majordomus-cli/src/cockpit
- lib/plan.sh už YAML úkolu nezapisuje sám
- test/cases/99_plan_capabilities.sh stále drží oba enginy na bajtové rovnosti
- Kontrola sémantiky vývoje hlásí o jednu položku méně a odmítá návrat základní hodnoty
Validace
- bin/majordomus-cli capabilities validate
- bin/majordomus-cli generate --check
- bash test/run.sh 99_plan_capabilities
- majordomus plan validate
Požadované důkazy
- transition_is_a_capability
- projection_not_handwritten
- two_engines_still_agree
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Riziko
Vysoká hodnota, omezený dosah škod. Skutečné riziko je rozsah: větev, která portuje lib/plan.sh celé, nic nedokazuje a nelze ji posoudit. Jeden přechod, nebo stop.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Kanonický záznam: .ai/repo/project/issues/I1504.yaml. Přečtěte jej zpět pomocí majordomus plan show I1504.