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

Co se musí stát pravdou nad milníky, které to realizují: výrok každého záměru, invarianty a kritéria splnění, jeho fáze odvozená ze stavu milníků plánu, stav každého kritéria odvozený z ledgeru důkazů a jeho verdikt odvozený z těchto kritérií samotných. Nic se neukládá a nic nepřechází; záměr přidaný pod model projektu je zodpovězen vším tímto bez registrace kdekoli.

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.

intenty

Co se musí stát pravdou nad milníky, které to realizují: výrok každého záměru, invarianty a kritéria splnění, jeho fáze odvozená ze stavu milníků plánu, stav každého kritéria odvozený z ledgeru důkazů a jeho verdikt odvozený z těchto kritérií samotných. Nic se neukládá a nic nepřechází; záměr přidaný pod model projektu je zodpovězen vším tímto bez registrace kdekoli.

GET /api/v1/intents intents.list

Každý intent s odvozenou fází a verdiktem

Každý záměr, který model projektu deklaruje, každý se stavem, který plán odvozuje pro jeho milníky, stavem důkazů za každým kritériem splnění, fází, kterou tyto dva odvozují — declared, planned, executing, verifying nebo satisfied, nebo cancelled či superseded, když to záznam říká — a verdiktem, který odvozují samotná kritéria (ADR 0107): satisfied, když je splněno každé kritérium, unsatisfied, když není splněno kritérium testu nebo tvrzení, unknown, když nejsou splněna jen kritéria příkazu či nasazení nebo žádné není deklarováno, s kritérii, která jej drží zpátky.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache checkout (max_entries=2)
  • nástroj MCP majordomus_intents
  • zdroj MCP {"name": "intents", "uri": "majordomus://intents"}
  • $ intent list

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

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 IntentList Každý záměr s odvozenou fází a verdiktem: 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/intents/binding intents.binding

Ke čemu je práce vázána, než začne

Na co se úloha ptá, než začne (ADR 0111): dán úkol, který práce provádí, záměr, kterému slouží, cesty, kterých se dotkne, nebo třída výjimky s důvodem, jedno postavení — `bound`, když práce slouží kritériu živého záměru přes odkazy, které preflight přijímá, `maintenance`, když její úkoly leží pod milníky, které žádný živý záměr nejmenuje, `exempt`, když je třída ta, kterou politika deklaruje pod `intent.exemptions`, a byl uveden důvod, jinak `refused`, každé odmítnutí s příčinou: vlastních sedm příčin preflightu a nothing_named, unknown_intent, intent_retired, intent_has_no_open_work, issue_outside_intent, ambiguous_intent (samotné cesty dosáhly na více než jeden záměr), unknown_exemption, exemption_without_reason, exemption_names_work. Odpověď nese, co bylo jmenováno, vyřešené úkoly a záměry s tím, co každý záměr od workera žádá, poznámku, když cesty leží mimo rozsah jmenovaného úkolu, a dva piny, které pozdější čtenář porovnává: `plan_revision`, který se pohne, když se upraví záměr, odkaz nebo kritika, a `evidence_standing`, který se pohne, když se změní stav důkazů obsluhovaného kritéria. Nic se neukládá.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_intent_binding
  • $ intent binding

Parametry dotazu

názevtyppovinnépopispříklady
issue string ne Úkol, který práce provádí, podle id. first-issue: "I0001"
intent string ne Záměr, kterému práce slouží, podle id, když ho pracovník pojmenuje přímo.
cesty string ne Cesty relativní k repozitáři, kterých se práce dotkne, oddělené čárkami. first-issue: ""
výjimka string ne Třída výjimek, kterou politika deklaruje pod `intent.exemptions`.
protože string ne Proč se výjimka uplatňuje.

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/intents/binding?issue=I0001&paths="

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 IntentBinding K čemu je kus práce vázán, než začne: 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/intents/coverage intents.coverage

Která práce nese které kritérium a proč každý úkol existuje

Plán čtený proti záměrům (ADR 0073): každé kritérium každého živého záměru se živými úkoly, které mu slouží, milníky, do nichž patří, a jeho silou — covered, weakly covered, když žádný sloužící úkol nevyžaduje důkazy, observed, když zaznamenaná mezera viděla, že už platí, nebo uncovered, když nic v plánu nezpůsobí, že bude platit — a každý úkol s důvodem, proč existuje: kritéria, kterým slouží, údržba pod milníkem, který nejmenuje žádný záměr, nebo unexplained pod milníkem, který realizuje záměr.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_intent_coverage
  • $ intent coverage

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

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 IntentCoverage Která práce nese které kritérium a proč každý úkol 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/intents/preflight intents.preflight

Kterému záměru práce slouží, nebo proč nesmí pokračovat

