Skip to content

plan.status

Every milestone with its derived status and its issues counted by status, the milestone a worker is executing now, the next ready issue in full, and the plan's own totals. The counts are keyed by the declared vocabulary, which travels with the answer, so a status added to the engine appears here without anything being edited.

Every milestone with its derived status and its issues counted by status, the milestone a worker is executing now, the next ready issue in full, and the plan's own totals. The counts are keyed by the declared vocabulary, which travels with the answer, so a status added to the engine appears here without anything being edited.

  • query
  • behaviorally_verified
  • module plan
  • #plan
  • #project
  • #status

Exposure

Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.

surfaceas
MCPtool majordomus_plan_status
HTTPGET /api/v1/plan/status operationId plan.status
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 · PlanMilestoneFilter

Which part of the plan to answer about.

propertytyperequireddescription
milestone string | null no Restrict the answer to one milestone. Default: the whole plan, and for `next` the active milestone with the rest of the plan as the fallback.
JSON Schema
{
  "additionalProperties": false,
  "description": "Which part of the plan to answer about.",
  "properties": {
    "milestone": {
      "description": "Restrict the answer to one milestone. Default: the whole plan, and for `next` the\nactive milestone with the rest of the plan as the fallback.",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "title": "PlanMilestoneFilter",
  "type": "object"
}

output · PlanStatusReport

Where the plan stands: every milestone's progress, the milestone being executed, and the one issue to take next.

propertytyperequireddescription
counts reference yes Every issue of the plan, counted by derived status.
milestones array yes Every milestone, in id order.
next_ready one of 2 no The next ready issue, when there is one.
project reference yes The plan's header, with the active milestone derived.
statuses reference yes The declared status vocabularies.
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"
    },
    "PlanIssue": {
      "description": "One issue, as its record declares it and as the graph derives it.",
      "properties": {
        "blocked_by": {
          "description": "The dependencies that are not DONE, plus `milestone:<id>` when the milestone gate\nholds the whole outcome back.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "completed_at": {
          "description": "When completion was recorded.",
          "type": "string"
        },
        "dependents": {
          "description": "The issues that depend on this one.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "depends_on": {
          "description": "Every issue it declares a dependency on, as declared — including one that does not\nexist, which is a finding rather than a silent omission.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "evidence_have": {
          "description": "Evidence entries attached.",
          "format": "uint32",
          "minimum": 0,
          "type": "integer"
        },
        "evidence_need": {
          "description": "Evidence tokens the record requires before it may be DONE.",
          "format": "uint32",
          "minimum": 0,
          "type": "integer"
        },
        "id": {
          "description": "The identity, which is also the file name.",
          "type": "string"
        },
        "milestone": {
          "description": "The milestone it belongs to.",
          "type": "string"
        },
        "objective": {
          "description": "One line: what the issue is for.",
          "type": "string"
        },
        "parallel_safe": {
          "description": "Whether it may run beside another issue of its wave.",
          "type": "boolean"
        },
        "priority": {
          "description": "`p0` … `p3`.",
          "type": "string"
        },
        "profile": {
          "description": "The execution profile the issue is worked under.",
          "type": "string"
        },
        "scope": {
          "description": "The paths it touches; two issues of one wave that share a path are serialised.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "slug": {
          "description": "The slug, when the record carries one.",
          "type": "string"
        },
        "started_at": {
          "description": "When execution began, when it did.",
          "type": "string"
        },
        "status": {
          "description": "The derived status. Never stored: an issue records what happened to it and the\nstatus follows from that and from the state of its dependencies.",
          "type": "string"
        },
        "title": {
          "description": "One line naming the outcome.",
          "type": "string"
        },
        "verified_at": {
          "description": "When implementation was declared complete.",
          "type": "string"
        },
        "wave": {
          "description": "The execution wave: one past the longest path to it through the dependency graph.",
          "format": "uint32",
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "id",
        "milestone",
        "status",
        "wave",
        "priority",
        "profile",
        "parallel_safe",
        "title",
        "slug",
        "depends_on",
        "blocked_by",
        "dependents",
        "scope",
        "objective",
        "evidence_have",
        "evidence_need",
        "started_at",
        "verified_at",
        "completed_at"
      ],
      "type": "object"
    },
    "PlanMilestoneProgress": {
      "description": "One milestone's progress, without its prose.",
      "properties": {
        "counts": {
          "$ref": "#/$defs/PlanCounts",
          "description": "Its issues, counted by derived status."
        },
        "id": {
          "description": "The identity.",
          "type": "string"
        },
        "status": {
          "description": "The derived status.",
          "type": "string"
        },
        "title": {
          "description": "One line naming the outcome.",
          "type": "string"
        }
      },
      "required": [
        "id",
        "status",
        "title",
        "counts"
      ],
      "type": "object"
    },
    "PlanProject": {
      "description": "The plan's header: what this repository is, plus the one field nobody authors.",
      "properties": {
        "active_milestone": {
          "description": "The milestone a worker is executing now: the lowest-ranked unblocked milestone that\nis ACTIVE, else the lowest-ranked unblocked one not finished. Derived on every read,\nstored nowhere, and never authored — the plan cannot nominate a milestone whose\nprerequisites are not real.",
          "type": "string"
        },
        "default_branch": {
          "description": "The branch the plan is executed on.",
          "type": "string"
        },
        "name": {
          "description": "The project's name, from `project.yaml`.",
          "type": "string"
        },
        "repository": {
          "description": "The repository it belongs to, `owner/name`.",
          "type": "string"
        }
      },
      "required": [
        "name",
        "repository",
        "default_branch",
        "active_milestone"
      ],
      "type": "object"
    },
    "PlanVocabulary": {
      "description": "The status vocabularies, so a reader never has to know which statuses exist.",
      "properties": {
        "issue": {
          "description": "The issue statuses, in derivation order.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "milestone": {
          "description": "The milestone statuses, in derivation order.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "issue",
        "milestone"
      ],
      "type": "object"
    }
  },
  "description": "Where the plan stands: every milestone's progress, the milestone being executed, and the\none issue to take next.",
  "properties": {
    "counts": {
      "$ref": "#/$defs/PlanCounts",
      "description": "Every issue of the plan, counted by derived status."
    },
    "milestones": {
      "description": "Every milestone, in id order.",
      "items": {
        "$ref": "#/$defs/PlanMilestoneProgress"
      },
      "type": "array"
    },
    "next_ready": {
      "anyOf": [
        {
          "$ref": "#/$defs/PlanIssue"
        },
        {
          "type": "null"
        }
      ],
      "description": "The next ready issue, when there is one."
    },
    "project": {
      "$ref": "#/$defs/PlanProject",
      "description": "The plan's header, with the active milestone derived."
    },
    "statuses": {
      "$ref": "#/$defs/PlanVocabulary",
      "description": "The declared status vocabularies."
    }
  },
  "required": [
    "project",
    "statuses",
    "milestones",
    "counts"
  ],
  "title": "PlanStatusReport",
  "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
directcovered2whole-plan
one-milestone
mcpcovered2whole-plan
one-milestone
httpcovered2whole-plan
one-milestone