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: obligations

Co úloha dluží, než ji lze nazvat dokončenou, a zda důkazy, které každý závazek splnily, stále popisují tento strom. Slovník jsou data, která distribuce dodává a která odpovídají v libovolném klonu; uzavření se čte z lokální části vrstvy, kterou tento proces obsluhuje workeru před sebou a nikdy ji nepublikuje. Jen čtení, nikdy zápis: `majordomus evidence` zaznamenává a druhý zapisovatel jedné knihy záznamů by byl druhým účtem týchž událostí.

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.

závazky

Co úloha dluží, než ji lze nazvat dokončenou, a zda důkazy, které každý závazek splnily, stále popisují tento strom. Slovník jsou data, která distribuce dodává a která odpovídají v libovolném klonu; uzavření se čte z lokální části vrstvy, kterou tento proces obsluhuje workeru před sebou a nikdy ji nepublikuje. Jen čtení, nikdy zápis: `majordomus evidence` zaznamenává a druhý zapisovatel jedné knihy záznamů by byl druhým účtem týchž událostí.

GET /api/v1/obligations obligations.vocabulary

Každá existující povinnost

Tokeny, které úloha smí deklarovat v `requires`: co každý žádá od pracovníka, příkaz, který jej splní, pathspecy, přes které se hashují jeho důkazy, a zda je jeho fakt vzdálený, a proto vázaný na commit, a ne na strom. Dodaná data, v každém klonu stejná, takže odpovídá i v checkoutu, který nikdy nespustil životní cyklus.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache process (max_entries=2)
  • Nástroj MCP majordomus_obligations
  • zdroj MCP {"name": "obligations", "uri": "majordomus://obligations"}

Žá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/obligations"

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 Slovník Každý závazek, který existuje: 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/obligations/closure obligations.closure

Co tato úloha ještě dluží

Každý závazek, který aktivní úloha deklarovala, spojený s tím, co o něm říká slovník, a s důkazy, které ho splňují, nebo ne: co se dluží, co je splněno a co zastaralo — se zaznamenaným hashem vstupu a aktuálním hashem stromu, nebo zaznamenaným commitem a jeho štítkem, aby čtenář viděl, proti čemu. Posouzení je to, které aplikuje `finish`, reprodukované, ne znovu rozhodnuté, a slova zastarání jsou jediná čtyři v repozitáři. Checkout bez úlohy to hlásí, místo aby hlásil, že se nedluží nic.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache process (max_entries=2, ttl_seconds=2)
  • Nástroj MCP majordomus_obligation_closure
  • Zdroj MCP {"name": "obligation-closure", "uri": "majordomus://obligations/closure"}

Žá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/obligations/closure"

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 Uzavření Co tato úloha ještě dluží: 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.

Uzavření

object
Co dluží aktivní úloha tohoto checkoutu a kolik z toho stále platí.

Klon, který nikdy nespustil životní cyklus, odpovídá i na toto, a odpovídá jako na absenci: present false, žádná úloha a zjištění, které to říká. „Nic nedlužíme“ a „není komu dlužit“ jsou různé skutečnosti a obsluhovaná instance nesmí hlásit druhou jako první.

use majordomus_cli::capability::builtin::obligations::Closure;
let fresh: Closure = serde_json::from_str(
    r#"{"present":false,"worktree":"/srv/clone","branch":"master","closed":false,
        "tallies":{},
        "findings":["no active task in this checkout (.ai/local/state/current.yaml); nothing owes anything here"]}"#,
)
.unwrap();
assert!(!fresh.present && !fresh.closed, "nothing that does not exist is closed");
assert!(fresh.task.is_none() && fresh.obligations.is_empty());
assert_eq!(fresh.findings.len(), 1, "absence is reported, not implied");
vlastnosttyppovinnépopis
přítomno boolean ano Zda tento checkout vůbec má úlohu, o které by se dalo hlásit. False v klonu, který nikdy nespustil životní cyklus, což není porucha a není to „nic nedlužíme“.
worktree string ano Worktree, kterého se tato odpověď týká. Každé čtení níže se vztahuje k němu a k žádnému jinému checkoutu téhož repozitáře.
větev string ano Branch, nebo DETACHED.
head string ne Commit, na kterém tento checkout stojí.
working_tree string ne clean nebo dirty.
úloha ActiveTask | null → ActiveTask ne Aktivní úloha, nebo None. Její requires je seznam, který rozbalují záznamy níže.
uzavřeno boolean ano Pravda, když úloha deklaruje povinnosti a každá z nich je splněna a aktuální — tedy když by majordomus.obligation-closure neodmítl finish --outcome completed. Nepravda, když je cokoli dlužné, zastaralé nebo nedeklarované, a nepravda, když žádná úloha není: co neexistuje, není uzavřeno.
součty mapa celých čísel (uint) ano Kolik závazků stojí kde, podle slova stavu. Chybějící stavy chybějí místo nuly, takže čtenář nemusí znát slovník, aby četl součty.
závazky pole ObligationClosure → ObligationClosure ne Každý závazek, který úloha deklarovala, v pořadí, v jakém je deklarovala.
zjištění array of string ne Co by měl čtenář vědět, než čemukoli z uvedeného uvěří: nečitelný slovník, knihu, kterou nešlo přečíst, úlohu, která nic nedeklaruje. Prázdné je běžný případ.

