Finished · first durable deployment

zero-downtime-rollout-real-20260813-123033

rollout-two won: first durable deployment

Winnerrollout-two
Durable in1:58
Recorded cost$0.0549
Tokens92,369
Match replay

Watch the race unfold

Play the referee's event stream or scrub directly to any moment.

0:00
Start1:58

How they fought

Deterministic analysis of observable tool calls. Private model reasoning is never parsed.

AgentFirst changeDiscoveryChangesLifecycleChecksErrorsArchitecture seen
glm-rollout-engineerz-ai/glm-5.20:3422260
PythonSQLitesystemdetc/systemd/system/rollout-v2.servicerollout-v2.service
luna-rollout-engineeropenai/gpt-5.6-luna0:0647142
PythonSQLitesystemdrollout-proxy.servicerollout-v1.servicerollout-v2.service
glm-rollout-engineer12 observed tool calls
  1. ValidationInspect rollout servicessystemctl list-units --all 'rollout*' --no-pager 2>&1; echo "---"; systemctl status rollout-proxy rollout-v1 rollout-v2 --no-pager 2>&1 | head -60
  2. ValidationInspect rollout files and portsls -la /opt/rollout/ /var/lib/rollout/ 2>&1; echo "---UPSTREAM---"; cat /var/lib/rollout/upstream 2>&1; echo; echo "---PORTS---"; ss -ltnp 2>&1 | grep -E '808[012]'
  3. DiscoveryInspect unit and service codecat /etc/systemd/system/rollout-v2.service; echo "---PROXY---"; cat /nix/store/08ib8hkpsxizx3zrsv266idphl0r1hgb-rollout-proxy.py; echo "---V1---"; cat /nix/store/13qi755lbgrlrh6c5jqjdlpf1f7nvffv-rollout-v1.py
  4. DiscoveryInspect database schemapython3 -c " import sqlite3 c=sqlite3.connect('/var/lib/rollout/records.sqlite3') for row in c.execute(\"SELECT name,sql FROM sqlite_master WHERE type='table'\"): print(row) print('---ROWS---') try: for row in c.execute('SELECT * FROM records LIMIT 5'): print(row) except Exception as e: print('err',e) print('---COUNT---') try: print(c.execute('SELECT COUNT(*) FROM records').fetchone()) except Exception as e: print('err',e) "
  5. MutationWrite /opt/rollout/v2.pyWrite /opt/rollout/v2.py
  6. LifecycleStart v2 servicesystemctl reset-failed rollout-v2.service && systemctl start rollout-v2.service && sleep 1 && systemctl is-active rollout-v2.service && ss -ltnp 2>&1 | grep 8082
  7. ValidationVerify v2 endpoints directlyecho "--health--"; curl -s -o /tmp/h -w "%{http_code}\n" http://127.0.0.1:8082/health; cat /tmp/h; echo; echo "--version--"; curl -s -o /tmp/v -w "%{http_code}\n" http://127.0.0.1:8082/version; cat /tmp/v; echo; echo "--existing rec1--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8082/records/customer-alpha-73c; echo "--existing rec2--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8082/records/customer-beta-a19; echo "--missing--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8082/records/does-not-exist
  8. ValidationTest v2 PUT and check public endpoint pre-switchecho "--put v2--"; curl -s -w "%{http_code}\n" -X PUT --data-binary 'v2-test-payload' http://127.0.0.1:8082/records/v2-cutover-probe; echo "--get v2 probe--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8082/records/v2-cutover-probe; echo "--public version (pre-switch)--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/version; echo "--public health--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/health
  9. MutationAtomically switch upstream to 8082cd /var/lib/rollout && printf '8082' > upstream.tmp && mv -f upstream.tmp upstream && echo "switched" && cat upstream; echo
  10. ValidationVerify public endpoint now served by v2echo "--public version--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/version; echo "--public health--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/health; echo "--rec1--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/records/customer-alpha-73c; echo "--rec2--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/records/customer-beta-a19; echo "--probe--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/records/v2-cutover-probe; echo "--missing--"; curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/records/missing
  11. LifecycleRestart v2 and verify recoverysystemctl restart rollout-v2.service && sleep 1 && systemctl is-active rollout-v2.service && echo "--after restart--" && curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/version && curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/health && curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/records/customer-alpha-73c && curl -s -w "\n%{http_code}\n" http://127.0.0.1:8080/records/customer-beta-a19
  12. ValidationConfirm enabled state, ports, upstream, recordsecho "--enabled states--"; for u in rollout-proxy rollout-v1 rollout-v2; do printf "%s: " "$u"; systemctl is-enabled "$u"; done; echo "--final ports--"; ss -ltnp 2>&1 | grep -E '808[012]'; echo "--upstream--"; cat /var/lib/rollout/upstream; echo; echo "--db intact--"; python3 -c "import sqlite3;c=sqlite3.connect('/var/lib/rollout/records.sqlite3');print(c.execute('SELECT id,value FROM records ORDER BY id').fetchall())"
