Skip to content

materialise_bundle

Write an emitted execution’s bundle into the target repo’s .panto/ store, unpacked. Composes request_review under the hood, but adds a hard binding to an execution_id (recorded by petrova record-execution from panto-cloud’s build.js --check-run --json) instead of a diagnosis, per docs/decisions/0009-materialiser-verb-and-store.md in panto-cloud.

Upholds: MR-7 · MR-12 Side effects: Same as request_review: branch + PR. Plus: PR body includes the execution_id and the bundle’s derivation_hash. Restricted to writing under .panto/.

  • REPO_IN_REGISTRY — target_repo must appear in registry.yaml.
  • EXECUTION_EXISTS — execution_id must reference an execution recorded by petrova record-execution within the last 24 hours, from a build.js --check-run --json run that reported a bundle.
  • FILES_NONEMPTY — proposed_changes must contain ≥1 entry.
  • TEST_PLAN_NONEMPTY — test_plan must list ≥1 verification step.
  • GROUNDING_NONEMPTY — mr_grounding must cite at least one MR or one decision doc / spec section explaining why the change is correct.
  • NO_PRIVILEGED_PATHS — Same privileged-path rejection as request_review.
  • execution_id string (required)
  • title string (required)
  • rationale string (required)
  • proposed_changes array (required)
    • items:
      • path string (required)
      • operation string (required) enum: create, modify, delete
      • contents string
      • patch string
      • edit_rationale string — Per-file rationale; reviewer-readable.
  • test_plan array (required)
  • mr_grounding array (required)
    • items:
      • kind string (required) enum: meta_rule, decision_doc, spec, north_star, finding, cupel_ticket, cupel_trace
      • ref string (required)
      • claim string — What this grounding source claims that justifies the change.
  • merge_strategy string enum: request_review, request_merge_when_green — Whether to compose request_review (default, human merges) or request_merge_when_green (profile-permitting, auto-merge).
  • execution_id string
  • pr → PRRef
  • diff_preview → DiffPreview
  • composed_verb string enum: request_review, request_merge_when_green

Input:

{
"envelope": {
"verb": "materialise_bundle",
"target_repo": "panto-cloud",
"idempotency_key": "2b7ffa28f53ee7791c25d4e8f9012b3c4d5e6f7a8b9c0d1e2f30415263748596",
"dry_run": true,
"actor": "human:cli",
"triggered_by": {
"kind": "human_request",
"ref": "exec-515"
}
},
"params": {
"execution_id": "exec-515",
"title": "chore(.panto): materialise bundle from execution 515",
"rationale": "0009 ruling 1/2: .panto/ is the bundle store; execution 515 emitted panto-cloud-claude-project-bundle.zip.",
"proposed_changes": [
{
"path": ".panto/AGENTS.xml",
"operation": "create",
"contents": "...",
"edit_rationale": "Unpacked member of execution 515's bundle."
}
],
"test_plan": [
"diff .panto/ against the unpacked bundle contents"
],
"mr_grounding": [
{
"kind": "decision_doc",
"ref": "panto-cloud/docs/decisions/0009-materialiser-verb-and-store.md",
"claim": "Ruling 1 names this verb; ruling 2 names .panto/ as the store."
}
]
}
}

Output (output_dry_run):

{
"envelope": {
"verb": "materialise_bundle",
"status": "dry_run",
"idempotency_key": "2b7ffa28f53ee7791c25d4e8f9012b3c4d5e6f7a8b9c0d1e2f30415263748596",
"mr_citations": [
"MR-7",
"MR-12"
]
},
"result": {
"execution_id": "exec-515",
"composed_verb": "request_review",
"diff_preview": {
"files": [
{
"path": ".panto/AGENTS.xml",
"operation": "create"
}
],
"branch": "petrova/materialise-bundle/2b7ffa28",
"commit_message": "chore(.panto): materialise bundle from execution 515"
}
}
}

(no recipe yet — see SKILL guide)