Pro úkol, který kus práce provádí, nebo cesty, kterých se dotkne, jeden verdikt: `serves`, když není odmítnut žádný úkol a alespoň jeden slouží kritériu živého záměru přes platný odkaz, plán každého takového záměru je zkritizován bez otevřeného blokujícího nálezu (úkoly posouzené jako údržba vedle toho verdikt nemění); `maintenance`, když úkoly leží pod milníky, které nejmenuje žádný živý záměr a nesloužící ničemu, jak `intent validate` dovoluje; jinak `refused`, každé odmítnutí s jeho úkolem a příčinou — unknown_issue, no_issue_covers_paths, issue_serves_nothing, serves_another_intent, serves_unknown_criterion, intent_not_critiqued, open_blocking_finding — v režimu cest se posoudí každý úkol a odpoví se nejhorším verdiktem. Odpověď nese, pro dosažené záměry a žádné jiné, výrok, obsloužená kritéria se živým stavem jejich důkazů, invarianty, necíle a governance, kritiku s jejími otevřenými blokujícími nálezy a zaznamenanou mezeru omezenou na tato kritéria.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_intent_preflight
  • $ intent preflight

Parametry dotazu

názevtyppovinnépopispříklady
issue string ne Úkol, který práce provádí, podle id. Je-li zadán, cesty se nezohledňují. first-issue: "I0001"
cesty string ne Cesty relativní k repozitáři, kterých se práce dotkne, oddělené čárkami. first-issue: ""

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/intents/preflight?issue=I0001&paths="

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 IntentPreflight Kterému záměru práce slouží, nebo proč nesmí pokračovat: 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/intents/propose intents.propose

Navrhnout záměr: co se musí stát pravdou

Zapíše nový záznam záměru pod `.ai/repo/project/intents/` z výroku o tom, co se musí stát pravdou, s volitelným titulkem (první řádek výroku, když chybí) a id (slug titulku, když chybí). Záznam nepojmenovává žádný milník, kritérium ani invariant: jeho fáze se odvodí jako `declared`, `intent validate` obě absence hlásí jako varování, ne selhání, a žádná práce mu nemůže sloužit, dokud není naplánován (ADR 0144). O jeho postavení se neukládá nic. Existující záznam se odmítne, nikdy nepřepíše, a soubor vznikne celý, nebo vůbec. Odpověď pojmenovává identitu a soubor; `intents.record` odpoví odvozenou fázi, jakmile ji index drží.

  • command
  • experimentální
  • měření výkonu prominuto: destruktivní
  • cache vypnuta
  • nástroj MCP majordomus_intent_propose
  • $ intent propose

Tělo požadavku — IntentProposeInput, JSON

příklad věta

{"statement":"Every page of the UI answers within 100 ms when warm"}

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/intents/propose" -H "content-type: application/json" -d '{"statement":"Every page of the UI answers within 100 ms when warm"}'

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 Navrženo Navrhnout záměr: co se musí stát pravdou: 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/intents/record intents.record

Jeden záměr se vším, co o něm bylo odvozeno

Jeden záměr celý: jeho výrok a invarianty tak, jak byly napsány, každý milník se stavem, který odvozuje plán, každé kritérium splnění se stavem jeho důkazů a příkazem, který ho reprodukuje, fáze a verdikt, který odvozují samotná kritéria, s kritérii, která ho drží zpět. Vlastní soubor záznamu zůstává na `majordomus://intent/<id>`.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_intent_record
  • $ intent show

Parametry dotazu

názevtyppovinnépopispříklady
id string ano Id intentu, které je zároveň jeho názvem souboru pod `.ai/repo/project/intents/`. first-intent: "a-brief-is-reconciled-into-the-plan"

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/intents/record?id=a-brief-is-reconciled-into-the-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 IntentView Jeden záměr se vším, co o něm bylo 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/intents/validate intents.validate

Co model intentů odmítá

Každý nález nad záměry: záměr nejmenující žádný milník nebo žádné kritérium, milník, který se nerozliší, kritérium bez odkazu na důkazy nebo s odkazem na něco, co tento repozitář nedrží, governance, která se nerozliší, nástupce, který není záměr, název souboru, který se neshoduje s jeho id — každé selhání — a milník, kterému neslouží žádný záměr, varování.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_intent_validate
  • $ intent 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/intents/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 IntentValidation Co model záměru 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.

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.

BindingCause

"unknown_issue" | "no_issue_covers_paths" | "issue_serves_nothing" | "serves_another_intent" | "serves_unknown_criterion" | "intent_not_critiqued" | "open_blocking_finding" | "nothing_named" | "unknown_intent" | "intent_retired" | "intent_has_no_open_work" | "issue_outside_intent" | "ambiguous_intent" | "unknown_exemption" | "exemption_without_reason" | "exemption_names_work"
Proč byla vazba odmítnuta, jako slovo, které čtenář greppuje. Prvních sedm jsou vlastní příčiny preflightu, převzaté beze změny; zbytek je to, co dokáže najít jen vazba.

