{
  "schema_version": 1,
  "arena": {
    "id": "primary-failover",
    "display_name": "Stateful Primary Failover",
    "category": "stateful-recovery",
    "mode": "build_race"
  },
  "network": {
    "cidr": "10.81.0.0/24",
    "allow_public_internet": false
  },
  "rules": {
    "duration_seconds": 900,
    "tick_ms": 1000,
    "healthy_resources_per_tick": 0,
    "minimum_territories": 3
  },
  "build": {
    "stop_on_first_durable": true,
    "completion_milestone": "host-reboot",
    "milestones": [
      {
        "id": "failed-primary-preserved",
        "display_name": "Failed Primary Preserved",
        "depends_on": [],
        "verifier": "verify/incident-confirmed.sh",
        "operation": "observe",
        "timeout_seconds": 5,
        "points": 5,
        "required": true
      },
      {
        "id": "reads-restored",
        "display_name": "Existing Reads Restored",
        "depends_on": [
          "failed-primary-preserved"
        ],
        "verifier": "verify/reads-restored.sh",
        "operation": "observe",
        "timeout_seconds": 10,
        "points": 20,
        "required": true
      },
      {
        "id": "old-primary-fenced",
        "display_name": "Old Primary Fenced",
        "depends_on": [
          "reads-restored"
        ],
        "verifier": "verify/old-primary-fenced.sh",
        "operation": "observe",
        "timeout_seconds": 10,
        "points": 20,
        "required": true
      },
      {
        "id": "writes-restored",
        "display_name": "Writes Restored",
        "depends_on": [
          "old-primary-fenced"
        ],
        "verifier": "verify/writes-restored.sh",
        "operation": "observe",
        "timeout_seconds": 15,
        "points": 25,
        "required": true
      },
      {
        "id": "service-restart",
        "display_name": "Topology Restart",
        "depends_on": [
          "writes-restored"
        ],
        "verifier": "verify/service-restart.sh",
        "operation": "observe",
        "timeout_seconds": 20,
        "points": 15,
        "required": true
      },
      {
        "id": "host-reboot",
        "display_name": "Host Reboot",
        "depends_on": [
          "service-restart"
        ],
        "verifier": "verify/host-reboot.sh",
        "operation": "host_reboot",
        "timeout_seconds": 40,
        "points": 15,
        "required": true
      }
    ]
  },
  "visualization": {
    "nodes": [
      {
        "id": "client",
        "display_name": "Client",
        "kind": "client",
        "milestone": null,
        "x": 7,
        "y": 25
      },
      {
        "id": "router",
        "display_name": "Data Router",
        "kind": "proxy",
        "milestone": "writes-restored",
        "x": 31,
        "y": 25
      },
      {
        "id": "old-primary",
        "display_name": "Old Primary",
        "kind": "database",
        "milestone": "failed-primary-preserved",
        "x": 60,
        "y": 15
      },
      {
        "id": "replica",
        "display_name": "Replica",
        "kind": "database",
        "milestone": "reads-restored",
        "x": 84,
        "y": 43
      },
      {
        "id": "fence",
        "display_name": "Write Fence",
        "kind": "service",
        "milestone": "old-primary-fenced",
        "x": 58,
        "y": 70
      },
      {
        "id": "units",
        "display_name": "Service Units",
        "kind": "service",
        "milestone": "service-restart",
        "x": 31,
        "y": 76
      },
      {
        "id": "host",
        "display_name": "NixOS Host",
        "kind": "host",
        "milestone": "host-reboot",
        "x": 84,
        "y": 79
      }
    ],
    "links": [
      {
        "from": "client",
        "to": "router",
        "kind": "traffic",
        "label": null
      },
      {
        "from": "router",
        "to": "old-primary",
        "kind": "traffic",
        "label": null
      },
      {
        "from": "router",
        "to": "replica",
        "kind": "traffic",
        "label": null
      },
      {
        "from": "old-primary",
        "to": "replica",
        "kind": "replication",
        "label": null
      },
      {
        "from": "fence",
        "to": "old-primary",
        "kind": "lifecycle",
        "label": null
      },
      {
        "from": "units",
        "to": "router",
        "kind": "lifecycle",
        "label": null
      },
      {
        "from": "host",
        "to": "units",
        "kind": "lifecycle",
        "label": null
      }
    ]
  },
  "fog_of_war": null,
  "classes": [
    {
      "id": "failover-engineer",
      "display_name": "Failover Engineer",
      "strengths": [],
      "weaknesses": [],
      "resources": {
        "vcpus": 1,
        "memory_mib": 768,
        "disk_mib": 2048
      }
    }
  ],
  "territories": [
    {
      "id": "failover-one",
      "class": "failover-engineer",
      "nixos_config": "./arenas/primary-failover#nixosConfigurations.failover-one.config.system.build.vm",
      "service": {
        "port": 8080,
        "path": "/health",
        "expected_status": 200,
        "expected_body": "ready",
        "health": {
          "poll_interval_ms": 1000,
          "consecutive_failures": 3,
          "recovery_window_seconds": 60
        }
      }
    },
    {
      "id": "failover-two",
      "class": "failover-engineer",
      "nixos_config": "./arenas/primary-failover#nixosConfigurations.failover-two.config.system.build.vm",
      "service": {
        "port": 8080,
        "path": "/health",
        "expected_status": 200,
        "expected_body": "ready",
        "health": {
          "poll_interval_ms": 1000,
          "consecutive_failures": 3,
          "recovery_window_seconds": 60
        }
      }
    },
    {
      "id": "failover-three",
      "class": "failover-engineer",
      "nixos_config": "./arenas/primary-failover#nixosConfigurations.failover-three.config.system.build.vm",
      "service": {
        "port": 8080,
        "path": "/health",
        "expected_status": 200,
        "expected_body": "ready",
        "health": {
          "poll_interval_ms": 1000,
          "consecutive_failures": 3,
          "recovery_window_seconds": 60
        }
      }
    }
  ],
  "agents": [
    {
      "id": "kimi",
      "territory": "failover-one",
      "adapter": "claux",
      "model": "moonshotai/kimi-k3",
      "reasoning_effort": "high",
      "budget": {
        "resource_units": 900,
        "max_cost_microusd": null
      }
    },
    {
      "id": "deepseek",
      "territory": "failover-three",
      "adapter": "claux",
      "model": "deepseek/deepseek-v4.1-flash",
      "reasoning_effort": "high",
      "budget": {
        "resource_units": 900,
        "max_cost_microusd": null
      }
    },
    {
      "id": "glm",
      "territory": "failover-two",
      "adapter": "claux",
      "model": "z-ai/glm-5.3",
      "reasoning_effort": "high",
      "budget": {
        "resource_units": 900,
        "max_cost_microusd": null
      }
    }
  ]
}