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: truenext_preflight_required: true
Post-execution proof
For post-execution proof boundaries, see Execution attestations → and Proof boundaries →.