Skip to content

integration.prove_dry_run

Runs the executor's non-mutating cycle — refresh, plan, drain --dry-run and cleanup without --apply — between two snapshots of everything it could move if it were wrong: every ref origin serves, every open pull request's number, head, state and labels, the integration audit trail, the executor's lease, and every local ref outside the two namespaces the refresh mirrors. `ok` is true exactly when the snapshots are equal and refs/remotes/origin/<base> and every refs/majordomus/prs/<n> equal what origin serves. A read that reaches the network: the refresh asks the forge through the GitHub CLI and fetches the base and the pull-request heads, and like every read it rewrites the observation, relation and summary caches. It merges, closes and pushes nothing, and takes no input that could make it.

Runs the executor's non-mutating cycle — refresh, plan, drain --dry-run and cleanup without --apply — between two snapshots of everything it could move if it were wrong: every ref origin serves, every open pull request's number, head, state and labels, the integration audit trail, the executor's lease, and every local ref outside the two namespaces the refresh mirrors. `ok` is true exactly when the snapshots are equal and refs/remotes/origin/<base> and every refs/majordomus/prs/<n> equal what origin serves. A read that reaches the network: the refresh asks the forge through the GitHub CLI and fetches the base and the pull-request heads, and like every read it rewrites the observation, relation and summary caches. It merges, closes and pushes nothing, and takes no input that could make it.

Exposure

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

surfaceas
MCPtool majordomus_pull_requests_prove_dry_run
HTTPGET /api/v1/pull-requests/prove-dry-run operationId integration.prove_dry_run
command linemajordomus prs prove-dry-run

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 · DryRunProof

The verdict: what was compared, what moved, and what the cycle observed.
propertytyperequireddescription
after reference yes The snapshot after it.
base string yes The base branch the executor works on.
before reference yes The snapshot before the cycle.
classification array yes Every open pull request as the cycle classified it, in rank order.
mirrors array yes Every mirrored ref that is not what origin serves; empty when they all are.
moved array yes Every line that differs between the snapshots; empty when nothing moved.
ok boolean yes True exactly when nothing moved and every mirror equals what origin serves.
steps array yes The cycle, step by step.
JSON Schema
{
  "$defs": {
    "Moved": {
      "description": "One line that differs between the two snapshots.",
      "properties": {
        "change": {
          "description": "`added` (present only after the cycle) or `removed` (present only before).",
          "type": "string"
        },
        "line": {
          "description": "The line itself.",
          "type": "string"
        },
        "section": {
          "description": "The section it belongs to.",
          "type": "string"
        }
      },
      "required": [
        "section",
        "change",
        "line"
      ],
      "type": "object"
    },
    "ObservedClassification": {
      "description": "One open pull request as the cycle classified it.",
      "properties": {
        "disposition": {
          "description": "Its disposition, as the queue names it.",
          "type": "string"
        },
        "head_sha": {
          "description": "The head it was decided against.",
          "type": "string"
        },
        "next_action": {
          "description": "What the executor would do with it, when anything.",
          "type": [
            "string",
            "null"
          ]
        },
        "number": {
          "description": "The pull request.",
          "format": "uint64",
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "number",
        "head_sha",
        "disposition"
      ],
      "type": "object"
    },
    "ProofStep": {
      "description": "One step of the cycle and what it said.",
      "properties": {
        "step": {
          "description": "`refresh`, `plan`, `drain --dry-run` or `cleanup`.",
          "type": "string"
        },
        "summary": {
          "description": "What it reported, in one line.",
          "type": "string"
        }
      },
      "required": [
        "step",
        "summary"
      ],
      "type": "object"
    },
    "Snapshot": {
      "description": "Everything the cycle could move, at one moment.",
      "properties": {
        "sections": {
          "description": "The sections, always in the order `remote`, `forge`, `trail`, `lease`, `local`.",
          "items": {
            "$ref": "#/$defs/SnapshotSection"
          },
          "type": "array"
        }
      },
      "required": [
        "sections"
      ],
      "type": "object"
    },
    "SnapshotSection": {
      "description": "One section of a snapshot: a name and its lines, in a stable order.",
      "properties": {
        "lines": {
          "description": "What the section holds, one fact per line, sorted where order carries no meaning.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "name": {
          "description": "`remote`, `forge`, `trail`, `lease` or `local`.",
          "type": "string"
        }
      },
      "required": [
        "name",
        "lines"
      ],
      "type": "object"
    }
  },
  "description": "The verdict: what was compared, what moved, and what the cycle observed.",
  "properties": {
    "after": {
      "$ref": "#/$defs/Snapshot",
      "description": "The snapshot after it."
    },
    "base": {
      "description": "The base branch the executor works on.",
      "type": "string"
    },
    "before": {
      "$ref": "#/$defs/Snapshot",
      "description": "The snapshot before the cycle."
    },
    "classification": {
      "description": "Every open pull request as the cycle classified it, in rank order.",
      "items": {
        "$ref": "#/$defs/ObservedClassification"
      },
      "type": "array"
    },
    "mirrors": {
      "description": "Every mirrored ref that is not what origin serves; empty when they all are.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "moved": {
      "description": "Every line that differs between the snapshots; empty when nothing moved.",
      "items": {
        "$ref": "#/$defs/Moved"
      },
      "type": "array"
    },
    "ok": {
      "description": "True exactly when nothing moved and every mirror equals what origin serves.",
      "type": "boolean"
    },
    "steps": {
      "description": "The cycle, step by step.",
      "items": {
        "$ref": "#/$defs/ProofStep"
      },
      "type": "array"
    }
  },
  "required": [
    "ok",
    "base",
    "steps",
    "moved",
    "mirrors",
    "before",
    "after",
    "classification"
  ],
  "title": "DryRunProof",
  "type": "object"
}

Policies

benchmark
waived — waived: external_dependency
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
directwaived (external_dependency)0
mcpwaived (external_dependency)0
httpwaived (external_dependency)0

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