Three-step chain: compile a work mandate (size / spread / issuer limits), simulate the spend policy against it, then run the agentic mandate sandbox against synthetic bond-trade transactions. Any breach halts the run and opens an escalation record; a clean run emits the per-session mandate receipt.
Each step's receipt entry carries that kernel's existing proof status honestly — this chain composes only already-shipped, already-proven kernels; there is no new groth16 proving step for this composition. The chain's claim_strength is the minimum across steps: it is replayable-by-hash, not a fresh cryptographic proof of the composition itself.
When the sandbox gate fires escalate (any policy breach), the run halts immediately and an escalation record opens with a deterministic record_hash. Closure of that record is handled by verify_escalation_closure on the anchor worker — this chain references that tail, it does not reimplement it. A clean sandbox run (no breach) emits the per-session bond-trading mandate receipt: mandate bounds, sandbox verdict, gate decision, and escalation ref if any.
compile_work_mandate{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "compile_work_mandate",
"arguments": {
"session_id": "SYNTHETIC-SESSION-001",
"max_order_size_usd": 5000000,
"max_spread_bps": 25,
"issuer_limits": [{"issuer":"SYNTHETIC-ISSUER-A","max_notional_usd":2000000}]
}
},
"id": 1
}
simulate_spend_policy{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "simulate_spend_policy",
"arguments": {
"mandate_ref": "SYNTHETIC-SESSION-001",
"synthetic_transactions": [{"notional_usd":1500000,"spread_bps":18,"issuer":"SYNTHETIC-ISSUER-A"}]
}
},
"id": 2
}
rule[0]: if output.breach == true → next: escalate (§22.8.2 HALT + open record) default: → next: receipt (emit bond-trading mandate receipt)
agentic_mandate_sandbox{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "agentic_mandate_sandbox",
"arguments": {
"mandate_ref": "SYNTHETIC-SESSION-001",
"spend_policy_verdict_ref": "step-2-output"
}
},
"id": 3
}