Skip to content

plan.record

A milestone with its issues in full, or an issue with the issues it waits on in full. The record's own prose stays where it has always been — `majordomus://issue/<id>` returns the file — and this answers what the file cannot say about itself: what its status is, where it sits in the graph, and what is between it and being executable.

A milestone with its issues in full, or an issue with the issues it waits on in full. The record's own prose stays where it has always been — `majordomus://issue/<id>` returns the file — and this answers what the file cannot say about itself: what its status is, where it sits in the graph, and what is between it and being executable.

  • query
  • behaviorally_verified
  • module plan
  • #plan
  • #project
  • #issues
  • #milestones

Exposure

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

surfaceas
MCPtool majordomus_plan_record
HTTPGET /api/v1/plan/record operationId plan.record
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 · PlanRecordInput

One record of the plan.
propertytyperequireddescription
id string yes The id of a milestone or an issue, as its file is named (I0001, work-graph-github).
JSON Schema
{
  "additionalProperties": false,
  "description": "One record of the plan.",
  "properties": {
    "id": {
      "description": "The id of a milestone or an issue, as its file is named (`I0001`, `work-graph-github`).",
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "title": "PlanRecordInput",
  "type": "object"
}

output · PlanRecord

One record of the plan, milestone or issue, with everything derived about it.

No properties.

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"
        },
        "serves": {
          "description": "The intent criteria it exists to make true, each `<intent>#<criterion>`, as declared.\nEmpty for maintenance work under a milestone no intent names; whether a named\ncriterion exists is the intent coverage's question, not the plan's.",
          "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",
        "serves",
        "objective",
        "evidence_have",
        "evidence_need",
        "started_at",
        "verified_at",
        "completed_at"
      ],
      "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"
        },
        "last_accepted": {
          "description": "The last accepted issue of a DONE milestone: its DONE issue with the latest\n`completed_at`, the greater id on a tie. Empty for a milestone that is not DONE, or\nthat is DONE with no issue (its evidence finished it). Which release carried it is\n`released_in`'s to answer.",
          "type": "string"
        },
        "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"
        },
        "released_in": {
          "description": "The release that carried the milestone — the first release record whose commit\ncontains the merge of its last accepted issue (or, with no issue, the commit that\nrecorded its latest evidence), else `unreleased` — when the reader\nasked for it\n(`released_in`); the roadmap always does. Never a typed field (ADR 0166).",
          "type": [
            "string",
            "null"
          ]
        },
        "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"
        }
      },
      "required": [
        "id",
        "status",
        "order",
        "priority",
        "title",
        "slug",
        "rank",
        "depends_on",
        "blocked_by",
        "dependents",
        "claims",
        "counts",
        "issues",
        "outcome"
      ],
      "type": "object"
    }
  },
  "anyOf": [
    {
      "description": "A milestone.",
      "properties": {
        "issues": {
          "description": "Its issues in full, in id order.",
          "items": {
            "$ref": "#/$defs/PlanIssue"
          },
          "type": "array"
        },
        "milestone": {
          "$ref": "#/$defs/PlanMilestone",
          "description": "The milestone, with its counts, its rank and both directions of its graph."
        }
      },
      "required": [
        "milestone",
        "issues"
      ],
      "type": "object"
    },
    {
      "description": "An issue.",
      "properties": {
        "depends_on": {
          "description": "The issues it waits on, in full.",
          "items": {
            "$ref": "#/$defs/PlanIssue"
          },
          "type": "array"
        },
        "issue": {
          "$ref": "#/$defs/PlanIssue",
          "description": "The issue, with its status, its wave and both directions of its graph."
        }
      },
      "required": [
        "issue",
        "depends_on"
      ],
      "type": "object"
    }
  ],
  "description": "One record of the plan, milestone or issue, with everything derived about it.",
  "title": "PlanRecord"
}

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
directcovered2issue
milestone
mcpcovered2issue
milestone
httpcovered2issue
milestone

Searches the titles and descriptions of every page this site publishes.