use majordomus_cli::intent::IntentPreflightCause;
use majordomus_cli::intent_binding::BindingCause;
// a preflight cause keeps its word
assert_eq!(
    serde_json::to_string(&BindingCause::from(IntentPreflightCause::IntentNotCritiqued)).unwrap(),
    serde_json::to_string(&IntentPreflightCause::IntentNotCritiqued).unwrap(),
);
  • unknown_issueJmenovaný úkol není úkolem plánu.
  • no_issue_covers_pathsRozsah žádného otevřeného úkolu nepokrývá žádnou z cest.
  • issue_serves_nothingMilník úkolu realizuje živý záměr a úkol neslouží žádnému z jeho kritérií.
  • serves_another_intentÚkol slouží kritériu záměru, jehož milníky nezahrnují ten jeho.
  • serves_unknown_criterionÚkol slouží záměru nebo kritériu, které neexistuje.
  • intent_not_critiquedZáměr, kterému práce slouží, nemá kritiku.
  • open_blocking_findingKritika záměru, kterému práce slouží, má stále otevřený blokující nález.
  • nothing_namedNic nebylo pojmenováno: žádný úkol, žádný záměr, žádné cesty a žádná výjimka.
  • unknown_intentUvedený záměr není záměrem tohoto repozitáře.
  • intent_retiredUvedený záměr je zrušen nebo nahrazen.
  • intent_has_no_open_workPojmenovaný záměr nemá žádný otevřený úkol, který by mu sloužil, takže není práce, ke které by se dalo vázat.
  • issue_outside_intentPojmenovaný úkol neslouží žádnému z kritérií záměru pojmenovaného vedle něj.
  • ambiguous_intentSamotné cesty dosáhly na více než jeden záměr; worker musí jmenovat úkol.
  • unknown_exemptionTřída výjimky není ta, kterou politika deklaruje.
  • exemption_without_reasonVýjimka byla dána bez důvodu.
  • exemption_names_workVýjimka byla udělena vedle úkolu nebo záměru: práce je jedno nebo druhé.

Používá BindingRefusal

BindingExemption

object
Výjimka, kterou vazba přijala: třída, jak ji politika deklaruje, a důvod, který worker uvedl.

use majordomus_cli::intent_binding::BindingExemption;
let e = BindingExemption {
    class: "emergency".into(),
    description: "Restoring a broken trunk".into(),
    because: "master is red on case 500".into(),
};
assert_eq!(e.class, "emergency");
vlastnosttyppovinnépopis
třída string ano Id třídy.
popis string ne K čemu je třída podle politiky určena.
protože string ano Důvod pracovníka.

Používá IntentBinding

BindingRefusal

object
Jeden důvod, proč byla vazba zamítnuta.

use majordomus_cli::intent_binding::{BindingCause, BindingRefusal};
let r = BindingRefusal::new(None, BindingCause::NothingNamed, "name the work".into());
assert!(r.issue.is_none());
assert_eq!(r.cause, BindingCause::NothingNamed);
vlastnosttyppovinnépopis
issue string | null ne Úkol, o němž je; chybí, když není o žádném jednom úkolu.
příčina BindingCause → BindingCause ano Příčina.
zpráva string ano Co je špatně, jednou větou.

Používá IntentBinding

BindingRequest

object
Co worker jmenoval, když se ptal, čemu jeho práce slouží. Každé pole je volitelné a kombinace se posuzují, nepředpokládají: samotný úkol, samotný záměr, úkol vedle záměru, kterému má sloužit, samotné cesty nebo výjimka s důvodem.

use majordomus_cli::intent_binding::BindingRequest;
let by_issue = BindingRequest { issue: Some("I0001".into()), ..Default::default() };
assert!(!by_issue.names_nothing());
// blanks are what a query string or a shell variable leaves behind, and name nothing
let blank = BindingRequest { issue: Some("  ".into()), ..Default::default() }.trimmed();
assert!(blank.names_nothing());
vlastnosttyppovinnépopis
issue string | null ne Úkol, který práce provádí.
intent string | null ne Záměr, kterému práce slouží, když ho worker pojmenuje přímo.
cesty array of string ne Cesty, kterých se práce dotkne.
výjimka string | null ne Třída výjimky, když práce záměrně nespadá pod žádný intent.
protože string | null ne Proč se výjimka uplatňuje.

Používá IntentBinding

BindingStanding

"bound" | "maintenance" | "exempt" | "refused"
Kde stojí kus práce vůči záměrům: jediné slovo, podle kterého se rozhoduje o startu.

use majordomus_cli::intent_binding::BindingStanding;
assert_eq!(serde_json::to_string(&BindingStanding::Bound).unwrap(), "\"bound\"");
assert!(BindingStanding::Refused.refuses());
assert!(!BindingStanding::Maintenance.refuses());
  • boundPráce slouží alespoň jednomu kritériu živého záměru přes odkazy, které platí, a plán každého takového záměru byl podroben kritice bez otevřeného blokujícího nálezu.
  • maintenanceÚkoly, na které se práce rozpadá, leží pod milníky, které nepojmenovává žádný živý záměr: odvozená údržba, jak to intent validate připouští.
  • exemptWorker uvedl třídu výjimky, kterou politika deklaruje, s důvodem.
  • refusedPráce nesmí začít jako vázaná práce; každý důvod je v refusals.

Používá IntentBinding

ConditionState

"satisfied" | "missing" | "conflicting" | "unknown"
Stav jednoho kritéria, jak ho mezera pozorovala. Čtyři hodnoty, protože „neurčeno“ musí jít zapsat: vynechané kritérium se odmítne a Unknown není nikdy úspěch.

