{
  "status": "PASS",
  "image": "mysql@sha256:0f51e63e537a1f176423fa03ef559aabe6fa4372a53160a44bc7e75da7d15364",
  "scenarios": [
    {
      "name": "replication-bootstrap",
      "status": "PASS",
      "source_equals_replica": true
    },
    {
      "name": "consistent-snapshot-under-writes",
      "status": "PASS",
      "source_count_before": 3,
      "source_count_after": 6,
      "restored": {
        "orders": 4,
        "balance": 99897,
        "entry_sum": -103,
        "sha256": "b1670c8df96483eb1fb6c6bf0bdfd484989435eed84da406d536ba45cd96bfab",
        "rows": [
          "1\t100\topening-order",
          "2\t1\tbackup-concurrent",
          "3\t1\tbackup-concurrent",
          "4\t1\tbackup-concurrent"
        ]
      },
      "final_source_orders": 121,
      "dump_seconds": 0.1932,
      "dump_sha256": "e069f15f7accaf8e43cc509ecebd97d8a06e57afb57a5717dfa51b23b6b5c3be"
    },
    {
      "name": "clean-baseline-restore",
      "status": "PASS",
      "baseline": {
        "orders": 121,
        "balance": 99780,
        "entry_sum": -220,
        "sha256": "d130c303b36eccd2518f61bc2ff90bad0b5c94d05e16a9b1f12fa42f2b5ce67c",
        "rows": [
          "1\t100\topening-order",
          "2\t1\tbackup-concurrent",
          "3\t1\tbackup-concurrent",
          "4\t1\tbackup-concurrent",
          "5\t1\tbackup-concurrent",
          "6\t1\tbackup-concurrent",
          "7\t1\tbackup-concurrent",
          "8\t1\tbackup-concurrent",
          "9\t1\tbackup-concurrent",
          "10\t1\tbackup-concurrent",
          "11\t1\tbackup-concurrent",
          "12\t1\tbackup-concurrent",
          "13\t1\tbackup-concurrent",
          "14\t1\tbackup-concurrent",
          "15\t1\tbackup-concurrent",
          "16\t1\tbackup-concurrent",
          "17\t1\tbackup-concurrent",
          "18\t1\tbackup-concurrent",
          "19\t1\tbackup-concurrent",
          "20\t1\tbackup-concurrent",
          "21\t1\tbackup-concurrent",
          "22\t1\tbackup-concurrent",
          "23\t1\tbackup-concurrent",
          "24\t1\tbackup-concurrent",
          "25\t1\tbackup-concurrent",
          "26\t1\tbackup-concurrent",
          "27\t1\tbackup-concurrent",
          "28\t1\tbackup-concurrent",
          "29\t1\tbackup-concurrent",
          "30\t1\tbackup-concurrent",
          "31\t1\tbackup-concurrent",
          "32\t1\tbackup-concurrent",
          "33\t1\tbackup-concurrent",
          "34\t1\tbackup-concurrent",
          "35\t1\tbackup-concurrent",
          "36\t1\tbackup-concurrent",
          "37\t1\tbackup-concurrent",
          "38\t1\tbackup-concurrent",
          "39\t1\tbackup-concurrent",
          "40\t1\tbackup-concurrent",
          "41\t1\tbackup-concurrent",
          "42\t1\tbackup-concurrent",
          "43\t1\tbackup-concurrent",
          "44\t1\tbackup-concurrent",
          "45\t1\tbackup-concurrent",
          "46\t1\tbackup-concurrent",
          "47\t1\tbackup-concurrent",
          "48\t1\tbackup-concurrent",
          "49\t1\tbackup-concurrent",
          "50\t1\tbackup-concurrent",
          "51\t1\tbackup-concurrent",
          "52\t1\tbackup-concurrent",
          "53\t1\tbackup-concurrent",
          "54\t1\tbackup-concurrent",
          "55\t1\tbackup-concurrent",
          "56\t1\tbackup-concurrent",
          "57\t1\tbackup-concurrent",
          "58\t1\tbackup-concurrent",
          "59\t1\tbackup-concurrent",
          "60\t1\tbackup-concurrent",
          "61\t1\tbackup-concurrent",
          "62\t1\tbackup-concurrent",
          "63\t1\tbackup-concurrent",
          "64\t1\tbackup-concurrent",
          "65\t1\tbackup-concurrent",
          "66\t1\tbackup-concurrent",
          "67\t1\tbackup-concurrent",
          "68\t1\tbackup-concurrent",
          "69\t1\tbackup-concurrent",
          "70\t1\tbackup-concurrent",
          "71\t1\tbackup-concurrent",
          "72\t1\tbackup-concurrent",
          "73\t1\tbackup-concurrent",
          "74\t1\tbackup-concurrent",
          "75\t1\tbackup-concurrent",
          "76\t1\tbackup-concurrent",
          "77\t1\tbackup-concurrent",
          "78\t1\tbackup-concurrent",
          "79\t1\tbackup-concurrent",
          "80\t1\tbackup-concurrent",
          "81\t1\tbackup-concurrent",
          "82\t1\tbackup-concurrent",
          "83\t1\tbackup-concurrent",
          "84\t1\tbackup-concurrent",
          "85\t1\tbackup-concurrent",
          "86\t1\tbackup-concurrent",
          "87\t1\tbackup-concurrent",
          "88\t1\tbackup-concurrent",
          "89\t1\tbackup-concurrent",
          "90\t1\tbackup-concurrent",
          "91\t1\tbackup-concurrent",
          "92\t1\tbackup-concurrent",
          "93\t1\tbackup-concurrent",
          "94\t1\tbackup-concurrent",
          "95\t1\tbackup-concurrent",
          "96\t1\tbackup-concurrent",
          "97\t1\tbackup-concurrent",
          "98\t1\tbackup-concurrent",
          "99\t1\tbackup-concurrent",
          "100\t1\tbackup-concurrent",
          "101\t1\tbackup-concurrent",
          "102\t1\tbackup-concurrent",
          "103\t1\tbackup-concurrent",
          "104\t1\tbackup-concurrent",
          "105\t1\tbackup-concurrent",
          "106\t1\tbackup-concurrent",
          "107\t1\tbackup-concurrent",
          "108\t1\tbackup-concurrent",
          "109\t1\tbackup-concurrent",
          "110\t1\tbackup-concurrent",
          "111\t1\tbackup-concurrent",
          "112\t1\tbackup-concurrent",
          "113\t1\tbackup-concurrent",
          "114\t1\tbackup-concurrent",
          "115\t1\tbackup-concurrent",
          "116\t1\tbackup-concurrent",
          "117\t1\tbackup-concurrent",
          "118\t1\tbackup-concurrent",
          "119\t1\tbackup-concurrent",
          "120\t1\tbackup-concurrent",
          "121\t1\tbackup-concurrent"
        ]
      },
      "binlog": "mysql-bin.000004",
      "start_position": 198
    },
    {
      "name": "missing-log-cannot-reach-target",
      "status": "PASS",
      "mysqlbinlog_exit": 1,
      "required_file": "mysql-bin.000004",
      "baseline_unchanged": true,
      "snapshot_differs_from_target": true
    },
    {
      "name": "transaction-boundary-pitr",
      "status": "PASS",
      "start_position": 198,
      "stop_position": 1253,
      "binlog": "mysql-bin.000004",
      "expected": {
        "orders": 123,
        "balance": 99740,
        "entry_sum": -260,
        "sha256": "f588087606dde3b5d36d40fe6d8cc88d23c417f9043a1bc413384d69286fdc38",
        "rows": [
          "1\t100\topening-order",
          "2\t1\tbackup-concurrent",
          "3\t1\tbackup-concurrent",
          "4\t1\tbackup-concurrent",
          "5\t1\tbackup-concurrent",
          "6\t1\tbackup-concurrent",
          "7\t1\tbackup-concurrent",
          "8\t1\tbackup-concurrent",
          "9\t1\tbackup-concurrent",
          "10\t1\tbackup-concurrent",
          "11\t1\tbackup-concurrent",
          "12\t1\tbackup-concurrent",
          "13\t1\tbackup-concurrent",
          "14\t1\tbackup-concurrent",
          "15\t1\tbackup-concurrent",
          "16\t1\tbackup-concurrent",
          "17\t1\tbackup-concurrent",
          "18\t1\tbackup-concurrent",
          "19\t1\tbackup-concurrent",
          "20\t1\tbackup-concurrent",
          "21\t1\tbackup-concurrent",
          "22\t1\tbackup-concurrent",
          "23\t1\tbackup-concurrent",
          "24\t1\tbackup-concurrent",
          "25\t1\tbackup-concurrent",
          "26\t1\tbackup-concurrent",
          "27\t1\tbackup-concurrent",
          "28\t1\tbackup-concurrent",
          "29\t1\tbackup-concurrent",
          "30\t1\tbackup-concurrent",
          "31\t1\tbackup-concurrent",
          "32\t1\tbackup-concurrent",
          "33\t1\tbackup-concurrent",
          "34\t1\tbackup-concurrent",
          "35\t1\tbackup-concurrent",
          "36\t1\tbackup-concurrent",
          "37\t1\tbackup-concurrent",
          "38\t1\tbackup-concurrent",
          "39\t1\tbackup-concurrent",
          "40\t1\tbackup-concurrent",
          "41\t1\tbackup-concurrent",
          "42\t1\tbackup-concurrent",
          "43\t1\tbackup-concurrent",
          "44\t1\tbackup-concurrent",
          "45\t1\tbackup-concurrent",
          "46\t1\tbackup-concurrent",
          "47\t1\tbackup-concurrent",
          "48\t1\tbackup-concurrent",
          "49\t1\tbackup-concurrent",
          "50\t1\tbackup-concurrent",
          "51\t1\tbackup-concurrent",
          "52\t1\tbackup-concurrent",
          "53\t1\tbackup-concurrent",
          "54\t1\tbackup-concurrent",
          "55\t1\tbackup-concurrent",
          "56\t1\tbackup-concurrent",
          "57\t1\tbackup-concurrent",
          "58\t1\tbackup-concurrent",
          "59\t1\tbackup-concurrent",
          "60\t1\tbackup-concurrent",
          "61\t1\tbackup-concurrent",
          "62\t1\tbackup-concurrent",
          "63\t1\tbackup-concurrent",
          "64\t1\tbackup-concurrent",
          "65\t1\tbackup-concurrent",
          "66\t1\tbackup-concurrent",
          "67\t1\tbackup-concurrent",
          "68\t1\tbackup-concurrent",
          "69\t1\tbackup-concurrent",
          "70\t1\tbackup-concurrent",
          "71\t1\tbackup-concurrent",
          "72\t1\tbackup-concurrent",
          "73\t1\tbackup-concurrent",
          "74\t1\tbackup-concurrent",
          "75\t1\tbackup-concurrent",
          "76\t1\tbackup-concurrent",
          "77\t1\tbackup-concurrent",
          "78\t1\tbackup-concurrent",
          "79\t1\tbackup-concurrent",
          "80\t1\tbackup-concurrent",
          "81\t1\tbackup-concurrent",
          "82\t1\tbackup-concurrent",
          "83\t1\tbackup-concurrent",
          "84\t1\tbackup-concurrent",
          "85\t1\tbackup-concurrent",
          "86\t1\tbackup-concurrent",
          "87\t1\tbackup-concurrent",
          "88\t1\tbackup-concurrent",
          "89\t1\tbackup-concurrent",
          "90\t1\tbackup-concurrent",
          "91\t1\tbackup-concurrent",
          "92\t1\tbackup-concurrent",
          "93\t1\tbackup-concurrent",
          "94\t1\tbackup-concurrent",
          "95\t1\tbackup-concurrent",
          "96\t1\tbackup-concurrent",
          "97\t1\tbackup-concurrent",
          "98\t1\tbackup-concurrent",
          "99\t1\tbackup-concurrent",
          "100\t1\tbackup-concurrent",
          "101\t1\tbackup-concurrent",
          "102\t1\tbackup-concurrent",
          "103\t1\tbackup-concurrent",
          "104\t1\tbackup-concurrent",
          "105\t1\tbackup-concurrent",
          "106\t1\tbackup-concurrent",
          "107\t1\tbackup-concurrent",
          "108\t1\tbackup-concurrent",
          "109\t1\tbackup-concurrent",
          "110\t1\tbackup-concurrent",
          "111\t1\tbackup-concurrent",
          "112\t1\tbackup-concurrent",
          "113\t1\tbackup-concurrent",
          "114\t1\tbackup-concurrent",
          "115\t1\tbackup-concurrent",
          "116\t1\tbackup-concurrent",
          "117\t1\tbackup-concurrent",
          "118\t1\tbackup-concurrent",
          "119\t1\tbackup-concurrent",
          "120\t1\tbackup-concurrent",
          "121\t1\tbackup-concurrent",
          "2001\t17\tkeep-before-delete",
          "2002\t23\tkeep-second"
        ]
      },
      "actual": {
        "orders": 123,
        "balance": 99740,
        "entry_sum": -260,
        "sha256": "f588087606dde3b5d36d40fe6d8cc88d23c417f9043a1bc413384d69286fdc38",
        "rows": [
          "1\t100\topening-order",
          "2\t1\tbackup-concurrent",
          "3\t1\tbackup-concurrent",
          "4\t1\tbackup-concurrent",
          "5\t1\tbackup-concurrent",
          "6\t1\tbackup-concurrent",
          "7\t1\tbackup-concurrent",
          "8\t1\tbackup-concurrent",
          "9\t1\tbackup-concurrent",
          "10\t1\tbackup-concurrent",
          "11\t1\tbackup-concurrent",
          "12\t1\tbackup-concurrent",
          "13\t1\tbackup-concurrent",
          "14\t1\tbackup-concurrent",
          "15\t1\tbackup-concurrent",
          "16\t1\tbackup-concurrent",
          "17\t1\tbackup-concurrent",
          "18\t1\tbackup-concurrent",
          "19\t1\tbackup-concurrent",
          "20\t1\tbackup-concurrent",
          "21\t1\tbackup-concurrent",
          "22\t1\tbackup-concurrent",
          "23\t1\tbackup-concurrent",
          "24\t1\tbackup-concurrent",
          "25\t1\tbackup-concurrent",
          "26\t1\tbackup-concurrent",
          "27\t1\tbackup-concurrent",
          "28\t1\tbackup-concurrent",
          "29\t1\tbackup-concurrent",
          "30\t1\tbackup-concurrent",
          "31\t1\tbackup-concurrent",
          "32\t1\tbackup-concurrent",
          "33\t1\tbackup-concurrent",
          "34\t1\tbackup-concurrent",
          "35\t1\tbackup-concurrent",
          "36\t1\tbackup-concurrent",
          "37\t1\tbackup-concurrent",
          "38\t1\tbackup-concurrent",
          "39\t1\tbackup-concurrent",
          "40\t1\tbackup-concurrent",
          "41\t1\tbackup-concurrent",
          "42\t1\tbackup-concurrent",
          "43\t1\tbackup-concurrent",
          "44\t1\tbackup-concurrent",
          "45\t1\tbackup-concurrent",
          "46\t1\tbackup-concurrent",
          "47\t1\tbackup-concurrent",
          "48\t1\tbackup-concurrent",
          "49\t1\tbackup-concurrent",
          "50\t1\tbackup-concurrent",
          "51\t1\tbackup-concurrent",
          "52\t1\tbackup-concurrent",
          "53\t1\tbackup-concurrent",
          "54\t1\tbackup-concurrent",
          "55\t1\tbackup-concurrent",
          "56\t1\tbackup-concurrent",
          "57\t1\tbackup-concurrent",
          "58\t1\tbackup-concurrent",
          "59\t1\tbackup-concurrent",
          "60\t1\tbackup-concurrent",
          "61\t1\tbackup-concurrent",
          "62\t1\tbackup-concurrent",
          "63\t1\tbackup-concurrent",
          "64\t1\tbackup-concurrent",
          "65\t1\tbackup-concurrent",
          "66\t1\tbackup-concurrent",
          "67\t1\tbackup-concurrent",
          "68\t1\tbackup-concurrent",
          "69\t1\tbackup-concurrent",
          "70\t1\tbackup-concurrent",
          "71\t1\tbackup-concurrent",
          "72\t1\tbackup-concurrent",
          "73\t1\tbackup-concurrent",
          "74\t1\tbackup-concurrent",
          "75\t1\tbackup-concurrent",
          "76\t1\tbackup-concurrent",
          "77\t1\tbackup-concurrent",
          "78\t1\tbackup-concurrent",
          "79\t1\tbackup-concurrent",
          "80\t1\tbackup-concurrent",
          "81\t1\tbackup-concurrent",
          "82\t1\tbackup-concurrent",
          "83\t1\tbackup-concurrent",
          "84\t1\tbackup-concurrent",
          "85\t1\tbackup-concurrent",
          "86\t1\tbackup-concurrent",
          "87\t1\tbackup-concurrent",
          "88\t1\tbackup-concurrent",
          "89\t1\tbackup-concurrent",
          "90\t1\tbackup-concurrent",
          "91\t1\tbackup-concurrent",
          "92\t1\tbackup-concurrent",
          "93\t1\tbackup-concurrent",
          "94\t1\tbackup-concurrent",
          "95\t1\tbackup-concurrent",
          "96\t1\tbackup-concurrent",
          "97\t1\tbackup-concurrent",
          "98\t1\tbackup-concurrent",
          "99\t1\tbackup-concurrent",
          "100\t1\tbackup-concurrent",
          "101\t1\tbackup-concurrent",
          "102\t1\tbackup-concurrent",
          "103\t1\tbackup-concurrent",
          "104\t1\tbackup-concurrent",
          "105\t1\tbackup-concurrent",
          "106\t1\tbackup-concurrent",
          "107\t1\tbackup-concurrent",
          "108\t1\tbackup-concurrent",
          "109\t1\tbackup-concurrent",
          "110\t1\tbackup-concurrent",
          "111\t1\tbackup-concurrent",
          "112\t1\tbackup-concurrent",
          "113\t1\tbackup-concurrent",
          "114\t1\tbackup-concurrent",
          "115\t1\tbackup-concurrent",
          "116\t1\tbackup-concurrent",
          "117\t1\tbackup-concurrent",
          "118\t1\tbackup-concurrent",
          "119\t1\tbackup-concurrent",
          "120\t1\tbackup-concurrent",
          "121\t1\tbackup-concurrent",
          "2001\t17\tkeep-before-delete",
          "2002\t23\tkeep-second"
        ]
      },
      "excluded": [
        "delete-transaction",
        "after-delete"
      ],
      "target_source_gtid": "5b1c5276-cd49-11f1-92e0-a6df2983ba15:1-139",
      "replay_sha256": "0fac3c5521617d375da6879702e9511492db9ab020f4d0d27b9ea68abd212df3",
      "source_running_during_replay": false,
      "archive": {
        "file": "mysql-bin.000004",
        "bytes": 7226,
        "sha256": "c5a68925f2c57a8293d37838636791592066bd22ff87918008bfa939877ca9ce",
        "sealed_by_flush": true,
        "replay_mount_readonly": true,
        "replay_network": "none"
      }
    },
    {
      "name": "accidental-delete-replicates",
      "status": "PASS",
      "replica_orders": 1,
      "recovered_pitr_orders": 123
    },
    {
      "name": "pause-and-catch-up",
      "status": "PASS",
      "during_pause": {
        "orders": 1,
        "balance": 99993,
        "entry_sum": -7,
        "sha256": "83991bf3809bbc50c8eadc9a0d706cdb957e649a3c3f1df22deaec446021c7a3",
        "rows": [
          "3001\t7\tafter-delete"
        ]
      },
      "after_resume": {
        "orders": 2,
        "balance": 99982,
        "entry_sum": -18,
        "sha256": "5850deee3bb7acb37df0c5bcd9ec5845c92c79cdafb92472a0e12a6071e150ba",
        "rows": [
          "3001\t7\tafter-delete",
          "4001\t11\tdelayed-apply"
        ]
      }
    },
    {
      "name": "unfenced-promotion-refused",
      "status": "PASS",
      "old_primary_running": true,
      "replica_remains_read_only": true,
      "actual_write_rejection": {
        "user": "ledger_app",
        "exit": 1,
        "mysql_error": "ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement"
      }
    },
    {
      "name": "fenced-manual-failover-with-observed-loss",
      "status": "PASS",
      "source_before_failure": {
        "orders": 3,
        "balance": 99969,
        "entry_sum": -31,
        "sha256": "6812ddd7a78faf29036501b07d001d3cda033671c4d338d1902592ec1bb968ef",
        "rows": [
          "3001\t7\tafter-delete",
          "4001\t11\tdelayed-apply",
          "5001\t13\tacknowledged-but-not-replicated"
        ]
      },
      "surviving_prefix": {
        "orders": 2,
        "balance": 99982,
        "entry_sum": -18,
        "sha256": "5850deee3bb7acb37df0c5bcd9ec5845c92c79cdafb92472a0e12a6071e150ba",
        "rows": [
          "3001\t7\tafter-delete",
          "4001\t11\tdelayed-apply"
        ]
      },
      "promoted": {
        "orders": 3,
        "balance": 99963,
        "entry_sum": -37,
        "sha256": "6136f1be4dcd4660853a763880d50ff5291839e04032d28475194ee9bcbad474",
        "rows": [
          "3001\t7\tafter-delete",
          "4001\t11\tdelayed-apply",
          "6001\t19\tnew-primary-only"
        ]
      },
      "lost_acknowledged_order_ids": [
        5001
      ],
      "rpo_lost_transactions": 1,
      "observed_window_seconds": 0.049,
      "manual_rto_seconds": 10.624,
      "business_user": "ledger_app",
      "read_only": "0",
      "super_read_only": "0",
      "rto_boundary": "docker-stop invocation to verified new-primary business commit; excludes detection/routing/client retry"
    },
    {
      "name": "returning-old-primary-quarantined",
      "status": "PASS",
      "networks": {},
      "super_read_only": "1",
      "divergent_old_state": true,
      "automatically_rejoined": false,
      "actual_write_rejection": {
        "user": "ledger_app",
        "exit": 1,
        "mysql_error": "ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement"
      }
    }
  ],
  "scope": "Isolated Linux Docker bridge; teaching data; manual failover; no production routing, automatic HA or cross-region claim.",
  "source_sha": "c0681a952fe762a0abf17e07348ebee029b692ef",
  "binlog_tool": {
    "url": "https://repo.mysql.com/yum/mysql-8.4-community/el/9/x86_64/mysql-community-client-8.4.11-1.el9.x86_64.rpm",
    "rpm_sha256": "2f1e8317c557363dd1554b29a9f6d69403802dc623fe72d9995f20f542771bb1",
    "version": "mysqlbinlog  Ver 8.4.11 for Linux on x86_64 (MySQL Community Server - GPL)",
    "architecture": "linux/amd64"
  },
  "mysql_version": "8.4.11",
  "server_variables": "ON\tON\tROW\tFULL\t1\t1",
  "image_inspect": [
    "mysql@sha256:0f51e63e537a1f176423fa03ef559aabe6fa4372a53160a44bc7e75da7d15364"
  ],
  "business_identity": {
    "user": "ledger_app",
    "grants": "GRANT USAGE ON *.* TO `ledger_app`@`%`\nGRANT SELECT, INSERT, UPDATE, DELETE ON `ledger`.* TO `ledger_app`@`%`",
    "scope": "ledger.* DML; no administrative privileges"
  },
  "binlog_archive": {
    "file": "mysql-bin.000004",
    "bytes": 7226,
    "sha256": "c5a68925f2c57a8293d37838636791592066bd22ff87918008bfa939877ca9ce",
    "sealed_by_flush": true,
    "replay_mount_readonly": true,
    "replay_network": "none"
  },
  "stop_observations": [
    {
      "stage": "offline-archive-replay",
      "running": false,
      "exit_code": 137,
      "finished_at": "2026-10-21T12:18:10.858535777Z",
      "grace_seconds": 10
    },
    {
      "stage": "failover-fence",
      "running": false,
      "exit_code": 137,
      "finished_at": "2026-10-21T12:18:27.796229008Z",
      "grace_seconds": 10
    }
  ],
  "scenario_count": 10
}