luna-rollout-engineer16 observed tool calls
  1. MutationInspect service status, upstream, and databasesystemctl status --no-pager rollout-v1.service rollout-v2.service rollout-proxy.service; printf '\n--- upstream ---\n'; stat -c '%A %U:%G %n' /var/lib/rollout/upstream; od -An -tx1 -c /var/lib/rollout/upstream; printf '\n--- records ---\n'; stat -c '%A %U:%G %s %n' /var/lib/rollout/records.sqlite3; sqlite3 /var/lib/rollout/records.sqlite3 '.tables' '.schema' 'select count(*) from records;'
  2. DiscoveryInspect rollout unit definitions and deployed filesprintf '%s\n' '--- unit files ---'; systemctl cat rollout-v1.service rollout-v2.service rollout-proxy.service; printf '%s\n' '--- deployed files ---'; ls -l /opt/rollout /var/lib/rollout
  3. ValidationCheck public endpoint and listenersprintf '%s\n' '--- public checks ---'; curl -sS -i http://127.0.0.1:8080/health; curl -sS -i http://127.0.0.1:8080/version; printf '%s\n' '--- process/listeners ---'; ss -ltnp | grep -E ':(8080|8081|8082)\b' || true
  4. DiscoveryRead /nix/store/13qi755lbgrlrh6c5jqjdlpf1f7nvffv-rollout-v1.pyRead /nix/store/13qi755lbgrlrh6c5jqjdlpf1f7nvffv-rollout-v1.py
  5. MutationInspect existing record values without modifying statesqlite3 -header -column /var/lib/rollout/records.sqlite3 'select id, quote(value), typeof(value), length(value) from records order by id;'
  6. ValidationInspect v2 startup failure logsjournalctl -u rollout-v2.service --no-pager -n 30 -o cat
  7. DiscoveryInspect v2 deployment path and service identityls -la /opt /opt/rollout; namei -l /opt/rollout/v2.py 2>&1 || true; systemctl is-enabled rollout-v2.service; systemctl show rollout-v2.service -p User -p Group -p WorkingDirectory -p ExecStart
  8. MutationWrite /opt/rollout/v2.pyWrite /opt/rollout/v2.py
  9. MutationEdit /opt/rollout/v2.pyEdit /opt/rollout/v2.py
  10. LifecycleStart v2 and validate readiness and existing recordspython_bin=/nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python; "$python_bin" -m py_compile /opt/rollout/v2.py && systemctl reset-failed rollout-v2.service && systemctl start rollout-v2.service && sleep 0.3 && systemctl is-active rollout-v2.service && curl --fail --silent --show-error http://127.0.0.1:8082/health && printf '\n' && curl --fail --silent --show-error http://127.0.0.1:8082/version && printf '\n' && curl --fail --silent --show-error http://127.0.0.1:8082/records/customer-alpha-73c && printf '\n' && curl --fail --silent --show-error http://127.0.0.1:8082/records/customer-beta-a19 && printf '\n' && curl --silent --show-error -o /dev/null -w 'missing status=%{http_…
  11. MutationValidate v2 UTF-8 PUT/GET and restore test stateset -e id='__v2_preflight__' body='v2-✓-payload' printf '%s' "$body" | curl --fail --silent --show-error --request PUT --data-binary @- -H 'Content-Type: application/octet-stream' -o /dev/null -w 'PUT status=%{http_code}\n' "http://127.0.0.1:8082/records/$id" actual=$(curl --fail --silent --show-error "http://127.0.0.1:8082/records/$id") test "$actual" = "$body" printf 'GET exact UTF-8 body: yes\n' sqlite3 /var/lib/rollout/records.sqlite3 "delete from records where id='$id';" test "$(sqlite3 /var/lib/rollout/records.sqlite3 "select count(*) from records where id='$id';")" = 0 printf 'preflight record cleanup: yes\n' for id in customer-alpha-73c customer-beta-a19; do curl --fail --silent --sh…
  12. ValidationAtomically switch proxy upstream to ready v2set -e curl --fail --silent --show-error http://127.0.0.1:8082/health | grep -Fx ready >/dev/null curl --fail --silent --show-error http://127.0.0.1:8082/version | grep -Fx v2 >/dev/null for id in customer-alpha-73c customer-beta-a19; do curl --fail --silent --show-error "http://127.0.0.1:8082/records/$id" >/dev/null done /nix/store/3n4qphl9s728sz8frmpqqrv9b1m87g68-python3-3.14.7/bin/python - <<'PY' import os import tempfile path = "/var/lib/rollout/upstream" directory = os.path.dirname(path) fd, temporary = tempfile.mkstemp(prefix=".upstream.", dir=directory) try: os.write(fd, b"8082\n") os.fsync(fd) os.fchmod(fd, os.stat(path).st_mode & 0o7777) os.fchown(fd, os.stat(path…
  13. MutationRun final public contract and service health checksset -euo pipefail work=$(mktemp -d) trap 'rm -rf "$work"' EXIT printf ready > "$work/health.expected" printf v2 > "$work/version.expected" printf alpha-original > "$work/alpha.expected" printf beta-original > "$work/beta.expected" check_body() { local url=$1 expected=$2 label=$3 local status status=$(curl --silent --show-error --output "$work/$label.actual" --write-out '%{http_code}' "$url") test "$status" = 200 cmp "$expected" "$work/$label.actual" } check_body http://127.0.0.1:8080/health "$work/health.expected" public-health check_body http://127.0.0.1:8080/version "$work/version.expected" public-version check_body http://127.0.0.1:8080/records/customer-alpha-73c "$work/alpha.e…
  14. ValidationConfirm all rollout services are enabled, active, and listeningprintf '%s\n' '--- service summary ---'; systemctl is-enabled rollout-v2.service rollout-proxy.service rollout-v1.service; systemctl is-active rollout-v2.service rollout-proxy.service rollout-v1.service; systemctl show rollout-v2.service rollout-proxy.service rollout-v1.service -p MainPID -p NRestarts --no-pager; printf '%s\n' '--- recent v2 log ---'; journalctl -u rollout-v2.service --no-pager -n 12 -o cat; printf '%s\n' '--- listeners ---'; ss -ltnp | grep -E ':(8080|8081|8082)\b'
  15. DiscoveryRead /nix/store/08ib8hkpsxizx3zrsv266idphl0r1hgb-rollout-proxy.pyRead /nix/store/08ib8hkpsxizx3zrsv266idphl0r1hgb-rollout-proxy.py
  16. MutationStress-check the public v2 route for stable availabilityset -e for i in $(seq 1 100); do test "$(curl --silent --show-error http://127.0.0.1:8080/health)" = ready test "$(curl --silent --show-error http://127.0.0.1:8080/version)" = v2 test "$(curl --silent --show-error http://127.0.0.1:8080/records/customer-alpha-73c)" = alpha-original done printf '%s\n' '100 consecutive public health/version/existing-record checks: PASS' test "$(cat /var/lib/rollout/upstream)" = '8082' test "$(sqlite3 /var/lib/rollout/records.sqlite3 'select count(*) from records;')" = 2 printf '%s\n' 'final upstream and record-count checks: PASS'