use majordomus_cli::intent_review::ConditionState;
assert_eq!(serde_json::to_string(&ConditionState::Conflicting).unwrap(), "\"conflicting\"");
assert_ne!(ConditionState::Unknown, ConditionState::Satisfied);
  • satisfiedUž platí na pozorovaném commitu.
  • missingNeplatí; je třeba práce.
  • conflictingNěco v repozitáři tomu odporuje.
  • unknownNeurčeno. Nikdy se nečte jako splněno.

Používá GapCondition

CritiqueClass

"missed_requirement" | "unproven_assumption" | "insufficient_work" | "unnecessary_work" | "regression_risk" | "surface_missing" | "delivery_verification"
Třída zjištění kritiky: otázka, kterou položil adversariální průchod. Uzavřená, aby bylo možné zjištění review počítat podle otázky, místo aby se četla jako próza.

use majordomus_cli::intent_review::CritiqueClass;
assert_eq!(
    serde_json::to_string(&CritiqueClass::DeliveryVerification).unwrap(),
    "\"delivery_verification\""
);
  • missed_requirementChybí v plánu něco, co záměr vyžaduje?
  • unproven_assumptionKterý předpoklad je nedoložený?
  • insufficient_workKteré kritérium nemá dostatek práce?
  • unnecessary_workKterá pracovní položka je zbytečná?
  • regression_riskCo by se mohlo zhoršit?
  • surface_missingKterá související plocha se musí změnit také?
  • delivery_verificationKteré ověření nasazení nebo běhu je vyžadováno?

Používá CritiqueFinding

CritiqueFinding

object
Jeden nález kritiky: co revize našla, čeho se týká, zda blokuje provedení a jak byl vyřešen. class a resolution jsou None, když záznam píše hodnotu, kterou tento modul nezná, a pole _text si ponechávají, co bylo napsáno.

use majordomus_cli::intent_review::{CritiqueFinding, CritiqueRecord, ResolutionState};
let c = CritiqueRecord::from_metadata("c.yaml", &serde_json::json!({
    "intent": "x",
    "findings": [{"id": "f1", "class": "regression_risk", "subject": "x#a",
                  "blocking": true, "resolution": {"state": "planned", "issue": "I1"}}],
}));
let finding: &CritiqueFinding = &c.findings[0];
assert!(finding.blocking);
assert_eq!(finding.resolution, Some(ResolutionState::Planned));
assert_eq!(finding.issue, "I1");
vlastnosttyppovinnépopis
id string ano Jedinečné v rámci kritiky.
třída CritiqueClass | null → CritiqueClass ne Třída, nebo None pro třídu, kterou tento modul nezná.
class_text string ano Tak, jak je napsáno.
předmět string ano <intent>#<criterion>, id úkolu nebo id milníku.
zjištění string ano Nález.
blokující boolean ano Zda provádění nesmí začít, dokud je otevřené.
rozlišení ResolutionState | null → ResolutionState ne Vyřešení, nebo None pro stav, který tento modul nezná.
resolution_text string ano Tak, jak je napsáno.
issue string ano Úkol, který to nese, když je naplánováno.
protože string ano Proč, když zamítnuto.

Používá IntentPreflightCritique

GapCondition

object
Stav jednoho kritéria proti pozorováním, jak ho píše záznam. state je None, když soubor jmenuje stav, který tento modul nezná, a state_text uchová, co bylo napsáno, aby ho zjištění mohlo citovat.

use majordomus_cli::intent_review::{ConditionState, GapCondition};
let c = GapCondition {
    criterion: "criteria-are-covered".into(),
    state: Some(ConditionState::Missing),
    state_text: "missing".into(),
    because: "nothing relates a criterion to an issue".into(),
    observations: vec!["no-serves-field".into()],
};
assert_eq!(c.state, Some(ConditionState::Missing));
assert!(!c.observations.is_empty());
vlastnosttyppovinnépopis
kritérium string ano Id kritéria záměru.
state ConditionState | null → ConditionState ne Stav, nebo None, když záznam uvádí stav, který tento modul nezná.
state_text string ano Tak, jak je napsáno, aby zjištění mohlo citovat neznámý stav.
protože string ano Why.
pozorování array of string ano Id pozorování, na nichž stojí.

Používá IntentPreflightGap

IntentBinding

object
K čemu je kus práce vázán: jeho postavení, co bylo jmenováno, úkoly a záměry, na které se rozřešil, s tím, co každý záměr po pracovníkovi chce, dva piny a každé odmítnutí.

use majordomus_cli::intent::Intents;
use majordomus_cli::intent_binding::{
    bind, BindingCause, BindingRequest, BindingStanding, IntentBinding,
};
use majordomus_cli::plan::Plan;
use majordomus_cli::policy::IntentPolicy;
#### let plan: Plan = serde_json::from_value(serde_json::json!({
####     "project": {"name": "p", "repository": "o/p", "default_branch": "master",
####                 "active_milestone": ""},
####     "statuses": {"issue": [], "milestone": []},
####     "milestones": [], "issues": [], "waves": [], "edges": [],
####     "milestone_edges": [], "findings": []})).unwrap();
let intents = Intents { intents: vec![], findings: vec![] };
let nothing: IntentBinding =
    bind(&intents, &plan, &[], &[], &IntentPolicy::default(), BindingRequest::default());
