{
 "forbidden_states": {
  "EXECUTION_STARTED + NO_VALID_AUTHORIZATION": "NOT OBSERVED in any run; NOT PROVEN impossible (a compromised gateway can permit, GOV-BFT-10)",
  "MCPGATE_ALLOW + INVALID_AUTHORIZATION": "NOT OBSERVED (post-consensus stages restriction-only; deferred order cannot cover a permit)",
  "SUCCESS_RECEIPT + UNKNOWN_EXECUTION": "UNKNOWN: the hosted path has no execution receipt bound to the QC"
 },
 "rows": [
  {
   "behaviour": "deny; the cluster holds an ordered ALLOWED commitment the gateway did not honour",
   "classification": "SAFE direction (COMMITTED_NOT_AUTHORIZED)",
   "evidence": "GOV-BFT-04 shape; cain_mr_client.order_op",
   "scenario": "commit succeeds / authorization (QC verification) fails"
  },
  {
   "behaviour": "final BLOCKED; commitment covers only pre-consensus stages (documented)",
   "classification": "SAFE direction",
   "evidence": "tests/test_decision_consensus_anchor.py::post_consensus",
   "scenario": "authorization succeeds / MCPGate (post-consensus stage) denies"
  },
  {
   "behaviour": "outside the gateway's evidence: tool result is not bound to the QC",
   "classification": "UNKNOWN (not measured here)",
   "evidence": "-",
   "scenario": "MCPGate succeeds / execution fails"
  },
  {
   "behaviour": "no receipt binding in the hosted path",
   "classification": "UNKNOWN",
   "evidence": "-",
   "scenario": "execution succeeds / receipt fails"
  },
  {
   "behaviour": "fast path: next call misses; per-call: revocation is checked in pre-consensus stages, not by the replicas",
   "classification": "SAFE for the next call; an in-flight round that already passed its stages can still permit",
   "evidence": "RT-BFT-01",
   "scenario": "revocation during commit"
  },
  {
   "behaviour": "snapshot dropped/epoch bumped; next call misses",
   "classification": "SAFE",
   "evidence": "GOV-BFT-08",
   "scenario": "revocation after commit"
  },
  {
   "behaviour": "WAL replay, certified catch-up",
   "classification": "SAFE",
   "evidence": "tests/test_cain42_pbft_crash_points.py (56 pass), BFT-TV-16/17, RT-BFT-11",
   "scenario": "crash before / after commit (replica)"
  },
  {
   "behaviour": "decision row + deferred/anchor queues are durable; execution outcome not recorded by consensus",
   "classification": "UNKNOWN for execution",
   "evidence": "-",
   "scenario": "crash after MCPGate / after execution (gateway)"
  }
 ]
}
