plan.delivery
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.
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í
- modul plan
- #plan
- #project
- #delivery
- #git
- #provenance
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_plan_delivery |
| HTTP | GET /api/v1/plan/delivery operationId plan.delivery |
| příkazová řádka | majordomus plan delivery |
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 · PlanDeliveryInput
plan.delivery.
Obě pole jsou volitelná a neznámé pole se odmítne, ne ignoruje, takže volající, který udělá překlep v at, nedostane tiše odpověď naživo.
use majordomus_cli::capability::builtin::plan::PlanDeliveryInput;
let every: PlanDeliveryInput = serde_json::from_str("{}").unwrap();
assert!(every.issue.is_none() && every.at.is_none(), "live, every issue");
let one: PlanDeliveryInput =
serde_json::from_value(serde_json::json!({ "issue": "I2740", "at": "HEAD" })).unwrap();
assert_eq!((one.issue.as_deref(), one.at.as_deref()), (Some("I2740"), Some("HEAD")));
assert!(serde_json::from_str::<PlanDeliveryInput>(r#"{"commit":"HEAD"}"#).is_err());| vlastnost | typ | povinné | popis |
|---|---|---|---|
| v | string | null | ne | Pozorovat k tomuto commitu (HEAD, sha, ref): jeho historie a záznamy releasů stromu, nic živého — žádná větev, forge, nasazení ani hodiny. Výchozí: živě. |
| issue | string | null | ne | Jedno id úkolu (I2740). Výchozí: každý úkol plánu. Id, které plán nedeklaruje, se nenajde, nikdy se neodpoví jako none. |
JSON Schema
{
"additionalProperties": false,
"description": "Which issues, and as of when: the input of `plan.delivery`.\n\nBoth fields are optional, and an unknown one is refused rather than ignored, so a caller\nwho misspells `at` is not silently answered live.\n\n```\nuse majordomus_cli::capability::builtin::plan::PlanDeliveryInput;\n\nlet every: PlanDeliveryInput = serde_json::from_str(\"{}\").unwrap();\nassert!(every.issue.is_none() && every.at.is_none(), \"live, every issue\");\nlet one: PlanDeliveryInput =\n serde_json::from_value(serde_json::json!({ \"issue\": \"I2740\", \"at\": \"HEAD\" })).unwrap();\nassert_eq!((one.issue.as_deref(), one.at.as_deref()), (Some(\"I2740\"), Some(\"HEAD\")));\nassert!(serde_json::from_str::<PlanDeliveryInput>(r#\"{\"commit\":\"HEAD\"}\"#).is_err());\n```",
"properties": {
"at": {
"description": "Observe as of this commit (`HEAD`, a sha, a ref): its history and the tree's release\nrecords, and nothing live — no branch, forge, deployment or clock. Default: live.",
"type": [
"string",
"null"
]
},
"issue": {
"description": "One issue id (`I2740`). Default: every issue of the plan. An id the plan does not\ndeclare is not found, never answered as `none`.",
"type": [
"string",
"null"
]
}
},
"title": "PlanDeliveryInput",
"type": "object"
}výstup · IssueDeliveryReport
| vlastnost | typ | povinné | popis |
|---|---|---|---|
| úkoly | array | ano | Úkoly v pořadí podle id. |
| pozorováno | reference | ano | Kde a kdy. |
| schema | integer | ano | Verze tohoto tvaru. |
| zdroje | array | ano | Každý zdroj, přečtený i nepřečtený. |
| fáze | array | ano | Slovník fází, v pořadí. |
| součty | object | ano | Kolik úkolů je v které fázi, podle každé fáze slovníku. |
| nevyřešeno | integer | ano | Kolik úkolů mohl nepřečtený zdroj posunout dál. |
JSON Schema
{
"$defs": {
"DeliveryBranch": {
"description": "A branch that names the issue.",
"properties": {
"head": {
"description": "The commit it points at.",
"type": "string"
},
"name": {
"description": "The ref, short: `feature/x`, or `origin/feature/x` for a remote-tracking one.",
"type": "string"
},
"observed_at": {
"description": "When the refs were read.",
"type": "string"
},
"remote": {
"description": "True for a remote-tracking ref.",
"type": "boolean"
},
"via": {
"description": "How the name names the issue: `id` or `slug`.",
"type": "string"
}
},
"required": [
"name",
"head",
"remote",
"via",
"observed_at"
],
"type": "object"
},
"DeliveryDeployment": {
"description": "The published release pointer that covers the issue's release.",
"properties": {
"latest_json": {
"description": "Where that `latest.json` was read: `<commit>:site/static/releases/latest.json`, the\ncommit the observed Pages deployment published.",
"type": "string"
},
"observed_at": {
"description": "When the publication was observed.",
"type": "string"
},
"version": {
"description": "The version `latest.json` names.",
"type": "string"
}
},
"required": [
"version",
"latest_json",
"observed_at"
],
"type": "object"
},
"DeliveryMerge": {
"description": "The newest commit in the trunk's history that names the issue: a merge, by its pull\nrequest's title or its branch, or a commit whose subject names it the way this\nrepository's commits do (`type(scope): description (I2740)`).",
"properties": {
"branch": {
"description": "The branch it merged, when its subject names one.",
"type": [
"string",
"null"
]
},
"commit": {
"description": "The commit: a merge commit, or a commit whose subject names the issue.",
"type": "string"
},
"merged_at": {
"description": "When it was committed, RFC 3339.",
"type": "string"
},
"merges": {
"description": "How many commits in the history name the issue; this one is the newest.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"observed_at": {
"description": "When the history was read.",
"type": "string"
},
"pull_request": {
"description": "The pull request it merged, when its subject names one.",
"format": "uint64",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"title": {
"description": "The pull request's title, when the merge carries one, or the commit's subject.",
"type": [
"string",
"null"
]
},
"via": {
"description": "How it names the issue: `title_or_branch` or `slug` for a merge, `subject` for a\ncommit, `forge_title` for a merged pull request's title as the forge recorded it.",
"type": "string"
}
},
"required": [
"commit",
"via",
"merged_at",
"merges",
"observed_at"
],
"type": "object"
},
"DeliveryObservation": {
"description": "Where and when the answer was observed.",
"properties": {
"commit": {
"description": "The commit that history ends at.",
"type": "string"
},
"mode": {
"description": "`live`, or `at` a named commit.",
"type": "string"
},
"observed_at": {
"description": "When: the clock in live mode, the commit's committer time at a commit.",
"type": "string"
},
"trunk": {
"description": "The history read: the trunk ref in live mode, the commit asked for otherwise.",
"type": "string"
}
},
"required": [
"mode",
"trunk",
"commit",
"observed_at"
],
"type": "object"
},
"DeliveryPullRequest": {
"description": "An open pull request that names the issue.",
"properties": {
"draft": {
"description": "True for a draft.",
"type": "boolean"
},
"head_ref": {
"description": "The branch it asks to merge.",
"type": "string"
},
"number": {
"description": "The number.",
"format": "uint64",
"minimum": 0,
"type": "integer"
},
"observed_at": {
"description": "When the forge was observed.",
"type": "string"
},
"title": {
"description": "The title.",
"type": "string"
},
"via": {
"description": "How it names the issue: `title_or_branch` or `slug`.",
"type": "string"
}
},
"required": [
"number",
"title",
"head_ref",
"draft",
"via",
"observed_at"
],
"type": "object"
},
"DeliveryReading": {
"description": "Whether one source of the answer was read.",
"oneOf": [
{
"const": "read",
"description": "It was read; what it holds is in the answer.",
"type": "string"
},
{
"const": "unread",
"description": "It was not read, and `reason` says why. Nothing it could have proved is claimed or\ndenied.",
"type": "string"
}
]
},
"DeliveryRelease": {
"description": "The first release that contains the issue's newest merge.",
"properties": {
"commit": {
"description": "The commit the tag names.",
"type": "string"
},
"observed_at": {
"description": "When the releases were read.",
"type": "string"
},
"tag": {
"description": "The tag: `v0.27.0`.",
"type": "string"
}
},
"required": [
"tag",
"commit",
"observed_at"
],
"type": "object"
},
"DeliverySource": {
"description": "One source the answer is built from, and whether it was read.",
"properties": {
"detail": {
"description": "What was read, or why nothing was: the ref, the file, the command that would record\nit.",
"type": "string"
},
"name": {
"description": "`branches`, `forge`, `history`, `releases` or `publication`.",
"type": "string"
},
"observed_at": {
"description": "When what was read was observed, RFC 3339, when it was read.",
"type": [
"string",
"null"
]
},
"state": {
"$ref": "#/$defs/DeliveryReading",
"description": "Read or unread."
}
},
"required": [
"name",
"state",
"detail"
],
"type": "object"
},
"DeliveryStage": {
"description": "How far one issue's work has travelled, in order: each stage implies every one before it\nhas been passed through, so the furthest one proved is the issue's stage.",
"oneOf": [
{
"const": "none",
"description": "Nothing that was read names the issue.",
"type": "string"
},
{
"const": "branch",
"description": "A branch names it.",
"type": "string"
},
{
"const": "pr_open",
"description": "An open pull request names it.",
"type": "string"
},
{
"const": "merged",
"description": "A merge in the trunk's history names it.",
"type": "string"
},
{
"const": "released",
"description": "A `v*` release contains its newest merge.",
"type": "string"
},
{
"const": "deployed",
"description": "The published `latest.json` names that release or a later one.",
"type": "string"
}
]
},
"IssueDelivery": {
"description": "One issue's delivery.",
"properties": {
"branch": {
"anyOf": [
{
"$ref": "#/$defs/DeliveryBranch"
},
{
"type": "null"
}
],
"description": "The branch that names it, local first."
},
"deployed": {
"anyOf": [
{
"$ref": "#/$defs/DeliveryDeployment"
},
{
"type": "null"
}
],
"description": "The publication that covers that release."
},
"issue": {
"description": "The issue id.",
"type": "string"
},
"merged": {
"anyOf": [
{
"$ref": "#/$defs/DeliveryMerge"
},
{
"type": "null"
}
],
"description": "The newest merge that names it."
},
"milestone": {
"description": "Its milestone.",
"type": "string"
},
"pr_open": {
"anyOf": [
{
"$ref": "#/$defs/DeliveryPullRequest"
},
{
"type": "null"
}
],
"description": "The open pull request that names it, newest first."
},
"released": {
"anyOf": [
{
"$ref": "#/$defs/DeliveryRelease"
},
{
"type": "null"
}
],
"description": "The first release containing that merge."
},
"settled": {
"description": "True when no unread source could have proved a further stage.",
"type": "boolean"
},
"stage": {
"$ref": "#/$defs/DeliveryStage",
"description": "The furthest stage proved."
},
"status": {
"description": "Its declared status, as the plan derives it from the stamps: the other half of the\ncomparison this answer exists for.",
"type": "string"
},
"title": {
"description": "Its title.",
"type": "string"
},
"unread": {
"description": "The sources that were not read and could have proved a further stage.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"issue",
"title",
"milestone",
"status",
"stage",
"settled",
"unread"
],
"type": "object"
}
},
"description": "Every issue's delivery, with what it was read from.",
"properties": {
"issues": {
"description": "The issues, in id order.",
"items": {
"$ref": "#/$defs/IssueDelivery"
},
"type": "array"
},
"observed": {
"$ref": "#/$defs/DeliveryObservation",
"description": "Where and when."
},
"schema": {
"description": "The version of this shape.",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"sources": {
"description": "Every source, read or not.",
"items": {
"$ref": "#/$defs/DeliverySource"
},
"type": "array"
},
"stages": {
"description": "The stage vocabulary, in order.",
"items": {
"$ref": "#/$defs/DeliveryStage"
},
"type": "array"
},
"tallies": {
"additionalProperties": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"description": "How many issues are at each stage, keyed by every stage of the vocabulary.",
"type": "object"
},
"unsettled": {
"description": "How many issues an unread source could have moved further.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"schema",
"observed",
"stages",
"sources",
"tallies",
"unsettled",
"issues"
],
"title": "IssueDeliveryReport",
"type": "object"
}Politiky
- benchmark
- povinné — cíl na každém transportu, který expozice deklaruje; případy jsou ty ze vstupního typu
- 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 | pokryto | 2 | every-issue one-issue-at-head |
| mcp | pokryto | 2 | every-issue one-issue-at-head |
| http | pokryto | 2 | every-issue one-issue-at-head |