assert_eq!(nothing.standing, BindingStanding::Refused);
assert_eq!(nothing.refusals[0].cause, BindingCause::NothingNamed);
// nothing was reached, so there is nothing to pin
assert!(nothing.plan_revision.is_empty() && nothing.evidence_standing.is_empty());
vlastnosttyppovinnépopis
postavení BindingStanding → BindingStanding ano bound, maintenance, exempt nebo refused.
pojmenováno BindingRequest → BindingRequest ano Co worker jmenoval, ořezané: požadavek, na který tohle odpovídá.
výjimka BindingExemption | null → BindingExemption ne Přijatá výjimka, když je stav exempt.
úkoly pole IntentPreflightIssue → IntentPreflightIssue ano Úkoly, na které se práce vyhodnotila, každý s verdiktem preflightu.
intenty pole IntentPreflightIntent → IntentPreflightIntent ano Záměry, které práce obsluhuje, každý s obslouženými kritérii, jejich stavem důkazů, invarianty, kritikou a mezerou: čemu je pracovník zavázán.
governance array of string ano Správa těchto záměrů, každá položka jednou.
plan_revision string ano Připnutí toho, k čemu práce slouží; prázdné, když se k žádnému záměru nedošlo.
evidence_standing string ano Pin toho, kde stojí důkazy obsloužených kritérií; prázdný, pokud nebyl zasažen žádný záměr.
poznámky array of string ne Co by pracovník měl vědět a co žádná kontrola neodmítá.
odmítnutí pole BindingRefusal → BindingRefusal ano Každý důvod, proč byla vazba odmítnuta; prázdné, pokud stav není refused.
odmítnutí string | null ne Při odmítnutí: věta každého odmítnutí, spojené.

Používá intents.binding

IntentCoverage

object
Celé odvozené pokrytí: každé kritérium každého živého záměru, každý úkol s důvodem, proč existuje, a každý nález, který z obojího vzešel. Nic z toho se neukládá; odvozuje se při každém čtení ze záměrů a plánu.

use majordomus_cli::intent_plan::{IntentCoverage, IssueOrigin, IssuePurpose};
let coverage = IntentCoverage {
    criteria: vec![],
    issues: vec![IssuePurpose {
        issue: "I0007".into(),
        milestone: "ops".into(),
        origin: IssueOrigin::Maintenance,
        serves: vec![],
        intents: vec![],
    }],
    findings: vec![],
};
assert_eq!(coverage.failures(), 0);
assert_eq!(coverage.purpose("I0007").unwrap().origin, IssueOrigin::Maintenance);
vlastnosttyppovinnépopis
kritéria pole CriterionCoverage → CriterionCoverage ano Každé kritérium každého živého záměru, v pořadí záměru a pak deklarace.
úkoly pole IssuePurpose → IssuePurpose ano Každý úkol plánu v pořadí podle id, s důvodem, proč existuje.
zjištění pole IntentFinding → IntentFinding ano Každé zjištění v pořadí odvození.

Používá intents.coverage

IntentList

object
Každý záměr s jeho odvozenou fází a verdiktem a kolik jich je v každé: čím odpovídají majordomus intent list, GET /api/v1/intents i nástroj majordomus_intents, z jednoho odvození.

use majordomus_cli::capability::builtin::intents::IntentList;
let empty = IntentList {
    count: 0,
    stages: std::collections::BTreeMap::new(),
    verdicts: std::collections::BTreeMap::new(),
    intents: vec![],
};
// a repository that declares no intent answers the route, with nothing in it
assert_eq!(empty.count, 0);
vlastnosttyppovinnépopis
počet integer (uint) ano Kolik je záměrů.
fáze mapa celých čísel (uint) ano Kolik v každé fázi, podle slova fáze.
verdikty mapa celých čísel (uint) ano Kolik s jakým verdiktem, podle slova verdiktu.
intenty pole IntentView → IntentView ano Každý záměr, v pořadí identit.

Používá intents.list

IntentPreflight

object
Kterému záměru kus práce slouží, zda jde o údržbu, nebo proč nesmí pokračovat: úkoly, na které se převedla, s verdiktem u každého, každý dosažený záměr s odkazem, co ty záměry od pracovníka vyžadují a každé odmítnutí s příčinou.

use majordomus_cli::intent::{
    IntentPreflight, IntentPreflightCause, IntentPreflightRefusal, IntentPreflightVerdict,
};
let refused = IntentPreflight {
    verdict: IntentPreflightVerdict::Refused,
    issues: vec![],
    matches: vec![],
    intents: vec![],
    governance: vec![],
    refusals: vec![IntentPreflightRefusal::new(
        None,
        IntentPreflightCause::NoIssueCoversPaths,
        "no open issue's scope covers README.md".into(),
    )],
    refusal: Some("no open issue's scope covers README.md".into()),
};
assert_eq!(refused.verdict, IntentPreflightVerdict::Refused);
assert_eq!(refused.refusals[0].cause, IntentPreflightCause::NoIssueCoversPaths);
vlastnosttyppovinnépopis
verdikt IntentPreflightVerdict → IntentPreflightVerdict ano serves, maintenance nebo refused: odmítnuto, když je odmítnut kterýkoli úkol, jinak slouží, když kterýkoli úkol slouží záměru, jinak údržba.
úkoly pole IntentPreflightIssue → IntentPreflightIssue ano Úkoly, na které se práce převedla — jmenovaný, nebo otevřené úkoly, jejichž rozsah kryje cestu — každý s vlastním verdiktem.
shody pole IntentPreflightMatch → IntentPreflightMatch ano Každý záměr, kterému úkol slouží, s odkazem.
intenty pole IntentPreflightIntent → IntentPreflightIntent ano Záměry, kterým práce slouží, a žádné jiné, každý s tím, co žádá od pracovníka.
governance array of string ano Správa těchto záměrů, každý záznam jednou, v pořadí prvního výskytu.
odmítnutí pole IntentPreflightRefusal → IntentPreflightRefusal ano Každý důvod, proč preflight odmítl, v pořadí úkolů; prázdné, pokud verdikt není refused.
odmítnutí string | null ne Při odmítnutí: věta každého odmítnutí, spojené dohromady, pro čtenáře, který chce jeden řádek.

