plan.roadmap
The milestone graph laid out by rank, with `order` breaking ties inside a rank only, and the first unblocked unfinished milestone as `now` and the one after it as `next`. Nothing in the sequence is authored: a milestone whose prerequisites are not real cannot be nominated, which is what makes `each step is gated by the previous one being real` an invariant rather than a sentence.
The milestone graph laid out by rank, with `order` breaking ties inside a rank only, and the first unblocked unfinished milestone as `now` and the one after it as `next`. Nothing in the sequence is authored: a milestone whose prerequisites are not real cannot be nominated, which is what makes `each step is gated by the previous one being real` an invariant rather than a sentence.
- query
- behaviorally_verified
- module plan
- #plan
- #project
- #roadmap
Exposure
Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.
| surface | as |
|---|---|
| MCP | tool majordomus_plan_roadmap |
| HTTP | GET /api/v1/plan/roadmap operationId plan.roadmap |
| command line | — |
Schemas
The canonical input and output, from the Rust types; the MCP tool schema and the OpenAPI parameters and responses are derived from these.
input · Empty
No input.
No properties: the capability takes no input.
JSON Schema
{
"additionalProperties": false,
"description": "No input.",
"title": "Empty",
"type": "object"
}output · PlanRoadmap
The milestones in derived order, with the one being executed and the one after it.
| property | type | required | description |
|---|---|---|---|
| milestones | array | yes | The milestones ordered by rank, then order, then id. The sequence is derived from the milestone graph; no list of versions is maintained anywhere. |
| next | string | null | no | The one after it, blocked or not. |
| now | string | null | no | The first unfinished, unblocked milestone in that sequence. |
JSON Schema
{
"$defs": {
"PlanCounts": {
"description": "A milestone's issues counted: the two denominators, then one entry per declared status.",
"properties": {
"by_status": {
"additionalProperties": {
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"description": "One entry per declared issue status, keyed by the vocabulary.",
"type": "object"
},
"required": {
"description": "The denominator the milestone's own status derivation uses: total less cancelled, so\nno surface prints \"n of total\" for a milestone the engine calls DONE.",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"total": {
"description": "Every issue naming this milestone.",
"format": "uint32",
"minimum": 0,
"type": "integer"
}
},
"required": [
"total",
"required",
"by_status"
],
"type": "object"
},
"PlanMilestone": {
"description": "One milestone, as its record declares it and as the two graphs derive it.",
"properties": {
"blocked_by": {
"description": "Those of them that are not DONE. Non-empty means the gate holds every issue of this\nmilestone back, whatever the issue graph says.",
"items": {
"type": "string"
},
"type": "array"
},
"claims": {
"description": "The claims of the repository this outcome makes true.",
"items": {
"type": "string"
},
"type": "array"
},
"counts": {
"$ref": "#/$defs/PlanCounts",
"description": "Its issues, counted by derived status."
},
"dependents": {
"description": "The milestones that require it.",
"items": {
"type": "string"
},
"type": "array"
},
"depends_on": {
"description": "The milestones it requires.",
"items": {
"type": "string"
},
"type": "array"
},
"id": {
"description": "The identity, which is also the file name; a stable slug, never a version.",
"type": "string"
},
"issues": {
"description": "Its issues, in id order.",
"items": {
"type": "string"
},
"type": "array"
},
"order": {
"description": "Tie-break inside one rank; the roadmap is ordered by rank first.",
"format": "int64",
"type": "integer"
},
"outcome": {
"description": "One line: what is true once the milestone is real.",
"type": "string"
},
"priority": {
"description": "`p0` … `p3`.",
"type": "string"
},
"rank": {
"description": "Its layer in the milestone graph: what orders the roadmap.",
"format": "uint32",
"minimum": 0,
"type": "integer"
},
"slug": {
"description": "The slug, when the record carries one.",
"type": "string"
},
"status": {
"description": "The derived status.",
"type": "string"
},
"title": {
"description": "One line naming the outcome.",
"type": "string"
},
"version": {
"description": "The release the milestone belongs to, when it declares one.",
"type": "string"
}
},
"required": [
"id",
"status",
"order",
"priority",
"title",
"slug",
"version",
"rank",
"depends_on",
"blocked_by",
"dependents",
"claims",
"counts",
"issues",
"outcome"
],
"type": "object"
}
},
"description": "The milestones in derived order, with the one being executed and the one after it.",
"properties": {
"milestones": {
"description": "The milestones ordered by rank, then order, then id. The sequence is derived from\nthe milestone graph; no list of versions is maintained anywhere.",
"items": {
"$ref": "#/$defs/PlanMilestone"
},
"type": "array"
},
"next": {
"description": "The one after it, blocked or not.",
"type": [
"string",
"null"
]
},
"now": {
"description": "The first unfinished, unblocked milestone in that sequence.",
"type": [
"string",
"null"
]
}
},
"required": [
"milestones"
],
"title": "PlanRoadmap",
"type": "object"
}Policies
- benchmark
- required — a target on every transport the exposure declares; the cases are the input type's
- cache
- disabled — every call runs the handler
Benchmark targets
Derived from the registry for this repository: one requirement per transport, and the cases the input type provides. The whole matrix is on the benchmarks page.