intents.propose
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ží.
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í
- module intents
- #intent
- #project
Zpřístupnění
Kde je tato jedna definice dosažitelná. Absence je explicitní: povrch, který není uveden, ji nenese.
| povrch | jako |
|---|---|
| MCP | nástroj majordomus_intent_propose |
| HTTP | POST /api/v1/intents/propose operationId intents.propose |
| příkazová řádka | majordomus intent propose |
Schémata
Kanonický vstup a výstup z typů Rustu; schéma nástroje MCP a parametry a odpovědi OpenAPI se odvozují z nich.
vstup · IntentProposeInput
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());| vlastnost | typ | povinné | popis |
|---|---|---|---|
| id | string | null | ne | Identita a název souboru; slug titulku, když chybí. |
| 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í. |
JSON Schema
{
"additionalProperties": false,
"description": "The input of `intents.propose`: what must become true, and optionally its title and id.\n\nNo milestone, criterion or invariant: a proposal says what is wanted, and planning it is a\nseparate act (ADR 0144). No timestamp either: the record is dated when it is written.\n\n```\nuse majordomus_cli::capability::builtin::intents::IntentProposeInput;\nlet i: IntentProposeInput =\n serde_json::from_str(r#\"{\"statement\": \"The UI answers within 100 ms warm\"}\"#).unwrap();\nassert_eq!(i.title, None);\n// a field the input does not have is refused, never ignored\nassert!(serde_json::from_str::<IntentProposeInput>(r#\"{\"statement\": \"s\", \"stage\": \"x\"}\"#).is_err());\n```",
"properties": {
"id": {
"description": "The identity and file name; the title's slug when absent.",
"type": [
"string",
"null"
]
},
"statement": {
"description": "What must become true, in the proposer's words; kept verbatim.",
"type": "string"
},
"title": {
"description": "One line naming it; the statement's first line when absent.",
"type": [
"string",
"null"
]
}
},
"required": [
"statement"
],
"title": "IntentProposeInput",
"type": "object"
}výstup · Proposed
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));| vlastnost | typ | povinné | popis |
|---|---|---|---|
| id | string | ano | Identita, která je zároveň názvem souboru. |
| path | string | ano | Cesta zapsaného záznamu relativní k repozitáři. |
| výrok | string | ano | Co se musí stát pravdou, tak jak to bylo zadáno. |
| název | string | ano | Jedna řádka. |
JSON Schema
{
"description": "What `propose` wrote: the identity, the file, and the record as it now reads.\n\n```\nuse majordomus_cli::intent::Proposed;\nlet p: Proposed = serde_json::from_str(\n r#\"{\"id\": \"fast-ui\", \"path\": \".ai/repo/project/intents/fast-ui.yaml\",\n \"title\": \"Fast UI\", \"statement\": \"The UI answers at once\"}\"#,\n)\n.unwrap();\n// the path is the identity under the intents directory: one answer to where it lives\nassert_eq!(p.path, format!(\".ai/repo/project/intents/{}.yaml\", p.id));\n```",
"properties": {
"id": {
"description": "The identity, which is also the file name.",
"type": "string"
},
"path": {
"description": "Repository-relative path of the record written.",
"type": "string"
},
"statement": {
"description": "What must become true, as it was given.",
"type": "string"
},
"title": {
"description": "One line.",
"type": "string"
}
},
"required": [
"id",
"path",
"title",
"statement"
],
"title": "Proposed",
"type": "object"
}Politiky
- benchmark
- waived — prominuto: destructive
- cache
- vypnuto — každé volání spustí handler
Cíle benchmarku
Odvozeno z registru pro tento repozitář: jeden požadavek na transport a případy, které poskytuje typ vstupu. Celá matice je na stránce měření výkonu.
| transport | state | případy | targets |
|---|---|---|---|
| direct | prominuto (destruktivní) | 0 | |
| mcp | prominuto (destruktivní) | 0 | |
| http | prominuto (destruktivní) | 0 |