Používá obligations.closure

Důkazy

object
Řádek task.evidence, který splnil závazek, tak, jak ho drží ledger.

Nic staršího se nezohledňuje: důkazy nahrazují jiné důkazy a kniha uchovává historii pro čtenáře, který ji chce.

use majordomus_cli::capability::builtin::obligations::Evidence;
let e: Evidence = serde_json::from_str(
    r#"{"recorded_at":"2026-09-09T21:01:00Z","head":"f00ba7","branch":"master",
        "kind":"ci","command":"scripts/ci/reference-check","inputs_hash":"7f68b9"}"#,
)
.unwrap();
assert_eq!(e.head, "f00ba7", "the envelope's commit is what a remote fact is judged against");
assert!(e.artifact.is_empty(), "one of command and artifact; narrative is not evidence");
vlastnosttyppovinnépopis
recorded_at string ano Kdy byl řádek připojen.
head string ano Commit, který na něj obálka účetní knihy vyrazila.
větev string ne Větev, na které byl zaznamenán.
druh string ne Jak byl pořízen: test, build, ci, artifact nebo manual.
command string ne Příkaz, který to vytvořil. Vyprávění není důkaz, takže jedno z tohoto a artifact je vždy přítomno.
artifact string ne Odkaz, na nějž ukazuje, například publikovaná URL.
výsledek string ne Co příkaz řekl, když jeho výstup byl podstatou.
session string ne Epizoda, která to zaznamenala, byla-li otevřená.
inputs_hash string ne Hash deklarovaných vstupů tokenu v okamžiku, kdy byl pořízen. Prázdný pro token, který žádné nedeklaruje.

Používá ObligationClosure

Povinnost

object
Jeden token, který úloha smí deklarovat v requires, tak jak jej distribuce dodává.

remote a inputs rozhodují o tom, jak se posuzují její důkazy, a jsou rozhodnutím souboru, nikoli tohoto čtenáře: fakt, který pracovní strom nedokáže určit, je vázán na commit, ve kterém byl pořízen, a vše ostatní je vázáno na bajty souborů, které vybírají jeho pathspecy.

use majordomus_cli::capability::builtin::obligations::Obligation;
let push: Obligation = serde_json::from_str(
    r#"{"id":"push","title":"The commit reached the remote",
        "summary":"The branch's head exists on the remote it tracks.",
        "discharged_by":"git","remote":true}"#,
)
.unwrap();
assert!(push.remote);
assert!(push.inputs.is_empty(), "a remote fact is bound to a commit, not to a tree");
vlastnosttyppovinnépopis
id string ano Token tak, jak ho pojmenovává requires úlohy.
název string ano Závazek jako nadpis.
summary string ano Co se po workerovi žádá, aby měl hotovo.
discharged_by string ano Příkaz, který produkuje důkazy. none pro token držený jiným řádkem kontraktu a vypsaný, aby report mohl říct, co chybí, místo aby nechal díru.
vstupy array of string ne Pathspecy, nad kterými se důkaz hashuje. Prázdné pro token, jehož skutečnost je vzdálená, a prázdné pro token vázaný na ani jedno: viz ObligationClosure::staleness.
remote boolean ano Pravda, když fakt nelze zjistit jen z pracovního stromu — push, publikace, nasazení. Takový důkaz je vázán na commit, ne na strom.
poznámka string ne Co slovník říká o tokenu kromě jeho shrnutí.

Používá Vocabulary

ObligationClosure

object
Jedna povinnost, kterou úloha deklarovala, spojená s tím, co o ní říká slovník, a s důkazy, které ji plní nebo neplní.

Pole slovníku se tu opakují záměrně: klient, který se ptá, co tato úloha dluží, dostane v téže odpovědi název tokenu, jeho shrnutí i příkaz, který by jej splnil, a k vykreslení reportu nepotřebuje druhé volání.

