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.
- query
- experimental
- module integration
- #integration
- #pull-requests
- #proof
- #live
Exposure
Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.
| surface | as |
|---|---|
| MCP | tool majordomus_pull_requests_prove_dry_run |
| HTTP | GET /api/v1/pull-requests/prove-dry-run operationId integration.prove_dry_run |
| command line | majordomus 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 properties: the capability takes no input.
JSON Schema
{
"additionalProperties": false,
"description": "No input.",
"title": "Empty",
"type": "object"
}output · DryRunProof
| property | type | required | description |
|---|---|---|---|
| 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.
| transport | state | cases | targets |
|---|---|---|---|
| direct | waived (external_dependency) | 0 | |
| mcp | waived (external_dependency) | 0 | |
| http | waived (external_dependency) | 0 |