plan
Model milníků a úkolů tohoto repozitáře a vše, co se z něj odvozuje a co nikdo nenapsal: stav každého záznamu, grafy závislostí nad hranicí milníku i pod ní, topologické vlny provádění, pořadí podle plánu rozvoje, právě prováděný milník a jeden úkol, který vzít jako další. Stav se nikdy neukládá — záznam říká, co se s ním stalo, a stav z toho a ze stavu jeho závislostí vyplývá — takže žádný soubor nemůže odporovat grafu. Tato schopnost čte; zápis značky životního cyklu do záznamu je `plan.transition`, která deklaruje, že zapisuje do repozitáře.
Celý odvozený plán
Každý milník a úkol s odvozeným stavem, vlnou, pořadím, oběma směry jeho grafu a počty; vlny provádění; oba grafy závislostí jako hrany; každé validační zjištění; a hlavička plánu s odvozeným aktivním milníkem. Jediná hodnota, z níž odpovídá každá další schopnost tohoto modulu. Odvozuje se při každém volání: přechod zapíše mezi dvěma voláními do záznamu značku životního cyklu a plán odpovězený ze snímku by poslal dva workery k jednomu úkolu.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- cache vypnuta
- Nástroj MCP majordomus_plan
- Zdroj MCP {"name": "plan", "uri": "majordomus://plan"}
Žádné parametry.
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
Plán |
Celý odvozený plán: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Jak daleko pokročila práce na každém úkolu
Pro každý úkol (nebo jeden) nejzazší prokázaná fáze doručení — none, branch, pr_open, merged, released, deployed — každá s objektem, který ji dokázal, a kdy byl pozorován: větev, která úkol pojmenovává (podle id, pravidla I1405, nebo podle slugu), otevřený pull request v zaznamenaném pozorování forge, nejnovější commit v historii trunku, který ho pojmenovává (merge podle titulku pull requestu nebo větve, jakýkoli jiný commit podle předmětu, nikdy podle těla), první záznam release (`.ai/repo/releases/v*.yaml`), jehož commit ten merge obsahuje, a publikovaný `latest.json`, který pojmenovává ten release nebo pozdější. Vedle toho deklarovaný stav úkolu, takže rozpor mezi razítky a prací je na jedno srovnání. Ve výchozím stavu živě: trunk, který tento klon zná, každá větev, pozorování forge, které zaznamenal `majordomus prs refresh`, záznamy release a `latest.json` commitu, který publikovalo poslední nasazení Pages. S `at` merge z historie toho commitu a záznamy release stromu a nic živého — každý zdroj větví, forge a nasazení se hlásí jako nepřečtený — takže lze dokázat jen merged a released a odpověď je funkcí samotného commitu. Zdroj, který nebyl přečten, se hlásí jako nepřečtený s důvodem, nikdy jako none: úkol, který mohl postoupit dál, není vyřešen a zdroj pojmenovává. Odvozuje se při každém volání a nikde neukládá; nikdy nezapisuje razítko.
- query
- experimentální
- vyžaduje se měření výkonu
- cache vypnuta
- Nástroj MCP majordomus_plan_delivery
- $ plan delivery
Parametry dotazu
| název | typ | povinné | popis | příklady |
| issue |
string |
ne |
Jedno id úkolu (`I2740`). Výchozí: každý úkol plánu. Id, které plán nedeklaruje, se nenajde, nikdy se neodpoví jako `none`. |
one-issue-at-head: "I0001" |
| v |
string |
ne |
Pozorovat k tomuto commitu (`HEAD`, sha, ref): jeho historie a záznamy o release stromu, a nic živého — žádná větev, forge, nasazení ani hodiny. Výchozí: živě. |
one-issue-at-head: "HEAD" |
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/delivery?issue=I0001&at=HEAD"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
IssueDeliveryReport |
Jak daleko práce každého úkolu pokročila: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Kde razítka plánu odporují dodané práci
Každý rozpor mezi deklarovaným stavem úkolu a jeho dodáním (plan.delivery), každý s objekty, které ho dokládají: `merged_not_recorded` — READY, BLOCKED nebo ACTIVE, s merge na trunku, který ho jmenuje (pull request, merge commit, release), a bez otevřeného pull requestu, který ho jmenuje; `active_without_work` — ACTIVE od doby před oknem, bez branche, pull requestu, merge nebo živého mesh claimu, který by ho jmenoval; `done_without_trace` — DONE bez merge, který by ho jmenoval, pouze poradní, protože existují úkoly jen se záznamem. Každé zjištění nese svůj věk, zda je za oknem, které deklaruje `.ai/repo/ci/plan.yaml` (`drift.window`, sekundy), zdroje, které nebyly přečteny a mohly by ho rozpustit, a příkaz, který ho vyřeší (`majordomus plan verify|done <id>`). S `gate` posuzováno jako kontrola: na `head` je každý merged_not_recorded pending; na `trunk` je ten sloučený před delší dobou než okno odmítnut a mladší pending; ostatní třídy nikdy neodmítají; chybějící nebo nečitelné okno odmítá (kód 12); odmítnutí shodí kontrolu (kód 10) jen pod `drift.enforcement: blocking` a pod `advisory` se hlásí s kódem 0. Pozorováno živě, nebo `at` commitu jako plan.delivery. Odvozuje se při každém volání; nikdy nezapisuje razítko.
- query
- experimentální
- vyžaduje se měření výkonu
- cache vypnuta
- Nástroj MCP majordomus_plan_drift
- $ plan drift
Parametry dotazu
| název | typ | povinné | popis | příklady |
| issue |
string |
ne |
Jedno id úkolu. Výchozí: každý úkol plánu. |
one-issue-at-head-as-trunk-gate: "I0001" |
| v |
string |
ne |
Pozorovat k tomuto commitu, jako to dělá `plan.delivery`. Výchozí: živě. |
one-issue-at-head-as-trunk-gate: "HEAD" |
| kontrola |
DriftGate | null |
ne |
Posoudit jako kontrolu na `head` nebo na `trunk`. Výchozí: jen hlásit, výstupní kód 0. |
one-issue-at-head-as-trunk-gate: "trunk" |
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/drift?issue=I0001&at=HEAD&gate=trunk"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
DriftReport |
Kde razítka plánu odporují dodané práci: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Kde je práce nyní
Milníky s rozpracovanou prací, ten, který graf povoluje jako další, a poslední release tak, jak ho říkají samotné releasy, čteno živě při každém volání (ADR 0166, rozhodnutí 4). Nyní je každý otevřený milník, který obsahuje otevřený úkol s otevřeným pull requestem, jenž ho jmenuje (`pr_open` z `plan.delivery`), živý mesh claim vytvořený pro něj, nebo deklarovaný stav ACTIVE; ke každému patří jeho úkoly, důvod, proč jsou rozpracované, jejich deklarovaný stav vedle odvozené fáze a objekty, které to dokládají (branch, pull request, merge commit, release tag, publikovaný `latest.json`, claim), odkazované na forge tam, kde je forge má. Další je první otevřený milník v pořadí plánu, který není nyní a jehož nedokončené prerekvizity jsou všechny nyní. Poslední release je nejvyšší stabilní verze mezi záznamy releasů, tagy `v*` tohoto klonu a souborem `latest.json`, který publikovalo poslední úspěšné nasazení na Pages, takže release, jehož záznam byl sloučen až po tagu, se neukáže starší, než je. `executable_tagged` říká, zda je verze odpovídajícího spustitelného souboru otagovaná. `milestone` přidá daný milník se všemi jeho úkoly. Zdroj, který nebyl přečten (forge, publikace, mesh mimo server), je uveden i s důvodem a nikdy se nepovažuje za prázdný.
- query
- experimentální
- vyžaduje se měření výkonu
- cache vypnuta
- Nástroj MCP majordomus_plan_flight
Parametry dotazu
| název | typ | povinné | popis | příklady |
| milestone |
string |
ne |
Id milníku: odpověď jej pak nese, se všemi jeho úkoly, jako `inspected`. Id, které plán nedeklaruje, se nenajde. |
one-milestone-inspected: "M000" |
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/flight?milestone=M000"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanFlight |
Kde se práce nyní odehrává: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Úkoly, filtrované podle toho, co graf odvodil
Jeden záznam na úkol s odvozeným stavem, vlnou, deklarovanými závislostmi, těmi, které nejsou DONE (plus `milestone:<id>`, když kontrola zadržuje celý výsledek), úkoly, které na něm závisejí, cestami, kterých se dotýká, a součtem důkazů. Filtrování podle `status: READY` dává připravenou množinu a podle `status: BLOCKED` blokovanou množinu; nic z toho není samostatná derivace.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- generování cache (max_entries=16)
- nástroj MCP majordomus_plan_issues
Parametry dotazu
| název | typ | povinné | popis | příklady |
| milestone |
string |
ne |
Jen úkoly tohoto milníku. Výchozí: každý úkol plánu. |
one-milestone: "M000" |
| status |
string |
ne |
Pouze úkoly v tomto odvozeném stavu — `READY` pro připravenou množinu, `BLOCKED` pro blokovanou. Slovník cestuje s každou odpovědí, takže volající nikdy nemusí vědět, jaké stavy existují. |
připraveno: "READY" |
| vlna |
integer (uint32) |
ne |
Jen úkoly v této vlně provádění. |
|
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/issues?milestone=M000&status=READY"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanIssueList |
Úkoly filtrované podle toho, co graf odvodil: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Jediný úkol, který vzít hned
Úkol READY s nejnižší vlnou aktivního milníku, nejdřív s nejvyšší prioritou, pak podle id. Aktivní milník může mít nic připraveného, zatímco jiný ano — třeba ten, který čeká na vlastní důkazy přijetí — takže se hledání rozšíří na celý plán, místo aby odpovědělo `none` a odeslalo pracovníka pryč od práce, která je skutečně proveditelná. Na tohle se agent ptá, než začne.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- generování cache (max_entries=16)
- nástroj MCP majordomus_plan_next
Parametry dotazu
| název | typ | povinné | popis | příklady |
| milestone |
string |
ne |
Omezit odpověď na jeden milník. Výchozí: celý plán, a pro `next` aktivní milník se zbytkem plánu jako zálohou. |
one-milestone: "M000" |
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/next?milestone=M000"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanNextIssue |
Úkol, který převzít nyní: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Jeden milník nebo úkol se vším, co o něm bylo odvozeno
Milník se svými úkoly v plném znění, nebo úkol s úkoly, na které čeká, v plném znění. Vlastní próza záznamu zůstává tam, kde vždy byla — `majordomus://issue/<id>` vrací soubor — a toto odpovídá na to, co soubor o sobě říct nemůže: jaký je jeho stav, kde leží v grafu a co stojí mezi ním a tím, aby byl proveditelný.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- cache vypnuta
- Nástroj MCP majordomus_plan_record
Parametry dotazu
| název | typ | povinné | popis | příklady |
| id |
string |
ano |
Id milníku nebo úkolu, tak jak se jmenuje jeho soubor (`I0001`, `work-graph-github`). |
issue: "I0001"milestone: "M000" |
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/record?id=I0001"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanRecord |
Jeden milník nebo úkol se vším, co je o něm odvozeno: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Milníky v odvozeném pořadí
Graf milníků rozložený podle pořadí, přičemž `order` rozhoduje remízy jen uvnitř pořadí, a první neblokovaný nedokončený milník jako `now` a ten po něm jako `next`. Nic v posloupnosti se nepíše ručně: milník, jehož předpoklady nejsou skutečné, nelze nominovat, a právě to činí `každý krok je podmíněn tím, že předchozí je skutečný` invariantem, a ne větou.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- generace cache (max_entries=4)
- nástroj MCP majordomus_plan_roadmap
Žádné parametry.
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/roadmap"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanRoadmap |
Milníky v odvozeném pořadí: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Kde plán stojí
Každý milník s odvozeným stavem a jeho úkoly spočtenými podle stavu, milník, který worker právě provádí, další připravený úkol celý a vlastní součty plánu. Počty jsou klíčovány deklarovaným slovníkem, který cestuje s odpovědí, takže stav přidaný do enginu se zde objeví, aniž by se cokoli upravovalo.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- generování cache (max_entries=16)
- nástroj MCP majordomus_plan_status
Parametry dotazu
| název | typ | povinné | popis | příklady |
| milestone |
string |
ne |
Omezit odpověď na jeden milník. Výchozí: celý plán, a pro `next` aktivní milník se zbytkem plánu jako zálohou. |
one-milestone: "M000" |
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/status?milestone=M000"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanStatusReport |
Kde plán stojí: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Provést jeden úkol životním cyklem
Zaznamenat, že provádění úkolu začalo (`start`), že implementace je dokončena a čekají se důkazy (`verify`), nebo že je hotovo (`done`). Označí se jedno pole vlastního záznamu úkolu, pečeť jeho události se zapíše vedle něj a událost se připojí do ledgeru; razítko bez té pečeti nepohne žádným stavem. Přesun se odmítne, když model říká, že je nepřípustný — úkol, který není READY, nemůže začít, ten, který nikdy nebyl ACTIVE, nelze ověřit, a ten, který nebyl nikdy zahájen, jehož závislosti nejsou dokončené nebo kterému chybí požadované důkazy, nelze dokončit — a odmítnutí pojmenuje, co v cestě stojí. Stav, který se vrátí, se potom odvozuje ze záznamu, ne z přesunu: `done` s chybějícími důkazy nechá úkol ve VERIFY a řekne to.
- command
- behaviorally_verified
- benchmark required_when
- cache vypnuta
- Nástroj MCP majordomus_plan_transition
příklad refused-by-status
{"issue":"I0001","transition":"start"}Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s -X POST "http://127.0.0.1:8741/api/v1/plan/transition" -H "content-type: application/json" -d '{"issue":"I0001","transition":"start"}'Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanTransitionResult |
Posunout úkol životním cyklem: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 422 |
ErrorBody |
refused: Příkaz byl srozumitelný a byl odmítnut z důvodu, který uvádí zpráva. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Co model odmítá
Každé zjištění, které derivace vytvořila, v pořadí, v jakém je vytvořila: závislost na něčem, co není úkol, cyklus, úkol provádějící se před svými závislostmi nebo před kontrolou svého milníku, úkol bez kritérií přijetí, chybějící důkazy pod datem dokončení, razítko životního cyklu, které jeho přechod nezapsal (bez pečeti jeho události plan_* vedle sebe), milník, jehož graf si protiřečí, dva úkoly jedné vlny sdílející cestu. Chyba znamená, že model je neplatný; varování znamená, že je přípustný a stojí za přečtení.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- cache vypnuta
- nástroj MCP majordomus_plan_validate
Žádné parametry.
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/validate"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanValidation |
Co model odmítá: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Co smí běžet současně
Topologické vrstvení grafu úkolů: úkol vstoupí do vlny, až když ji opustila každá jeho závislost, takže jeho vlna je o jedna za nejdelší cestou k němu. Sdílení vlny je nutná podmínka pro souběžné spuštění dvou úkolů, ne dostatečná — překrývající se rozsah je serializuje a každý takový překryv se hlásí vedle vln, místo aby ho dva pracovníci objevili v merge konfliktu.
- query
- behaviorally_verified
- vyžaduje se měření výkonu
- cache vypnuta
- nástroj MCP majordomus_plan_waves
Parametry dotazu
| název | typ | povinné | popis | příklady |
| milestone |
string |
ne |
Omezit odpověď na jeden milník. Výchozí: celý plán, a pro `next` aktivní milník se zbytkem plánu jako zálohou. |
one-milestone: "M000" |
Vyzkoušejte
Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.
curl -s "http://127.0.0.1:8741/api/v1/plan/waves?milestone=M000"
Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.
Odpovědi
| status | tělo | význam |
| 200 |
PlanWaveReport |
Co smí běžet současně: výsledek. |
| 400 |
ErrorBody |
invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne. |
| 404 |
ErrorBody |
not_found: Vstup pojmenovává něco, co repozitář nemá. |
| 500 |
ErrorBody |
internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává. |
| výchozí |
ErrorBody |
Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON. |
Schémata
Komponenty, které používají jen operace tohoto tagu. Každý řádek je pole daného typu, jeho doc komentář je popis; typ vlastněný jinou stránkou na ni odkazuje.
DeliveryBranch
object
Větev, která úkol jmenuje.
| vlastnost | typ | povinné | popis |
| název |
string |
ano |
Ref, krátce: feature/x, nebo origin/feature/x pro sledující vzdálenou. |
| head |
string |
ano |
Commit, na který ukazuje. |
| remote |
boolean |
ano |
Pravda pro ref sledující vzdálenou větev. |
| přes |
string |
ano |
Jak jméno jmenuje úkol: id nebo slug. |
| observed_at |
string |
ano |
Kdy byly refy přečteny. |
Používá IssueDelivery
DeliveryDeployment
object
Publikovaný ukazatel release, který pokrývá release úkolu.
| vlastnost | typ | povinné | popis |
| verze |
string |
ano |
Verze, kterou latest.json jmenuje. |
| latest_json |
string |
ano |
Kde byl tento latest.json přečten: <commit>:site/static/releases/latest.json, commit, který publikovalo pozorované nasazení Pages. |
| observed_at |
string |
ano |
Kdy byla publikace pozorována. |
Používá IssueDelivery
DeliveryMerge
object
Nejnovější commit v historii trunku, který jmenuje úkol: merge, podle názvu jeho pull requestu nebo jeho větve, nebo commit, jehož předmět jej jmenuje tak, jak to dělají commity tohoto repozitáře (type(scope): description (I2740)).
| vlastnost | typ | povinné | popis |
| commit |
string |
ano |
Commit: merge commit, nebo commit, jehož předmět pojmenovává úkol. |
| pull_request |
integer | null |
ne |
Pull request, který sloučil, když ho jmenuje jeho předmět. |
| větev |
string | null |
ne |
Větev, kterou mergnul, pokud ji jeho předmět jmenuje. |
| název |
string | null |
ne |
Název pull requestu, když ho merge nese, nebo předmět commitu. |
| přes |
string |
ano |
Jak pojmenovává úkol: title_or_branch nebo slug u merge, subject u commitu, forge_title u názvu sloučeného pull requestu tak, jak ho zaznamenal forge. |
| merged_at |
string |
ano |
Kdy byl commitnut, RFC 3339. |
| merge |
integer (uint) |
ano |
Kolik commitů v historii jmenuje úkol; tento je nejnovější. |
| observed_at |
string |
ano |
Kdy byla historie přečtena. |
Používá IssueDelivery
DeliveryObservation
object
Kde a kdy byla odpověď pozorována.
| vlastnost | typ | povinné | popis |
| režim |
string |
ano |
live nebo at pojmenovaný commit. |
| trunk |
string |
ano |
Čtená historie: ref trunku v živém režimu, jinak požadovaný commit. |
| commit |
string |
ano |
Commit, na kterém historie končí. |
| observed_at |
string |
ano |
Kdy: hodiny v živém režimu, čas committera u commitu. |
Používá DriftReport IssueDeliveryReport PlanFlight
DeliveryPullRequest
object
Otevřený pull request, který jmenuje úkol.
| vlastnost | typ | povinné | popis |
| číslo |
integer (uint64) |
ano |
Číslo. |
| název |
string |
ano |
Název. |
| head_ref |
string |
ano |
Větev, kterou žádá sloučit. |
| koncept |
boolean |
ano |
True pro koncept. |
| přes |
string |
ano |
Jak jmenuje úkol: title_or_branch nebo slug. |
| observed_at |
string |
ano |
Kdy byl forge pozorován. |
Používá IssueDelivery
DeliveryReading
"read" | "unread"
Zda byl přečten jeden zdroj odpovědi.
readBylo přečteno; co drží, je v odpovědi.unreadNebylo přečteno a reason říká proč. Nic, co mohlo dokázat, se netvrdí ani nepopírá.
Používá DeliverySource DriftWindow ReleaseReading
DeliveryRelease
object
První release, který obsahuje nejnovější merge úkolu.
| vlastnost | typ | povinné | popis |
| štítek |
string |
ano |
Tag: v0.27.0. |
| commit |
string |
ano |
Commit, který značka jmenuje. |
| observed_at |
string |
ano |
Kdy byly releasy přečteny. |
Používá IssueDelivery
DeliverySource
object
Jeden zdroj, ze kterého se odpověď staví, a zda byl přečten.
| vlastnost | typ | povinné | popis |
| název |
string |
ano |
branches, forge, history, releases nebo publication. |
| state |
DeliveryReading → DeliveryReading |
ano |
Přečteno, nebo nepřečteno. |
| detail |
string |
ano |
Co se četlo, nebo proč nic: ref, soubor, příkaz, který by to zaznamenal. |
| observed_at |
string | null |
ne |
Kdy bylo pozorováno to, co se četlo, RFC 3339, kdy se to četlo. |
Používá DriftReport IssueDeliveryReport PlanFlight
DeliveryStage
"none" | "branch" | "pr_open" | "merged" | "released" | "deployed"
Jak daleko práce na jednom úkolu postoupila, v pořadí: každá fáze implikuje, že všechny předchozí byly projity, takže nejdále prokázaná je fáze úkolu.
noneNic z přečteného úkol nejmenuje.branchJmenuje ho větev.pr_openOtevřený pull request ho jmenuje.mergedMerge v historii trunku ho jmenuje.releasedRelease v* obsahuje svůj nejnovější merge.deployedPublikované latest.json jmenuje onen release nebo pozdější.
Používá DriftFinding FlightIssue IssueDelivery IssueDeliveryReport
DriftClass
"merged_not_recorded" | "active_without_work" | "done_without_trace"
Jeden druh rozporu mezi razítky a prací.
merged_not_recordedPŘIPRAVENO, BLOKOVÁNO nebo AKTIVNÍ, se sloučenou prací a bez otevřeného pull requestu, který by jej jmenoval.active_without_workACTIVE od doby před oknem, bez větve, pull requestu, merge nebo nároku v mesh.done_without_traceHOTOVO bez merge, který by úkol jmenoval. Informativní: existují úkoly pouze se záznamem.
Používá DriftFinding DriftReport
DriftFinding
object
Jeden rozpor mezi razítky úkolu a jeho dodáním.
| vlastnost | typ | povinné | popis |
| issue |
string |
ano |
Id úkolu. |
| název |
string |
ano |
Jeho název. |
| milestone |
string |
ano |
Jeho milník. |
| status |
string |
ano |
Jeho deklarovaný stav. |
| fáze |
DeliveryStage → DeliveryStage |
ano |
Jeho odvozená fáze dodávky. |
| třída |
DriftClass → DriftClass |
ano |
Rozpor. |
| advisory |
boolean |
ano |
Pravda pro třídu, která nikdy neodmítá. |
| důkaz |
DriftProof → DriftProof |
ano |
Co to dokazuje. |
| od |
string | null |
ne |
Od kdy rozpor platí: merge pro merged_not_recorded, počáteční razítko pro active_without_work. |
| age_seconds |
integer | null |
ne |
Sekundy od since k pozorování. |
| past_window |
boolean | null |
ne |
Zda je to delší než okno; chybí, když je cokoli z toho neznámé. |
| vyřízeno |
boolean |
ano |
Pravda, když by ho žádný nepřečtený zdroj nemohl rozpustit. |
| nepřečteno |
array of string |
ano |
Zdroje, které se nečetly a mohly to rozptýlit. |
| náprava |
string |
ano |
Příkaz, který to rozhodne. |
| verdikt |
DriftVerdict | null → DriftVerdict |
ne |
Co z toho kontrola udělala, když byla kontrola požadována. |
Používá DriftReport
DriftGate
"head" | "trunk"
Který strom posuzuje kontrola
plan.drift.
use majordomus_cli::capability::builtin::plan::DriftGate;
assert_eq!(serde_json::to_value(DriftGate::Trunk).unwrap(), "trunk");
assert_eq!(serde_json::from_str::<DriftGate>(r#""head""#).unwrap(), DriftGate::Head);
headHead: ne sdílený plán, takže každé merged_not_recorded je čekající.trunkKmen: sloučená práce nezaznamenaná za oknem se odmítne.
Používá plan.drift DriftReport
DriftProof
object
Objekty, které zjištění dokazují.
| vlastnost | typ | povinné | popis |
| pull_request |
integer | null |
ne |
Pull request, který sloučil nejnovější merge jmenující úkol. |
| merge_commit |
string | null |
ne |
Nejnovější commit v historii trunku, který úkol pojmenovává. |
| merged_at |
string | null |
ne |
Kdy byl tento commit vytvořen. |
| přes |
string | null |
ne |
Jak pojmenovává úkol (title_or_branch, slug, subject, forge_title). |
| release |
string | null |
ne |
První release, který to obsahuje. |
| started_at |
string | null |
ne |
Kdy bylo zaznamenáno zahájení provádění, pro active_without_work. |
Používá DriftFinding
DriftReport
object
Každý rozpor mezi razítky plánu a jeho dodáním a, když se ptalo na kontrolu, její verdikt.
| vlastnost | typ | povinné | popis |
| schema |
integer (uint32) |
ano |
Verze tohoto tvaru. |
| pozorováno |
DeliveryObservation → DeliveryObservation |
ano |
Kde a kdy bylo doručení pozorováno. |
| okno |
DriftWindow → DriftWindow |
ano |
Deklarované okno. |
| kontrola |
DriftGate | null → DriftGate |
ne |
Strom, který kontrola posoudila, když o to byla požádána. |
| zdroje |
pole DeliverySource → DeliverySource |
ano |
Každý zdroj, přečtený i nepřečtený: zdroj dodávky a mesh claims. |
| třídy |
pole DriftClass → DriftClass |
ano |
Slovník tříd, v pořadí. |
| součty |
mapa celých čísel (uint) |
ano |
Kolik nálezů každé třídy, klíčováno každou třídou. |
| zjištění |
pole DriftFinding → DriftFinding |
ano |
Nálezy, v pořadí úkolů, pak v pořadí tříd. |
| odmítnuto |
integer (uint) |
ano |
Kolik nálezů kontrola odmítla. |
| čeká |
integer (uint) |
ano |
Kolik jich ohlásil jako čekající. |
| vynuceno |
boolean |
ano |
Zda odmítnutí způsobí selhání kontroly (drift.enforcement: blocking). |
| verdikt |
string |
ano |
report (bez kontroly), clean, pending, advisory (odmítnutí se nevynucují), refused nebo unjudged (bez okna). |
| exit_code |
integer (uint8) |
ano |
Návratový kód, kterým kontrola končí: 0, EXIT_REFUSED nebo EXIT_UNJUDGED. |
Používá plan.drift
DriftVerdict
"refused" | "pending" | "reported" | "advisory"
Co kontrola udělala z jednoho zjištění.
refusedOdmítnuto: sloučená práce, kterou kmen nesl nezaznamenanou za okno.pendingHlášeno a neodmítnuto: na hlavě, nebo uvnitř okna.reportedHlášeno; tato třída nikdy neodmítá.advisoryPoradní; tato třída nikdy neodmítá (done_without_trace).
Používá DriftFinding
DriftWindow
object
Deklarované okno, nebo proč žádné není.
| vlastnost | typ | povinné | popis |
| model |
string |
ano |
Soubor, ve kterém je deklarována. |
| state |
DeliveryReading → DeliveryReading |
ano |
Přečteno, nebo nepřečteno a detail říká proč. |
| sekundy |
integer | null |
ne |
Počet sekund, po které smí trunk nést sloučenou práci, kterou plán nezaznamenal. |
| vynucování |
string | null |
ne |
advisory (odmítnutí se hlásí, kontrola projde) nebo blocking. |
| detail |
string |
ano |
Co se četlo, nebo proč nic. |
Používá DriftReport
FlightIssue
object
Jeden úkol: jeho deklarovaný stav vedle odvozené fáze a co fázi prokazuje.
| vlastnost | typ | povinné | popis |
| issue |
string |
ano |
Id úkolu. |
| název |
string |
ano |
Jeho název. |
| status |
string |
ano |
Jeho deklarovaný stav, z razítek. |
| fáze |
DeliveryStage → DeliveryStage |
ano |
Jeho vyvozená fáze dodání, z plan.delivery. |
| vyřízeno |
boolean |
ano |
True, když žádný nepřečtený zdroj nemohl doložit další fázi. |
| nepřečteno |
array of string |
ano |
Zdroje, které se nečetly a mohly ji posunout dál. |
| in_flight |
pole InFlight → InFlight |
ano |
Proč je rozpracovaný; prázdné u úkolu, který není. |
| důkazy |
pole Proof → Proof |
ano |
Objekty, které fázi dokazují (a tvrzení, která ji uvádějí do provozu), v pořadí fází. |
Používá FlightMilestone
FlightMilestone
object
Jeden milník s úkoly, které z něj odpověď ukazuje.
| vlastnost | typ | povinné | popis |
| id |
string |
ano |
Id milníku. |
| název |
string |
ano |
Jeho název. |
| status |
string |
ano |
Jeho deklarovaný stav. |
| úkoly |
pole FlightIssue → FlightIssue |
ano |
Jeho úkoly: ty rozpracované pro milník z now, všechny pro zkoumaný milník. |
Používá PlanFlight
FlightRelease
object
Poslední release a každý zdroj, který byl na něj dotázán.
| vlastnost | typ | povinné | popis |
| latest |
string | null |
ne |
Nejvyšší stabilní verze, kterou jmenuje jakýkoli čtený zdroj; chybí, když žádný nejmenuje. |
| zdroj |
string | null |
ne |
Zdroj, který jej jmenoval (první v pořadí records, tags, publication, když se shodne několik). |
| href |
string | null |
ne |
Kde je vidět ve forge. |
| spustitelný soubor |
string |
ano |
Verze executable, který odpověděl. |
| executable_tagged |
boolean |
ano |
Pravda, když je verze samotného spustitelného souboru otagována v<version>; nejnovější release pak není nikdy starší než ona. |
| odečty |
pole typu ReleaseReading → ReleaseReading |
ano |
Každý zdroj, přečtený i nepřečtený. |
Používá PlanFlight
InFlight
"pr_open" | "claim" | "active"
Proč je úkol rozpracován.
pr_openOtevřený pull request ho jmenuje.claimByl na něj učiněn živý claim v meshi.activeJeho deklarovaný stav je AKTIVNÍ.
Používá FlightIssue
IssueDelivery
object
Doručení jednoho úkolu.
| vlastnost | typ | povinné | popis |
| issue |
string |
ano |
Id úkolu. |
| název |
string |
ano |
Jeho název. |
| milestone |
string |
ano |
Jeho milník. |
| status |
string |
ano |
Jeho deklarovaný stav, tak jak ho plán odvozuje z razítek: druhá polovina porovnání, kvůli němuž tato odpověď existuje. |
| fáze |
DeliveryStage → DeliveryStage |
ano |
Nejdál prokázaný stupeň. |
| vyřízeno |
boolean |
ano |
True, když žádný nepřečtený zdroj nemohl doložit další fázi. |
| nepřečteno |
array of string |
ano |
Zdroje, které se nečetly a mohly prokázat další fázi. |
| větev |
DeliveryBranch | null → DeliveryBranch |
ne |
Větev, která ho pojmenovává, lokální první. |
| pr_open |
DeliveryPullRequest | null → DeliveryPullRequest |
ne |
Otevřený pull request, který jej jmenuje, nejnovější první. |
| sloučeno |
DeliveryMerge | null → DeliveryMerge |
ne |
Nejnovější merge, který ho jmenuje. |
| vydáno |
DeliveryRelease | null → DeliveryRelease |
ne |
První release obsahující tento merge. |
| nasazeno |
DeliveryDeployment | null → DeliveryDeployment |
ne |
Publikace, která toto vydání pokrývá. |
Používá IssueDeliveryReport
IssueDeliveryReport
object
Dodání každého úkolu, s tím, z čeho bylo přečteno.
| vlastnost | typ | povinné | popis |
| schema |
integer (uint32) |
ano |
Verze tohoto tvaru. |
| pozorováno |
DeliveryObservation → DeliveryObservation |
ano |
Kde a kdy. |
| fáze |
pole DeliveryStage → DeliveryStage |
ano |
Slovník fází, v pořadí. |
| zdroje |
pole DeliverySource → DeliverySource |
ano |
Každý zdroj, přečtený i nepřečtený. |
| součty |
mapa celých čísel (uint) |
ano |
Kolik úkolů je v které fázi, podle každé fáze slovníku. |
| nevyřešeno |
integer (uint) |
ano |
Kolik úkolů mohl nepřečtený zdroj posunout dál. |
| úkoly |
pole IssueDelivery → IssueDelivery |
ano |
Úkoly v pořadí podle id. |
Používá plan.delivery
Plán
object
Celý odvozený plán: z čeho odpovídá každá schopnost plan.
| vlastnost | typ | povinné | popis |
| projekt |
PlanProject → PlanProject |
ano |
Hlavička plánu s odvozeným aktivním milníkem. |
| stavy |
PlanVocabulary → PlanVocabulary |
ano |
Deklarované slovníky stavů. |
| milníky |
pole PlanMilestone → PlanMilestone |
ano |
Každý milník, v pořadí podle id. |
| úkoly |
pole PlanIssue → PlanIssue |
ano |
Každý úkol, v pořadí podle id. |
| vlny |
pole PlanWave → PlanWave |
ano |
Vlny provádění, nejnižší první. |
| hrany |
array of PlanEdge → PlanEdge |
ano |
Graf závislostí úkolů, seřazený. |
| milestone_edges |
array of PlanEdge → PlanEdge |
ano |
Graf závislostí milníků, seřazený. |
| zjištění |
pole PlanFinding → PlanFinding |
ano |
Každé zjištění v pořadí odvození. |
Používá plan.model
PlanCounts
object
Úkoly milníku spočtené: dva jmenovatele, pak jedna položka na každý deklarovaný stav.
| vlastnost | typ | povinné | popis |
| celkem |
integer (uint32) |
ano |
Každý úkol, který jmenuje tento milník. |
| povinné |
integer (uint32) |
ano |
Jmenovatel, který používá odvození stavu samotného milníku: celkem minus zrušené, takže žádný povrch netiskne „n z celku“ pro milník, který engine nazývá DONE. |
| by_status |
mapa celých čísel (uint32) |
ano |
Jedna položka na deklarovaný stav úkolu, klíčovaná slovníkem. |
Používá PlanMilestone PlanMilestoneProgress PlanStatusReport
PlanEdge
object
Jedna hrana závislosti, from před to.
| vlastnost | typ | povinné | popis |
| z |
string |
ano |
Záznam, který musí být nejdřív skutečný. |
| do |
string |
ano |
Záznam, který na něj čeká. |
Používá Plan
PlanFinding
object
Jeden validační nález ve tvaru, o který žádá project.finding-carries-reproduce.
| vlastnost | typ | povinné | popis |
| úroveň |
string |
ano |
FAIL nebo WARN. Selhání znamená, že model je neplatný. |
| kód |
string |
ano |
Stabilní kód, který čtenář grepuje (unknown_dependency, scope_conflict, …). |
| předmět |
string |
ano |
Záznam, jehož se nález týká, nebo graph, když se týká celého grafu. |
| zpráva |
string |
ano |
Co je špatně, jedním řádkem. |
Používá Plan PlanValidation PlanWaveReport
PlanFlight
object
Kde se pracuje: odpověď plan.flight.
| vlastnost | typ | povinné | popis |
| schema |
integer (uint32) |
ano |
Verze tohoto tvaru. |
| pozorováno |
DeliveryObservation → DeliveryObservation |
ano |
Kde a kdy byla pozorována polovina dodávky. |
| nyní |
array of string |
ano |
Milníky s rozpracovanou prací, v pořadí plánu. |
| next |
string | null |
ne |
První otevřený milník, který graf dovolí, jakmile rozpracovaná práce přistane. |
| milníky |
pole typu FlightMilestone → FlightMilestone |
ano |
Milníky now, každý s úkoly, které jsou v běhu. |
| prověřeno |
FlightMilestone | null → FlightMilestone |
ne |
Milník vyžádaný pomocí milestone, se všemi jeho úkoly. |
| release |
FlightRelease → FlightRelease |
ano |
Nejnovější release. |
| zdroje |
pole DeliverySource → DeliverySource |
ano |
Každý zdroj, přečtený i nepřečtený: nejprve plan.delivery, pak mesh. |
Používá plan.flight
PlanIssue
object
Jeden úkol, tak jak jej deklaruje jeho záznam a tak jak jej odvozuje graf.
| vlastnost | typ | povinné | popis |
| id |
string |
ano |
Identita, která je zároveň názvem souboru. |
| milestone |
string |
ano |
Milník, do něhož patří. |
| status |
string |
ano |
Odvozený stav. Nikdy se neukládá: úkol zaznamenává, co se s ním stalo, a stav z toho a ze stavu jeho závislostí vyplývá. |
| vlna |
integer (uint32) |
ano |
Vlna provádění: o jedna víc než nejdelší cesta k ní grafem závislostí. |
| priorita |
string |
ano |
p0 … p3. |
| profil |
string |
ano |
Profil provádění, pod kterým se na úkolu pracuje. |
| parallel_safe |
boolean |
ano |
Zda smí běžet vedle jiného úkolu své vlny. |
| název |
string |
ano |
Jeden řádek pojmenovávající výsledek. |
| slug |
string |
ano |
Slug, pokud ho záznam nese. |
| depends_on |
array of string |
ano |
Každý úkol, na němž deklaruje závislost, tak jak je deklarována — včetně toho, který neexistuje, což je nález, a ne tiché vynechání. |
| blocked_by |
array of string |
ano |
Závislosti, které nejsou DONE, plus milestone:<id>, když kontrola milníku zadržuje celý výsledek. |
| závislé |
array of string |
ano |
Úkoly, které na tomto závisejí. |
| scope |
array of string |
ano |
Cesty, kterých se dotýká; dva úkoly jedné vlny, které sdílejí cestu, se serializují. |
| slouží |
array of string |
ano |
Kritéria záměru, která má úkol naplnit, každé <intent>#<criterion>, jak je deklarováno. Prázdné pro údržbovou práci pod milníkem, který žádný záměr nejmenuje; zda jmenované kritérium existuje, je otázka pokrytí záměru, ne plánu. |
| cíl |
string |
ano |
Jeden řádek: k čemu úkol je. |
| evidence_have |
integer (uint32) |
ano |
Připojené položky důkazu. |
| evidence_need |
integer (uint32) |
ano |
Tokeny důkazů, které záznam vyžaduje, než smí být DONE. |
| started_at |
string |
ano |
Kdy provádění začalo, pokud začalo. |
| verified_at |
string |
ano |
Kdy byla implementace prohlášena za dokončenou. |
| completed_at |
string |
ano |
Kdy bylo dokončení zaznamenáno. |
Používá Plan PlanIssueList PlanNextIssue PlanRecord PlanStatusReport PlanWaveView
PlanIssueList
object
Úkoly odpovídající filtru se slovníkem, který pojmenovává jejich stavy.
| vlastnost | typ | povinné | popis |
| úkoly |
pole PlanIssue → PlanIssue |
ano |
Odpovídající úkoly v pořadí podle id. |
| celkem |
integer (uint) |
ano |
Kolik se jich shodovalo. |
| stavy |
PlanVocabulary → PlanVocabulary |
ano |
Deklarované slovníky stavů. |
Používá plan.issues
PlanMilestone
object
Jeden milník, jak jej deklaruje jeho záznam a jak jej odvozují oba grafy.
| vlastnost | typ | povinné | popis |
| id |
string |
ano |
Identita, která je zároveň názvem souboru; stabilní slug, nikdy ne verze. |
| status |
string |
ano |
Odvozený stav. |
| pořadí |
celé číslo (int64) |
ano |
Rozhodnutí při shodě v rámci jednoho pořadí; plán rozvoje se řadí nejdřív podle pořadí. |
| priorita |
string |
ano |
p0 … p3. |
| název |
string |
ano |
Jeden řádek pojmenovávající výsledek. |
| slug |
string |
ano |
Slug, pokud ho záznam nese. |
| last_accepted |
string |
ne |
Poslední přijatý úkol milníku DONE: jeho úkol DONE s nejpozdějším completed_at, při shodě s vyšším id. Prázdné pro milník, který není DONE, nebo je DONE bez úkolu (dokončily jej jeho důkazy). Který release jej nesl, je věcí released_in. |
| released_in |
string | null |
ne |
Release, který milník nesl — první záznam releasu, jehož commit obsahuje merge jeho posledního přijatého úkolu (nebo, bez úkolu, commit, který zaznamenal jeho nejnovější důkaz), jinak unreleased — když o něj čtenář požádal (released_in); plán rozvoje vždy. Nikdy typované pole (ADR 0166). |
| pořadí |
integer (uint32) |
ano |
Její vrstva v grafu milníků: co řadí plán rozvoje. |
| depends_on |
array of string |
ano |
Milníky, které vyžaduje. |
| blocked_by |
array of string |
ano |
Ty z nich, které nejsou DONE. Neprázdné znamená, že kontrola drží zpět každý úkol tohoto milníku, ať graf úkolů říká cokoli. |
| závislé |
array of string |
ano |
Milníky, které ji vyžadují. |
| tvrzení |
array of string |
ano |
Tvrzení repozitáře, která tento výsledek činí pravdivými. |
| počty |
PlanCounts → PlanCounts |
ano |
Jeho úkoly, spočtené podle odvozeného stavu. |
| úkoly |
array of string |
ano |
Jeho úkoly v pořadí id. |
| výsledek |
string |
ano |
Jeden řádek: co platí, až je milník skutečný. |
Používá Plan PlanRecord PlanRoadmap
PlanMilestoneProgress
object
Postup jednoho milníku, bez jeho prózy.
| vlastnost | typ | povinné | popis |
| id |
string |
ano |
Identita. |
| status |
string |
ano |
Odvozený stav. |
| název |
string |
ano |
Jeden řádek pojmenovávající výsledek. |
| počty |
PlanCounts → PlanCounts |
ano |
Jeho úkoly, spočtené podle odvozeného stavu. |
Používá PlanStatusReport
PlanNextIssue
object
Jediný úkol, který má pracovník teď převzít.
| vlastnost | typ | povinné | popis |
| issue |
PlanIssue | null → PlanIssue |
ne |
Úkol, pokud plán nějaký spustitelný má. |
| active_milestone |
string |
ano |
Milník, v němž hledání začalo. |
| důvod |
string | null |
ne |
Proč žádná není, když není: co spustit, abyste viděli, co v cestě stojí. |
Používá plan.next
PlanProject
object
Hlavička plánu: čím tento repozitář je, plus jediné pole, které nikdo nepíše.
| vlastnost | typ | povinné | popis |
| název |
string |
ano |
Název projektu z project.yaml. |
| repozitář |
string |
ano |
Repozitář, do něhož patří, owner/name. |
| default_branch |
string |
ano |
Větev, na které se plán provádí. |
| active_milestone |
string |
ano |
Milník, který pracovník právě provádí: nejníže řazený neblokovaný milník, který je ACTIVE, jinak nejníže řazený neblokovaný, který není dokončen. Odvozuje se při každém čtení, nikde se neukládá a nikdy se nepíše ručně — plán nemůže nominovat milník, jehož předpoklady nejsou skutečné. |
Používá Plan PlanStatusReport
PlanRecord
object | object
Jeden záznam plánu, milníku nebo úkolu se vším, co je o něm odvozeno.
Používá plan.record
PlanRoadmap
object
Milníky v odvozeném pořadí, s tím, který se provádí, a tím, který po něm následuje.
| vlastnost | typ | povinné | popis |
| milníky |
pole PlanMilestone → PlanMilestone |
ano |
Milníky seřazené podle ranku, pak pořadí, pak id, každý s releasem, který ho nesl (released_in). Posloupnost se odvozuje z grafu milníků a release ze záznamů releasů; nikde se neudržuje seznam verzí. |
| nyní |
string | null |
ne |
První nedokončený, neblokovaný milník v této posloupnosti. |
| next |
string | null |
ne |
Ten po něm, blokovaný nebo ne. |
Používá plan.roadmap
PlanStatusReport
object
Kde plán stojí: pokrok každého milníku, milník, který se provádí, a jeden úkol, který vzít jako další.
| vlastnost | typ | povinné | popis |
| projekt |
PlanProject → PlanProject |
ano |
Hlavička plánu s odvozeným aktivním milníkem. |
| stavy |
PlanVocabulary → PlanVocabulary |
ano |
Deklarované slovníky stavů. |
| milníky |
pole PlanMilestoneProgress → PlanMilestoneProgress |
ano |
Každý milník, v pořadí podle id. |
| next_ready |
PlanIssue | null → PlanIssue |
ne |
Další připravený úkol, pokud nějaký je. |
| počty |
PlanCounts → PlanCounts |
ano |
Každý úkol plánu, spočítaný podle odvozeného stavu. |
Používá plan.status
PlanTransition
"start" | "verify" | "done"
Jeden krok životního cyklu.
Tři, ne čtyři: evidence připisuje záznam, ne posouvá úkol, a patří k záznamu, který dokazuje, a ne k přesunům, které odblokuje.
use majordomus_cli::plan::Transition;
// The wire spelling is the one a caller types on the command line.
let t: Transition = serde_json::from_str("\"done\"").unwrap();
assert_eq!(t, Transition::Done);
assert_eq!(serde_json::to_string(&Transition::Start).unwrap(), "\"start\"");
// Each move owns the field it stamps and the event it records; nothing else decides
// either, so a new move cannot be added without saying both.
for (t, field, event) in [
(Transition::Start, "started_at", "plan_start"),
(Transition::Verify, "verified_at", "plan_verify"),
(Transition::Done, "completed_at", "plan_done"),
] {
assert_eq!(t.field(), field);
assert_eq!(t.event(), event);
}
startProvádění začalo. Odmítnuto, pokud úkol není READY.verifyImplementace je hotová a důkazy stále chybějí.doneDokončeno. Odmítá se, dokud je cokoli, na co čeká, nedokončené, nebo dokud chybí jakýkoli důkaz, který vyžaduje jeho vlastní záznam.
Používá PlanTransitionInput PlanTransitionResult
PlanTransitionInput
object
Vstup
plan.transition: který úkol přesunout a kterým směrem.
Dvě pole a žádné třetí. Není tu časové razítko — přesun se označí okamžikem, kdy se stal, nikdy okamžikem, který dodá volající, protože životní cyklus, který lze zpětně datovat, není záznamem toho, co se stalo. Není tu ani pole force nebo reason: přechod, který model odmítne, je odmítnut, a způsob, jak ho učinit legálním, je splnit podmínku, ne se ptát mimo ni.
use majordomus_cli::capability::builtin::plan::PlanTransitionInput;
use majordomus_cli::plan::Transition;
// The wire form an MCP client or an HTTP POST sends.
let input: PlanTransitionInput =
serde_json::from_str(r#"{"issue":"I0001","transition":"done"}"#).unwrap();
assert_eq!(input.issue, "I0001");
assert_eq!(input.transition, Transition::Done);
assert_eq!(input.transition.field(), "completed_at");
assert_eq!(input.transition.event(), "plan_done");
// Unknown fields are refused rather than ignored: a caller that misspells `transition`
// is told so instead of having its move silently dropped.
assert!(serde_json::from_str::<PlanTransitionInput>(
r#"{"issue":"I0001","transition":"done","force":true}"#).is_err());
| vlastnost | typ | povinné | popis |
| issue |
string |
ano |
Úkol k přesunutí, podle jeho id — které je zároveň názvem jeho souboru. |
| transition |
PlanTransition → PlanTransition |
ano |
Který přesun: start, verify nebo done. |
Používá plan.transition
PlanTransitionResult
object
Co udělal jeden přechod.
from a to jsou obojí odvozené stavy, čtené před zápisem a po něm. Hlásí se, a nepředpokládají se, protože přesun sám stav neurčuje: done na záznamu s neúplnými důkazy ho nechá ve VERIFY a volající se to dozví, místo aby se dozvěděl, že uspěl.
use majordomus_cli::capability::builtin::plan::PlanTransitionResult;
// What a `done` looks like when the record's required evidence is not all present: the
// call succeeded, the field was written, and the issue is still in VERIFY. A caller that
// read only the absence of an error would report this as finished; a caller that reads
// `to` knows better, which is why the field is here.
let held: PlanTransitionResult = serde_json::from_str(r#"{
"issue":"I0001","transition":"done","from":"VERIFY","to":"VERIFY",
"field":"completed_at","at":"2026-09-11T12:00:00Z","event":"plan_done"
}"#).unwrap();
assert_eq!(held.to, "VERIFY", "the status is derived from the record, not from the move");
// `next_ready` is absent when the plan has none left to hand out, which is ordinary
// rather than an error, so it is omitted rather than spelled as an empty string.
assert!(held.next_ready.is_none());
| vlastnost | typ | povinné | popis |
| issue |
string |
ano |
Úkol, který se pohnul. |
| transition |
PlanTransition → PlanTransition |
ano |
Provedený přesun. |
| z |
string |
ano |
Stav, ve kterém úkol byl předtím. |
| do |
string |
ano |
Stav, v němž se nyní nachází, odvozený ze záznamu tak, jak byl zapsán. |
| pole |
string |
ano |
Pole, které bylo orazítkováno. |
| v |
string |
ano |
Časové razítko zapsané do něj a do updated_at. |
| událost |
string |
ano |
Připojená událost ledgeru. |
| next_ready |
string | null |
ne |
Úkol, který by měl pracovník vzít jako další, odvozený po přesunu. Chybí, když plán žádný nemá — což je po start běžný případ, protože právě převzatý úkol už není READY. |
Používá plan.transition
PlanValidation
object
Vlastní validace modelu: co graf odmítá a před čím jen varuje.
| vlastnost | typ | povinné | popis |
| platné |
boolean |
ano |
Zda je model platný: žádný nález není selhání. |
| milníky |
integer (uint) |
ano |
Kolik milníků plán obsahuje. |
| úkoly |
integer (uint) |
ano |
Kolik úkolů. |
| selhání |
integer (uint) |
ano |
Kolik nálezů jsou selhání. |
| varování |
integer (uint) |
ano |
Kolik je varování. |
| zjištění |
pole PlanFinding → PlanFinding |
ano |
Každé zjištění v pořadí odvození. |
Používá plan.validate
PlanVocabulary
object
Slovníky stavů, aby čtenář nemusel vědět, jaké stavy existují.
| vlastnost | typ | povinné | popis |
| issue |
array of string |
ano |
Stavy úkolů v pořadí odvození. |
| milestone |
array of string |
ano |
Stavy milníků v pořadí odvození. |
Používá Plan PlanIssueList PlanStatusReport
PlanWave
object
Jedna vlna provádění: úkoly, které graf dovoluje spustit současně.
| vlastnost | typ | povinné | popis |
| vlna |
integer (uint32) |
ano |
Vrstva od nuly. |
| úkoly |
array of string |
ano |
Úkoly v něm, v pořadí podle id. |
Používá Plan
PlanWaveReport
object
Vlny provádění s překryvy, které serializují úkoly, jež by graf nechal běžet společně.
| vlastnost | typ | povinné | popis |
| vlny |
pole PlanWaveView → PlanWaveView |
ano |
Vlny, nejnižší první, s úkoly každé z nich. |
| serialised_by_scope |
pole PlanFinding → PlanFinding |
ano |
Překryvy rozsahu mezi dvěma úkoly jedné vlny. Sdílení vlny dvěma úkoly je nutná podmínka pro jejich souběžný běh, ne postačující: překrývající se rozsah je serializuje a překryv se hlásí zde, místo aby ho dva pracovníci objevili v konfliktu. |
Používá plan.waves
PlanWaveView
object
Jedna vlna s úkoly v ní.
| vlastnost | typ | povinné | popis |
| vlna |
integer (uint32) |
ano |
Vrstva od nuly. |
| úkoly |
pole PlanIssue → PlanIssue |
ano |
Úkoly v něm, v pořadí podle id. |
Používá PlanWaveReport
Důkaz
object
Jeden objekt, který dokazuje, kde práce úkolu stojí.
| vlastnost | typ | povinné | popis |
| druh |
string |
ano |
branch, pull_request, merge, release, publication nebo claim. |
| popisek |
string |
ano |
Co se čtenáři ukazuje: #1298, krátký commit, tag, větev. |
| href |
string | null |
ne |
Kde objekt je na forge; chybí u objektu, který drží jen tento klon (lokální větev, mesh claim), takže odkaz nikdy nevede nikam. |
Používá FlightIssue
ReleaseReading
object
Odpověď jednoho zdroje na „jaký je nejnovější release“.
| vlastnost | typ | povinné | popis |
| zdroj |
string |
ano |
records, tags nebo publication. |
| state |
DeliveryReading → DeliveryReading |
ano |
Přečteno, nebo nepřečteno. |
| verze |
string | null |
ne |
Verze, kterou jmenuje, když byl přečten a nějakou jmenuje. |
| detail |
string |
ano |
Co bylo přečteno (.ai/repo/releases/v0.27.0.yaml, refs/tags/v0.27.0, <commit>:site/static/releases/latest.json), nebo proč nic. |
| href |
string | null |
ne |
Kde je vidět na forge, když je. |
Používá FlightRelease