Skip to main content

🚀 Beta: All Pro and Team features are free. Install on GitHub →

Remediation transaction

A BLOCK is not a dead end.

A BLOCK is not a dead end: the envelope names the required contract fixes; the same input re-submitted is still a BLOCK (deterministic); a modified input triggers a NEW preflight, not permission; disputes escalate to human review.

What the transaction carries

The agent-facing contract names these response fields.

remediation_transaction

Present on BLOCK only; not on ALLOW/WARN/REQUIRE_APPROVAL.

required_changes[]

The named contract fixes.

resubmission

unchanged_input -> deterministic_block; modified_input -> preflight_required; modified_is_not_permission: true; next_preflight_required: true.

recheck_scope / escalation

recheck_scope; escalation: human_review.

A measured BLOCK, in full

Not an illustration. This is the object buildRemediationTransaction returns for a BLOCK on one removed response field, measured on 2026-09-15.

{
  "required_changes": [
    {
      "change_type": "FIELD_REMOVAL",
      "precise_label": "DEPRECATE_FIELD",
      "target": "/orders response.customer_id",
      "target_ref": {
        "path": "/orders", "method": "", "field": "customer_id",
        "location": "response_body", "side": "response"
      },
      "recommended_transform": "add_alongside_then_deprecate",
      "effort": "low",
      "instruction": "Keep field `customer_id` on /orders; mark deprecated; add replacement field alongside; remove later.",
      "evidence": { "ir_type": "field_removed" }
    }
  ],
  "resubmission": {
    "unchanged_input": "deterministic_block",
    "modified_input": "preflight_required",
    "reference_fingerprint": "fp_2f1a9c4e8b7d6035",
    "fingerprint_profile": "verdict_fp_v1",
    "modified_is_not_permission": true
  },
  "next_preflight_required": true,
  "recheck_scope": {
    "targets": ["/orders", "/orders response.customer_id"],
    "precise": true
  },
  "escalation": {
    "path": "human_review",
    "when": "changes_infeasible_or_disputed"
  }
}

What happens after escalation: human_review is named by when: the path opens only when the required changes are infeasible or disputed. It is a route for a human to overrule the remediation, not a second way to pass the gate — next_preflight_required stays true either way.

Re-submission is not permission

The same input re-submitted is still a BLOCK (deterministic). A modified input triggers a NEW preflight, not permission.

modified_is_not_permission: true
next_preflight_required: true

Post-execution proof

For post-execution proof boundaries, see Execution attestations → and Proof boundaries →.