Používá intents.preflight

IntentPreflightCause

"unknown_issue" | "no_issue_covers_paths" | "issue_serves_nothing" | "serves_another_intent" | "serves_unknown_criterion" | "intent_not_critiqued" | "open_blocking_finding"
Proč preflight odmítl, jako slovo, které čtenář vyhledá grepem.

use majordomus_cli::intent::IntentPreflightCause;
assert_eq!(
    serde_json::to_string(&IntentPreflightCause::OpenBlockingFinding).unwrap(),
    "\"open_blocking_finding\""
);
assert_ne!(
    IntentPreflightCause::IntentNotCritiqued,
    IntentPreflightCause::IssueServesNothing
);
  • unknown_issueJmenovaný úkol není úkolem plánu.
  • no_issue_covers_pathsRozsah žádného otevřeného úkolu nepokrývá žádnou z cest.
  • issue_serves_nothingMilník úkolu realizuje živý záměr a úkol neslouží žádnému z jeho kritérií.
  • serves_another_intentÚkol slouží kritériu záměru, jehož milníky nezahrnují ten jeho.
  • serves_unknown_criterionÚkol slouží záměru nebo kritériu, které neexistuje, nebo tokenu, který není <intent>#<criterion>.
  • intent_not_critiquedZáměr, kterému úkol slouží, nemá kritiku: jeho plán nebyl nikdy posouzen.
  • open_blocking_findingKritika záměru, kterému úkol slouží, má stále otevřený blokující nález.

Používá IntentPreflightRefusal

IntentPreflightCritique

object
Kritika záměru tak, jak ji čte preflight: kde je, kdy a kým byl plán posouzen a blokující zjištění, která jsou stále otevřená.

use majordomus_cli::intent::IntentPreflightCritique;
let c = IntentPreflightCritique {
    source: ".ai/repo/project/critiques/x.yaml".into(),
    reviewed_at: "c3f20da".into(),
    reviewed_by: "another session".into(),
    open_blocking: vec![],
};
assert!(c.open_blocking.is_empty());
vlastnosttyppovinnépopis
zdroj string ano Cesta záznamu relativní k repozitáři.
reviewed_at string ano Commit, při kterém byl plán zrevidován.
reviewed_by string ano Kdo nebo co to zrecenzovalo.
open_blocking pole CritiqueFinding → CritiqueFinding ano Každé blokující zjištění, jehož řešení je open; práce nesmí začít, dokud nějaké je.

Používá IntentPreflightIntent

IntentPreflightGap

object
Zaznamenaná mezera záměru tak, jak ji čte preflight, omezená na kritéria, kterým práce slouží: co o každém bylo pozorováno, na kterém commitu, a rizika.

use majordomus_cli::intent::IntentPreflightGap;
let g = IntentPreflightGap {
    source: ".ai/repo/project/gaps/x.yaml".into(),
    observed_at: "c3f20da".into(),
    conditions: vec![],
    risks: vec!["the schema may refuse old records".into()],
};
assert_eq!(g.risks.len(), 1);
vlastnosttyppovinnépopis
zdroj string ano Cesta záznamu relativní k repozitáři.
observed_at string ano Commit, na kterém byla pozorování provedena.
podmínky pole GapCondition → GapCondition ano Odpověď mezery pro každé kritérium, které práce slouží, v pořadí mezery.
rizika array of string ano Rizika, která zaznamenal.

Používá IntentPreflightIntent

IntentPreflightIntent

object
Jeden intent, jemuž je práce podřízena, s tím, co worker potřebuje před dotykem: tvrzení, kritéria, kterým práce slouží, se živým stavem jejich důkazů, invarianty a non-goals, governance, kritika a mezera. Nesou se jen intenty, kterých se práce dotýká, nikdy každý intent.

