{
 "type": "CAIN42/ROLLBACK-DRILL/v1",
 "cluster_id": "cain-mr-01",
 "performed_at": "2026-09-26T21:3xZ (operator-run, rollback.sh)",
 "from": "cain-cluster-node:mr-81bdf84",
 "rollback_to": "cain-cluster-node:mr-9fedb49",
 "then_forward_to": "cain-cluster-node:mr-81bdf84",
 "image_ids": {
  "mr-9fedb49": "sha256:6e6f5b2b407e17f1d48a7bcf044f36558931cf4a6ed8cfdd600793ce329cd301",
  "mr-81bdf84": "sha256:03a3004e8f2118ba7d2d47dfe5f6bc019aa0a84a0b7ff99c80905e6427564192"
 },
 "steps": [
  {
   "target_image": "cain-cluster-node:mr-9fedb49",
   "primary_last": "cain-mr-node-3",
   "replicas": [
    {
     "replica": "cain-mr-node-1",
     "region": "atl",
     "caught_up_s": 10,
     "height": 711,
     "quarantined": []
    },
    {
     "replica": "cain-mr-node-2",
     "region": "lax",
     "caught_up_s": 13,
     "height": 711,
     "quarantined": []
    },
    {
     "replica": "cain-mr-node-4",
     "region": "mia",
     "caught_up_s": 10,
     "height": 711,
     "quarantined": []
    },
    {
     "replica": "cain-mr-node-3",
     "region": "lax",
     "caught_up_s": 14,
     "height": 711,
     "quarantined": []
    }
   ],
   "health_after": {
    "verdict": "HEALTHY",
    "reachable": 4,
    "height": 711
   }
  },
  {
   "target_image": "cain-cluster-node:mr-81bdf84",
   "primary_last": "cain-mr-node-3",
   "replicas": [
    {
     "replica": "cain-mr-node-1",
     "region": "atl",
     "caught_up_s": 10,
     "height": 711,
     "quarantined": []
    },
    {
     "replica": "cain-mr-node-2",
     "region": "lax",
     "caught_up_s": 14,
     "height": 711,
     "quarantined": []
    },
    {
     "replica": "cain-mr-node-4",
     "region": "mia",
     "caught_up_s": 10,
     "height": 711,
     "quarantined": []
    },
    {
     "replica": "cain-mr-node-3",
     "region": "lax",
     "caught_up_s": 13,
     "height": 711,
     "quarantined": []
    }
   ],
   "health_after": {
    "verdict": "HEALTHY",
    "reachable": 4,
    "height": 711
   }
  }
 ],
 "result": "PASS",
 "method": "deploy_multi_region.py --rolling: one replica at a time, current primary last; each replica recreated from the kept configuration on its own host with the target image and must reach the others' height and view before the next is touched; previous containers kept as <name>-was-<tag>-<stamp>",
 "evidence_level": "operator-run log parsed verbatim; the decisions committed across these heights carry quorum certificates verifiable at /api/v1/live-cluster/qc/{sequence} and on /live-cluster.html",
 "not_claimed": [
  "rollback across an incompatible WAL/format change (both engines share the format)",
  "third-party observation"
 ]
}