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.

HTTP API: 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.

Vykresleno z docs/generated/openapi.json, který spustitelný soubor generuje ze svého registru schopností a CI jej odmítne, je-li zastaralý. Surový dokument je na /openapi.json; běžící server servíruje stejný dokument na vlastní /openapi.json a Swagger UI na /swagger.

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.

GET /api/v1/plan plan.model

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

statustělový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.
GET /api/v1/plan/delivery plan.delivery

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ázevtyppovinnépopispří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

statustělový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.
GET /api/v1/plan/drift plan.drift

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ázevtyppovinnépopispří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

statustělový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.
GET /api/v1/plan/flight plan.flight

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ázevtyppovinnépopispří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

statustělový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.
GET /api/v1/plan/issues plan.issues

Ú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ázevtyppovinnépopispří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

statustělový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.
GET /api/v1/plan/next plan.next

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ázevtyppovinnépopispří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

statustělový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.
GET /api/v1/plan/record plan.record

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ázevtyppovinnépopispří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

statustělový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.
GET /api/v1/plan/roadmap plan.roadmap

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

statustělový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.
GET /api/v1/plan/status plan.status

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ázevtyppovinnépopispří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

statustělový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.
POST /api/v1/plan/transition plan.transition

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

Tělo požadavku — PlanTransitionInput, JSON

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

statustělový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.
GET /api/v1/plan/validate plan.validate

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

statustělový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.
GET /api/v1/plan/waves plan.waves

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ázevtyppovinnépopispří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

statustělový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.
vlastnosttyppovinné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.
vlastnosttyppovinné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)).
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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í.
vlastnosttyppovinné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.
vlastnosttyppovinné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í.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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.
vlastnosttyppovinné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ší.
vlastnosttyppovinné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());
vlastnosttyppovinné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());
vlastnosttyppovinné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.
vlastnosttyppovinné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í.
vlastnosttyppovinné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ě.
vlastnosttyppovinné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ě.
vlastnosttyppovinné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í.
vlastnosttyppovinné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í.
vlastnosttyppovinné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“.
vlastnosttyppovinné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

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