Skip to content

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.

surfaceas
MCPtool majordomus_plan_roadmap
HTTPGET /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.

propertytyperequireddescription
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.

transportstatecasestargets
directcovered1default
mcpcovered1default
httpcovered1default