Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

plan.roadmap

The milestones in derived order

What it is

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.

Descriptor

Canonical id
plan.roadmap
Module
plan
Kind
query
Stability
behaviorallyverified
Provenance
declaredcached
Source
apps/majordomus-cli/src/capability/builtin/plan.rs
Cache
process, 4 entries, per generation
Benchmark
required
Tags
planprojectroadmap

Run

query
A query. It reads and changes nothing.

This capability takes no input.

GET /api/v1/plan/roadmap

Projections

InterfaceAsWhere
MCP toolmajordomus_plan_roadmap-
MCP resourcenot exposed-
HTTPGET /api/v1/plan/roadmapSwagger
Command linenot exposed-

Schemas

Input · Empty
{
  "type": "object",
  "additionalProperties": false,
  "description": "No input.",
  "title": "Empty"
}
Output · PlanRoadmap
{
  "type": "object",
  "properties": {
    "milestones": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PlanMilestone"
      },
      "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."
    },
    "now": {
      "type": [
        "string",
        "null"
      ],
      "description": "The first unfinished, unblocked milestone in that sequence."
    },
    "next": {
      "type": [
        "string",
        "null"
      ],
      "description": "The one after it, blocked or not."
    }
  },
  "required": [
    "milestones"
  ],
  "description": "The milestones in derived order, with the one being executed and the one after it.",
  "title": "PlanRoadmap",
  "$defs": {
    "PlanMilestone": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The identity, which is also the file name; a stable slug, never a version."
        },
        "status": {
          "type": "string",
          "description": "The derived status."
        },
        "order": {
          "type": "integer",
          "format": "int64",
          "description": "Tie-break inside one rank; the roadmap is ordered by rank first."
        },
        "priority": {
          "type": "string",
          "description": "`p0` … `p3`."
        },
        "title": {
          "type": "string",
          "description": "One line naming the outcome."
        },
        "slug": {
          "type": "string",
          "description": "The slug, when the record carries one."
        },
        "version": {
          "type": "string",
          "description": "The release the milestone belongs to, when it declares one."
        },
        "rank": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0,
          "description": "Its layer in the milestone graph: what orders the roadmap."
        },
        "depends_on": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The milestones it requires."
        },
        "blocked_by": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "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."
        },
        "dependents": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The milestones that require it."
        },
        "claims": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The claims of the repository this outcome makes true."
        },
        "counts": {
          "$ref": "#/$defs/PlanCounts",
          "description": "Its issues, counted by derived status."
        },
        "issues": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Its issues, in id order."
        },
        "outcome": {
          "type": "string",
          "description": "One line: what is true once the milestone is real."
        }
      },
      "required": [
        "id",
        "status",
        "order",
        "priority",
        "title",
        "slug",
        "version",
        "rank",
        "depends_on",
        "blocked_by",
        "dependents",
        "claims",
        "counts",
        "issues",
        "outcome"
      ],
      "description": "One milestone, as its record declares it and as the two graphs derive it."
    },
    "PlanCounts": {
      "type": "object",
      "properties": {
        "total": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0,
          "description": "Every issue naming this milestone."
        },
        "required": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0,
          "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."
        },
        "by_status": {
          "type": "object",
          "additionalProperties": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0
          },
          "description": "One entry per declared issue status, keyed by the vocabulary."
        }
      },
      "required": [
        "total",
        "required",
        "by_status"
      ],
      "description": "A milestone's issues counted: the two denominators, then one entry per declared status."
    }
  }
}

Examples

These are the capability's own benchmark cases: the same inputs the benchmark runs and the OpenAPI document shows.

default
{}