use majordomus_cli::intent::{IntentPreflightIntent, IntentStage};
let i = IntentPreflightIntent {
    id: "x".into(),
    title: "X".into(),
    stage: IntentStage::Planned,
    statement: "It becomes true.".into(),
    criteria: vec![],
    invariants: vec![],
    non_goals: vec![],
    governance: vec![],
    critique: None,
    gap: None,
};
// no critique recorded is carried as an absence, never as an empty review
assert!(i.critique.is_none());
vlastnosttyppovinnépopis
id string ano Identita.
název string ano Jedna řádka.
fáze IntentStage → IntentStage ano Její odvozená fáze.
výrok string ano Co se musí stát pravdou.
kritéria pole IntentCriterion → IntentCriterion ano Kritéria, kterým práce slouží, každé se stavem svých důkazů nyní, v pořadí záměru.
invarianty array of string ano Co musí zůstat pravda.
non_goals array of string ano Co se záměrně nevyžaduje.
governance array of string ano Governance, kterou načte pracovník na tomto záměru.
kritika IntentPreflightCritique | null → IntentPreflightCritique ne Kritika jeho plánu; chybí, pokud nikdy nebyla zaznamenána.
mezera IntentPreflightGap | null → IntentPreflightGap ne Jeho zaznamenaná mezera, omezená na kritéria výše; chybí, když žádná nebyla zaznamenána.

Používá IntentBinding IntentPreflight

IntentPreflightIssue

object
Jeden úkol, na který se práce vyřešila, a co o něm preflight uzavřel.

use majordomus_cli::intent::{IntentPreflightIssue, IntentPreflightVerdict};
let i = IntentPreflightIssue {
    issue: "I0007".into(),
    milestone: "ops".into(),
    verdict: IntentPreflightVerdict::Maintenance,
    serves: vec![],
    intents: vec![],
};
// a milestone no intent names carries maintenance, which is not a refusal
assert_eq!(i.verdict, IntentPreflightVerdict::Maintenance);
vlastnosttyppovinnépopis
issue string ano Id úkolu.
milestone string ano Jeho milník.
verdikt IntentPreflightVerdict → IntentPreflightVerdict ano K čemu preflight o tomto úkolu dospěl.
slouží array of string ano Odkazy <intent>#<criterion>, které deklaruje, tak, jak jsou deklarovány.
intenty array of string ano Živé záměry, jejichž milníky zahrnují její milník, seřazené.

Používá IntentBinding IntentPreflight

IntentPreflightMatch

object
Jeden záměr, kterému práce slouží, a odkaz, který to říká: úkol ke kritériím, která deklaruje v serves, záměr každého kritéria jmenující milník úkolu.

use majordomus_cli::intent::{IntentPreflightMatch, IntentStage};
let m = IntentPreflightMatch {
    intent: "intent-lifecycle".into(),
    title: "Work is traceable to the intent it serves".into(),
    stage: IntentStage::Executing,
    milestone: "intent-lifecycle".into(),
    issue: "I1900".into(),
    criteria: vec!["stage-is-derived".into()],
};
assert_eq!(m.issue, "I1900");
vlastnosttyppovinnépopis
intent string ano Záměr.
název string ano Jeho název.
fáze IntentStage → IntentStage ano Její odvozená fáze.
milestone string ano Milník, který s ní práci spojuje.
issue string ano Úkol, který práci s tímto milníkem spojuje.
kritéria array of string ano Kritéria záměru, který úkol deklaruje, že mu slouží, v pořadí záměru.

Používá IntentPreflight

IntentPreflightRefusal

object
Jeden důvod, proč předběžná kontrola odmítla: který úkol, příčina a jedna věta o tom, co je špatně.

use majordomus_cli::intent::{IntentPreflightCause, IntentPreflightRefusal};
let r = IntentPreflightRefusal::new(
    Some("I1900"),
    IntentPreflightCause::IntentNotCritiqued,
    "intent x has no critique".into(),
);
assert_eq!(r.cause, IntentPreflightCause::IntentNotCritiqued);
assert_eq!(r.issue.as_deref(), Some("I1900"));
vlastnosttyppovinnépopis
issue string | null ne Úkol, o kterém je řeč; chybí, když nebyl vyřešen žádný úkol.
příčina IntentPreflightCause → IntentPreflightCause ano Příčina.
zpráva string ano Co je špatně, jednou větou.

Používá IntentPreflight

IntentPreflightVerdict

"serves" | "maintenance" | "refused"
K čemu preflight dospěl, o jednom úkolu nebo o celém kusu práce.

use majordomus_cli::intent::IntentPreflightVerdict;
// the words every surface answers with
assert_eq!(
    serde_json::to_string(&IntentPreflightVerdict::Maintenance).unwrap(),
    "\"maintenance\""
);
assert_ne!(IntentPreflightVerdict::Serves, IntentPreflightVerdict::Refused);
  • servesPráce slouží alespoň jednomu kritériu živého záměru, každý odkaz drží a plán každého záměru, kterému slouží, prošel kritikou bez otevřeného blokujícího zjištění.
  • maintenancePráce leží pod milníky, které nejmenuje žádný živý záměr, a neslouží žádnému kritériu živého záměru: provozní práce, povolená tam, kde ji majordomus intent validate povoluje.
  • refusedOdkaz chybí nebo ukazuje na nic, nebo záměr, kterému slouží, ještě nelze provést.

Používá IntentPreflight IntentPreflightIssue

IntentProposeInput

object
Vstup intents.propose: co se musí stát pravdou a volitelně jeho název a id.

Žádný milník, kritérium ani invariant: návrh říká, co se chce, a jeho plánování je samostatný akt (ADR 0144). Žádné časové razítko také ne: záznam se datuje, když se zapisuje.