Territories

The referee-owned result frozen when the first deployment became durable.

TerritoryStateMilestonesPointsDurable at
rollout-onedeepseek-rollout-engineerverifying1/25
rollout-threeglm-rollout-engineerverifying4/580
rollout-twoluna-rollout-engineerdurable5/51001:58

Agents

Exact model, harness, reasoning configuration, and cumulative usage recorded for this match.

AgentModelHarnessReasoningOutcomeInputOutputCostArtifact
deepseek-rollout-engineerrollout-onedeepseek/deepseek-v4-flash-0731unavailableunavailableterminatedn/an/an/a
glm-rollout-engineerrollout-threez-ai/glm-5.2unavailableunavailablecompleted87,7804,589$0.0549transcript · analysis
luna-rollout-engineerrollout-twoopenai/gpt-5.6-lunaunavailableunavailableinterruptedn/an/an/atranscript · analysis

Match provenance

Immutable identifiers for reproducing and comparing this result.

EngineAgents of Empires v0.1.0
Source revisiond6a2f1d1f157
Arenazero-downtime-rolloutbuildrace · schema unavailable
Compatibility key253a6321cd82
Manifest3652fb159d43
Verifiera5b820a5c626
Harness adaptersclaux954c06a9c104

Event timeline

47 immutable events. The match clock remains frozen during post-match collection.

  1. Match state changed
    event #0
    {
      "elapsed_ms": 0,
      "from": "preparing",
      "kind": "match_state_changed",
      "schema_version": 1,
      "sequence": 0,
      "to": "running"
    }
  2. Competitor state changedrollout-one
    event #1
    {
      "elapsed_ms": 0,
      "from": "preparing",
      "kind": "competitor_state_changed",
      "reason": "SSH preflight passed",
      "schema_version": 1,
      "sequence": 1,
      "territory": "rollout-one",
      "to": "building"
    }
  3. Competitor state changedrollout-three
    event #2
    {
      "elapsed_ms": 0,
      "from": "preparing",
      "kind": "competitor_state_changed",
      "reason": "SSH preflight passed",
      "schema_version": 1,
      "sequence": 2,
      "territory": "rollout-three",
      "to": "building"
    }
  4. Competitor state changedrollout-two
    event #3
    {
      "elapsed_ms": 0,
      "from": "preparing",
      "kind": "competitor_state_changed",
      "reason": "SSH preflight passed",
      "schema_version": 1,
      "sequence": 3,
      "territory": "rollout-two",
      "to": "building"
    }
  5. Territory registeredrollout-one
    event #4
    {
      "agent": "deepseek-rollout-engineer",
      "class": "rollout-engineer",
      "elapsed_ms": 0,
      "kind": "territory_registered",
      "schema_version": 1,
      "sequence": 4,
      "territory": "rollout-one"
    }
  6. Territory registeredrollout-two
    event #5
    {
      "agent": "luna-rollout-engineer",
      "class": "rollout-engineer",
      "elapsed_ms": 0,
      "kind": "territory_registered",
      "schema_version": 1,
      "sequence": 5,
      "territory": "rollout-two"
    }
  7. Territory registeredrollout-three
    event #6
    {
      "agent": "glm-rollout-engineer",
      "class": "rollout-engineer",
      "elapsed_ms": 0,
      "kind": "territory_registered",
      "schema_version": 1,
      "sequence": 6,
      "territory": "rollout-three"
    }
  8. Agent startedrollout-one
    event #7
    {
      "agent": "deepseek-rollout-engineer",
      "elapsed_ms": 0,
      "kind": "agent_started",
      "model": "deepseek/deepseek-v4-flash-0731",
      "schema_version": 1,
      "sequence": 7,
      "territory": "rollout-one"
    }
  9. Agent startedrollout-two
    event #8
    {
      "agent": "luna-rollout-engineer",
      "elapsed_ms": 0,
      "kind": "agent_started",
      "model": "openai/gpt-5.6-luna",
      "schema_version": 1,
      "sequence": 8,
      "territory": "rollout-two"
    }
  10. Agent startedrollout-three
    event #9
    {
      "agent": "glm-rollout-engineer",
      "elapsed_ms": 0,
      "kind": "agent_started",
      "model": "z-ai/glm-5.2",
      "schema_version": 1,
      "sequence": 9,
      "territory": "rollout-three"
    }
  11. Competitor state changedrollout-one
    event #10
    {
      "elapsed_ms": 251,
      "from": "building",
      "kind": "competitor_state_changed",
      "reason": "milestone verification began",
      "schema_version": 1,
      "sequence": 10,
      "territory": "rollout-one",
      "to": "verifying"
    }
  12. Milestone evaluation startedrollout-one
    event #11
    {
      "elapsed_ms": 251,
      "kind": "milestone_evaluation_started",
      "milestone": "baseline-ready",
      "schema_version": 1,
      "sequence": 11,
      "territory": "rollout-one"
    }
  13. Competitor state changedrollout-two
    event #12
    {
      "elapsed_ms": 251,
      "from": "building",
      "kind": "competitor_state_changed",
      "reason": "milestone verification began",
      "schema_version": 1,
      "sequence": 12,
      "territory": "rollout-two",
      "to": "verifying"
    }
  14. Milestone evaluation startedrollout-two
    event #13
    {
      "elapsed_ms": 251,
      "kind": "milestone_evaluation_started",
      "milestone": "baseline-ready",
      "schema_version": 1,
      "sequence": 13,
      "territory": "rollout-two"
    }
  15. Competitor state changedrollout-three
    event #14
    {
      "elapsed_ms": 251,
      "from": "building",
      "kind": "competitor_state_changed",
      "reason": "milestone verification began",
      "schema_version": 1,
      "sequence": 14,
      "territory": "rollout-three",
      "to": "verifying"
    }
  16. Milestone evaluation startedrollout-three
    event #15
    {
      "elapsed_ms": 251,
      "kind": "milestone_evaluation_started",
      "milestone": "baseline-ready",
      "schema_version": 1,
      "sequence": 15,
      "territory": "rollout-three"
    }
  17. Milestone passedrollout-one
    event #16
    {
      "elapsed_ms": 318,
      "evidence": {
        "baseline": "v1",
        "records": [
          "customer-alpha-73c",
          "customer-beta-a19"
        ]
      },
      "kind": "milestone_passed",
      "milestone": "baseline-ready",
      "points": 5,
      "schema_version": 1,
      "sequence": 16,
      "territory": "rollout-one"
    }
  18. Milestone passedrollout-two
    event #17
    {
      "elapsed_ms": 318,
      "evidence": {
        "baseline": "v1",
        "records": [
          "customer-alpha-73c",
          "customer-beta-a19"
        ]
      },
      "kind": "milestone_passed",
      "milestone": "baseline-ready",
      "points": 5,
      "schema_version": 1,
      "sequence": 17,
      "territory": "rollout-two"
    }
  19. Milestone passedrollout-three
    event #18
    {
      "elapsed_ms": 318,
      "evidence": {
        "baseline": "v1",
        "records": [
          "customer-alpha-73c",
          "customer-beta-a19"
        ]
      },
      "kind": "milestone_passed",
      "milestone": "baseline-ready",
      "points": 5,
      "schema_version": 1,
      "sequence": 18,
      "territory": "rollout-three"
    }
  20. Milestone evaluation startedrollout-one
    event #19
    {
      "elapsed_ms": 318,
      "kind": "milestone_evaluation_started",
      "milestone": "uninterrupted-cutover",
      "schema_version": 1,
      "sequence": 19,
      "territory": "rollout-one"
    }
  21. Milestone evaluation startedrollout-two
    event #20
    {
      "elapsed_ms": 318,
      "kind": "milestone_evaluation_started",
      "milestone": "uninterrupted-cutover",
      "schema_version": 1,
      "sequence": 20,
      "territory": "rollout-two"
    }
  22. Milestone evaluation startedrollout-three
    event #21
    {
      "elapsed_ms": 318,
      "kind": "milestone_evaluation_started",
      "milestone": "uninterrupted-cutover",
      "schema_version": 1,
      "sequence": 21,
      "territory": "rollout-three"
    }
  23. Milestone failedrollout-one
    event #22
    {
      "category": "verification_failed",
      "detail": "public endpoint never cut over to v2",
      "elapsed_ms": 100968,
      "kind": "milestone_failed",
      "milestone": "uninterrupted-cutover",
      "retryable": true,
      "schema_version": 1,
      "sequence": 22,
      "territory": "rollout-one"
    }
  24. Milestone passedrollout-two
    event #23
    {
      "elapsed_ms": 100968,
      "evidence": {
        "samples": 637,
        "uninterrupted": true,
        "version": "v2"
      },
      "kind": "milestone_passed",
      "milestone": "uninterrupted-cutover",
      "points": 45,
      "schema_version": 1,
      "sequence": 23,
      "territory": "rollout-two"
    }
  25. Milestone passedrollout-three
    event #24
    {
      "elapsed_ms": 100968,
      "evidence": {
        "samples": 603,
        "uninterrupted": true,
        "version": "v2"
      },
      "kind": "milestone_passed",
      "milestone": "uninterrupted-cutover",
      "points": 45,
      "schema_version": 1,
      "sequence": 24,
      "territory": "rollout-three"
    }
  26. Milestone evaluation startedrollout-two
    event #25
    {
      "elapsed_ms": 100968,
      "kind": "milestone_evaluation_started",
      "milestone": "write-new",
      "schema_version": 1,
      "sequence": 25,
      "territory": "rollout-two"
    }
  27. Milestone evaluation startedrollout-three
    event #26
    {
      "elapsed_ms": 100968,
      "kind": "milestone_evaluation_started",
      "milestone": "write-new",
      "schema_version": 1,
      "sequence": 26,
      "territory": "rollout-three"
    }
  28. Milestone passedrollout-two
    event #27
    {
      "elapsed_ms": 101016,
      "evidence": {
        "record": "rollout-37062b4e6910c573",
        "value": "opaque-404290b9753e8c11ce4a95fc"
      },
      "kind": "milestone_passed",
      "milestone": "write-new",
      "points": 15,
      "schema_version": 1,
      "sequence": 27,
      "territory": "rollout-two"
    }
  29. Milestone passedrollout-three
    event #28
    {
      "elapsed_ms": 101016,
      "evidence": {
        "record": "rollout-d05c474d64e371bf",
        "value": "opaque-8a04b96b2500cd09edcb84eb"
      },
      "kind": "milestone_passed",
      "milestone": "write-new",
      "points": 15,
      "schema_version": 1,
      "sequence": 28,
      "territory": "rollout-three"
    }
  30. Milestone evaluation startedrollout-two
    event #29
    {
      "elapsed_ms": 101016,
      "kind": "milestone_evaluation_started",
      "milestone": "v2-restart",
      "schema_version": 1,
      "sequence": 29,
      "territory": "rollout-two"
    }
  31. Milestone evaluation startedrollout-three
    event #30
    {
      "elapsed_ms": 101016,
      "kind": "milestone_evaluation_started",
      "milestone": "v2-restart",
      "schema_version": 1,
      "sequence": 30,
      "territory": "rollout-three"
    }
  32. Milestone passedrollout-two
    event #31
    {
      "elapsed_ms": 102182,
      "evidence": {
        "record": "rollout-37062b4e6910c573",
        "v2_restart": true,
        "value": "opaque-404290b9753e8c11ce4a95fc"
      },
      "kind": "milestone_passed",
      "milestone": "v2-restart",
      "points": 15,
      "schema_version": 1,
      "sequence": 31,
      "territory": "rollout-two"
    }
  33. Milestone passedrollout-three
    event #32
    {
      "elapsed_ms": 102182,
      "evidence": {
        "record": "rollout-d05c474d64e371bf",
        "v2_restart": true,
        "value": "opaque-8a04b96b2500cd09edcb84eb"
      },
      "kind": "milestone_passed",
      "milestone": "v2-restart",
      "points": 15,
      "schema_version": 1,
      "sequence": 32,
      "territory": "rollout-three"
    }
  34. Milestone evaluation startedrollout-two
    event #33
    {
      "elapsed_ms": 102182,
      "kind": "milestone_evaluation_started",
      "milestone": "host-reboot",
      "schema_version": 1,
      "sequence": 33,
      "territory": "rollout-two"
    }
  35. Milestone evaluation startedrollout-three
    event #34
    {
      "elapsed_ms": 102182,
      "kind": "milestone_evaluation_started",
      "milestone": "host-reboot",
      "schema_version": 1,
      "sequence": 34,
      "territory": "rollout-three"
    }
  36. Milestone passedrollout-two
    event #35
    {
      "elapsed_ms": 118272,
      "evidence": {
        "reboot": true,
        "record": "rollout-37062b4e6910c573",
        "value": "opaque-404290b9753e8c11ce4a95fc",
        "version": "v2"
      },
      "kind": "milestone_passed",
      "milestone": "host-reboot",
      "points": 20,
      "schema_version": 1,
      "sequence": 35,
      "territory": "rollout-two"
    }
  37. Competitor state changedrollout-two
    event #36
    {
      "elapsed_ms": 118272,
      "from": "verifying",
      "kind": "competitor_state_changed",
      "reason": "completion milestone passed",
      "schema_version": 1,
      "sequence": 36,
      "territory": "rollout-two",
      "to": "durable"
    }
  38. Durable deployment completedrollout-two
    event #37
    {
      "elapsed_ms": 118272,
      "kind": "durable_deployment_completed",
      "schema_version": 1,
      "sequence": 37,
      "territory": "rollout-two"
    }
  39. Match state changed
    event #38
    {
      "elapsed_ms": 118272,
      "from": "running",
      "kind": "match_state_changed",
      "schema_version": 1,
      "sequence": 38,
      "to": "finished"
    }
  40. Match finished
    event #39
    {
      "elapsed_ms": 118272,
      "kind": "match_finished",
      "reason": "first durable deployment",
      "schema_version": 1,
      "sequence": 39,
      "winner": "rollout-two"
    }
  41. Post match drain started
    event #40
    {
      "elapsed_ms": 118272,
      "kind": "post_match_drain_started",
      "pending_agents": 3,
      "schema_version": 1,
      "sequence": 40,
      "timeout_ms": 30000
    }
  42. Agent finishedglm-rollout-engineer
    event #41
    {
      "agent": "glm-rollout-engineer",
      "detail": "Now I understand the setup. Let me write the v2 service.v2 is up on 8082. Now verify it directly against the contract, including that it serves the existing records from the shared DB.v2 serves all existing records correctly. Let me verify PUT round-trip on v2 with a test record, then confirm the public endpoint is currently on v1 before cutover.v2 fully functional. Public endpoint is on v1. Now the atomic cutover: write `8082` to a temp file and `rename` over the upstream file (atomic on same fs).Public endpoint is now serving v2 with all records preserved. Now verify durability: restart v2 service and confirm everything survives, then confirm services are enabled for reboot.Rollout complete. Summary:\n\n**What was done**\n- Implemented `/opt/rollout/v2.py` — a stateful record service on `127.0.0.1:8082` mirroring v1's SQLite-backed behavior (same `/var/lib/rollout/records.sqlite3`), with `/health`→`ready`, `/version`→`v2`, and `PUT/GET /records/<id>` per contract.\n- Started `rollout-v2.service` (reset its failed state, started, confirmed `active`).\n- Verified v2 directly: health, version, all existing records (`alpha-original`, `beta-original`), 404 for missing, and a PUT round-trip — all correct.\n- Performed atomic cutover by writing `8082` to `upstream.tmp` and `mv`-ing it over `/var/lib/rollout/upstream` (atomic rename on same filesystem). The proxy reads this file per request, so no request ever saw a partial/missing upstream — both v1 (8081) and v2 (8082) stayed running throughout.\n- Verified the public endpoint (`:8080`) immediately served `v2`, `ready`, and all records intact.\n- Did **not** stop or restart `rollout-proxy.service` or `rollout-v1.service` during cutover.\n\n**Durability verified**\n- `systemctl restart rollout-v2.service` → recovered, public endpoint stayed healthy, all records intact.\n- All three services (`rollout-proxy`, `rollout-v1`, `rollout-v2`) are `enabled`, so they come back after a full host reboot. `rollout-v2.service` has `Restart=always`.\n- Records persisted in the SQLite file; v2 reads the same DB, so existing customer state is preserved across restart/reboot.\n\n**Final state**\n- Proxy (`:8080`) → upstream `8082` (v2), running and enabled.\n- v2 (`:8082`) running, enabled, `Restart=always`.\n- v1 (`:8081`) still running (untouched, as required) and enabled.\n- All records present and correct.",
      "elapsed_ms": 118272,
      "kind": "agent_finished",
      "schema_version": 1,
      "sequence": 41,
      "source": "player",
      "success": true
    }
  43. Usage chargedglm-rollout-engineer
    event #42
    {
      "agent": "glm-rollout-engineer",
      "cost_microusd": 54856,
      "elapsed_ms": 118272,
      "input_tokens": 87780,
      "kind": "usage_charged",
      "output_tokens": 4589,
      "resource_units": 1,
      "schema_version": 1,
      "sequence": 42
    }
  44. Agent interruptedluna-rollout-engineer
    event #43
    {
      "agent": "luna-rollout-engineer",
      "detail": "agent session was interrupted by the referee's host reboot",
      "elapsed_ms": 118272,
      "kind": "agent_interrupted",
      "schema_version": 1,
      "sequence": 43,
      "source": "arena"
    }
  45. Usage chargedluna-rollout-engineer
    event #44
    {
      "agent": "luna-rollout-engineer",
      "cost_microusd": null,
      "elapsed_ms": 118272,
      "input_tokens": null,
      "kind": "usage_charged",
      "output_tokens": null,
      "resource_units": 1,
      "schema_version": 1,
      "sequence": 44
    }
  46. Agent terminateddeepseek-rollout-engineer
    event #45
    {
      "agent": "deepseek-rollout-engineer",
      "elapsed_ms": 118272,
      "kind": "agent_terminated",
      "reason": "post-match drain deadline expired",
      "schema_version": 1,
      "sequence": 45
    }
  47. Post match drain finished
    event #46
    {
      "captured_agents": 2,
      "elapsed_ms": 118272,
      "kind": "post_match_drain_finished",
      "schema_version": 1,
      "sequence": 46,
      "terminated_agents": 1
    }