use majordomus_cli::capability::builtin::obligations::{ObligationClosure, ObligationState};
let owed: ObligationClosure = serde_json::from_str(
    r#"{"id":"pages","title":"The published site serves this commit","remote":true,
        "state":"owed","detail":"owed, and no evidence was recorded",
        "reproduce":"majordomus evidence --covers pages --command 'scripts/pages verify'"}"#,
)
.unwrap();
assert_eq!(owed.state, ObligationState::Owed);
assert!(owed.evidence.is_none() && owed.staleness.is_none(), "nothing to label");
assert!(owed.reproduce.starts_with("majordomus evidence"), "a finding carries its repair");
vlastnosttyppovinnépopis
id string ano Token, jak ho jmenuje requires úlohy.
název string ano Ze slovníku; samotný token, když žádný neuvádí.
summary string ne Ze slovníku.
discharged_by string ne Ze slovníku: příkaz, který vytváří důkazy.
remote boolean ano Ze slovníku: zda je fakt vzdálený.
vstupy array of string ne Ze slovníku: pathspecy, nad nimiž se důkaz hashuje.
state ObligationState → ObligationState ano Jak to stojí.
zastaralost Divergence | null → Divergence ne Jak daleko jsou důkazy od tohoto checkoutu, v jediném slovníku zastarání repozitáře. None, když nejsou žádné důkazy k označení.

Vzdálený fakt se označuje proti commitu, u něhož byl pořízen, protože web, který servíruje commit, ho servíruje dál, zatímco se pod ním strom pohybuje. Fakt vázaný na strom se označuje opětovným hashováním: shodné hashe jsou exact a rozdíl přebírá označení commitu, což je advanced, když se pracovní strom jen posunul, a diverged, když historie, kterou jmenoval, zmizela. Token, který nedeklaruje ani vstupy, ani vzdálený fakt, není vázán na nic a po zaznamenání zůstává exact — to je chování validátoru, které se zde reprodukuje, a ne zpřísňuje.

evidence Evidence | null → Evidence ne Řádek, který to splnil, nebo None.
inputs_hash_now string | null ne Na co se vstupy tokenu v tomto stromu nyní hashují — druhá polovina „zastaralé vůči čemu“. None u tokenu, který nedeklaruje žádné vstupy, a None, když se git nedal zeptat, které soubory vybírají.
inputs_files integer | null ne Přes kolik sledovaných souborů byl tento hash vzat. Hlásí se, protože výběr shellu a tento nejsou vždy stejná množina — viz hlavička modulu — a počet je nejlevnější způsob, jak to čtenář uvidí, místo aby mu to bylo řečeno.
detail string ano Jeden řádek: jaké je skutečné postavení této povinnosti, slovy, která validátor používá, když odmítá.
reprodukovat string ano Příkaz, který by to splnil. Každé zde uvedené zjištění nese způsob, jak na ně zareagovat, jak žádá project.finding-carries-reproduce.

Používá Closure

ObligationState

"owed" | "discharged" | "stale" | "undeclared"
Kde jedna povinnost stojí.

Slova jsou verdikty validátoru, ne škála závažnosti: stale není horší owed, je to důkaz, který byl pravdivý a už nepopisuje to, co dokázal.

use majordomus_cli::capability::builtin::obligations::ObligationState;
// only one of the four lets a task be called completed
let completable = |s: ObligationState| s == ObligationState::Discharged;
assert!(completable(ObligationState::Discharged));
assert!(!completable(ObligationState::Stale), "evidence that no longer describes the tree");
assert!(!completable(ObligationState::Owed));
assert!(!completable(ObligationState::Undeclared));
  • owedDeklarováno a nikdy k tomu nebyly zaznamenány žádné důkazy.
  • dischargedDůkazy existují a stále popisují tento strom nebo tento commit.
  • staleDůkaz existuje a už nepopisuje, co dokázal: vstupy se změnily, nebo commit, který jmenoval, není tento.
  • undeclaredÚloha vyžaduje token, který dodávaný slovník nedeklaruje. Nic jej nemůže splnit, protože nic neví, co by to bylo.

Používá ObligationClosure

Slovník

object
Slovník, který distribuce dodává: každý existující token.

count se měří z obligations, ne zapisuje, takže token přidaný do souboru se započítá tímtéž aktem, který jej deklaruje.

use majordomus_cli::capability::builtin::obligations::Vocabulary;
let v: Vocabulary = serde_json::from_str(
    r#"{"version":1,"source":"/opt/majordomus/share/obligations.yaml","count":1,
        "obligations":[{"id":"commit","title":"The work is committed",
                        "summary":"In the branch's history, not the working tree.",
                        "discharged_by":"git","remote":false}]}"#,
)
.unwrap();
assert_eq!(v.count, v.obligations.len());
assert_eq!(v.version, 1, "the only shape this reader accepts");
vlastnosttyppovinnépopis
verze integer (uint64) ano Verze formátu samotného souboru. 1 je jediná, kterou tento čtenář přijímá.
zdroj string ano Odkud se četlo, absolutní cesta: sdílený adresář distribuce, který nemusí být uvnitř repozitáře.
počet integer (uint) ano Kolik tokenů to je. Žádné číslo není nikde napsáno.
závazky pole Obligation → Obligation ano Každý token v pořadí, v jakém je soubor deklaruje.

Používá obligations.vocabulary

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