use majordomus_cli::capability::builtin::intents::IntentProposeInput;
let i: IntentProposeInput =
    serde_json::from_str(r#"{"statement": "The UI answers within 100 ms warm"}"#).unwrap();
assert_eq!(i.title, None);
// a field the input does not have is refused, never ignored
assert!(serde_json::from_str::<IntentProposeInput>(r#"{"statement": "s", "stage": "x"}"#).is_err());
vlastnosttyppovinnépopis
výrok string ano Co se musí stát pravdou, slovy navrhovatele; uchováno doslova.
název string | null ne Jeden řádek, který ho pojmenovává; první řádek prohlášení, když chybí.
id string | null ne Identita a název souboru; slug titulku, když chybí.

Používá intents.propose

IntentValidation

object
Co model záměrů odmítá: zda je platný, kolik záměrů bylo prozkoumáno a každé zjištění s jeho úrovní. Varování se hlásí a model neznehodnocují.

use majordomus_cli::capability::builtin::intents::IntentValidation;
let v = IntentValidation {
    valid: true,
    intents: 2,
    failures: 0,
    warnings: 20,
    findings: vec![],
};
// twenty warnings and no failure is a valid model
assert!(v.valid);
vlastnosttyppovinnépopis
platné boolean ano Pravda, když žádný nález není selhání. Varování ji neučiní nepravdou.
intenty integer (uint) ano Kolik záměrů bylo zkoumáno.
selhání integer (uint) ano Kolik nálezů jsou selhání.
varování integer (uint) ano Kolik zjištění jsou varování.
zjištění pole IntentFinding → IntentFinding ano Každý nález.

Používá intents.validate

IssueOrigin

"intent" | "maintenance" | "unexplained"
Proč úkol existuje: protože slouží kritériu, protože je to údržba pod milníkem, který nepojmenovává žádný záměr, nebo protože to nikdo neřekl — což je selhání pod záměrem.

use majordomus_cli::intent_plan::IssueOrigin;
assert_eq!(serde_json::to_string(&IssueOrigin::Maintenance).unwrap(), "\"maintenance\"");
// work under no intent is legitimate and says so; it is never given an invented intent
assert_ne!(IssueOrigin::Maintenance, IssueOrigin::Unexplained);
  • intentSlouží alespoň jednomu kritériu deklarovaného záměru.
  • maintenanceJeho milník nejmenuje žádný záměr: údržbová nebo provozní práce, uvedená jako taková.
  • unexplainedJeho milník realizuje záměr, ale nejmenuje nic, čemu slouží.

Používá IssuePurpose

IssuePurpose

object
Odpověď na „proč tento úkol existuje?“: kritéria, kterým deklaruje, že slouží, záměry, jejichž milníky ho obsahují, a který ze tří původů z toho vychází.

use majordomus_cli::intent_plan::{IssueOrigin, IssuePurpose};
let purpose = IssuePurpose {
    issue: "I1901".into(),
    milestone: "intent-planning".into(),
    origin: IssueOrigin::Intent,
    serves: vec!["intent-planning#criteria-are-covered".into()],
    intents: vec!["intent-planning".into()],
};
assert_eq!(purpose.origin, IssueOrigin::Intent);
assert_eq!(purpose.serves.len(), 1);
vlastnosttyppovinnépopis
issue string ano Id úkolu.
milestone string ano Jeho milník.
původ IssueOrigin → IssueOrigin ano Jaký druh důvodu má.
slouží array of string ano Odkazy <intent>#<criterion>, které deklaruje, tak, jak jsou deklarovány.
intenty array of string ano Intenty, jejichž milníky zahrnují milník tohoto úkolu, seřazené.

Používá IntentCoverage

Navrženo

object
Co zapsal propose: identita, soubor a záznam tak, jak se nyní čte.

use majordomus_cli::intent::Proposed;
let p: Proposed = serde_json::from_str(
    r#"{"id": "fast-ui", "path": ".ai/repo/project/intents/fast-ui.yaml",
        "title": "Fast UI", "statement": "The UI answers at once"}"#,
)
.unwrap();
// the path is the identity under the intents directory: one answer to where it lives
assert_eq!(p.path, format!(".ai/repo/project/intents/{}.yaml", p.id));
vlastnosttyppovinnépopis
id string ano Identita, která je zároveň názvem souboru.
path string ano Cesta zapsaného záznamu relativní k repozitáři.
název string ano Jedna řádka.
výrok string ano Co se musí stát pravdou, tak jak to bylo zadáno.

Používá intents.propose

ResolutionState

"open" | "planned" | "rejected"
Jak byl vyřešen nález kritiky: zatím ne, plánováním práce, která záměru slouží, nebo jeho odmítnutím s důvodem. Blokující nález ponechaný Open provedení odmítne.

use majordomus_cli::intent_review::ResolutionState;
assert_eq!(serde_json::to_string(&ResolutionState::Planned).unwrap(), "\"planned\"");
assert_ne!(ResolutionState::Open, ResolutionState::Rejected);
  • openDosud nevyřešeno.
  • plannedNese ho úkol.
  • rejectedPosouzeno jako neplatné, s důvodem.

Používá CritiqueFinding

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