{
  "actions": {
    "admin_patched_cleanly": true,
    "admin_restored_from_042c_backup": "/opt/wg-access/backups/STEP_042C_AGENT_EVENT_TRIGGER_FILE_PATH_IMPLEMENT_20260709-095315/admin.py",
    "backup_root": "/opt/wg-access/backups/STEP_042C2_RECOVER_REAPPLY_EVENT_TRIGGER_CLEAN_20260709-095639",
    "docker_restart_backend": {
      "rc": 0,
      "stderr": "",
      "stdout": "wgaccess-backend"
    },
    "systemctl_daemon_reload": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    },
    "systemctl_enable_path": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    },
    "systemctl_restart_path": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    }
  },
  "assessment": {
    "all_ok": true,
    "ready_for_042D_reconcile": true,
    "success_checks": {
      "admin_py_compile_container_ok": true,
      "admin_py_compile_host_ok": true,
      "admin_restored_from_good_backup": true,
      "agent_invocation_observed_after_trigger": true,
      "backend_container_can_write_trigger": true,
      "backend_health_ok": true,
      "backend_openapi_ok": true,
      "backend_restart_ok": true,
      "helper_file_installed": true,
      "manual_agent_service_start_not_used": true,
      "path_unit_active": true,
      "path_unit_enabled": true,
      "pending_global_zero_after": true,
      "private_material_not_published": true,
      "trigger_dir_exists": true,
      "trigger_file_exists": true,
      "trigger_write_from_container_ok": true
    }
  },
  "changes": {
    "agent_service_started_manually": "NO",
    "agent_started_by_path_trigger": "YES",
    "backend_code_changed": "YES",
    "backend_restarted": "YES",
    "private_material_published": "NO",
    "systemd_path_unit_changed": "YES",
    "vm100_changed": "NO",
    "vm101_changed": "NO",
    "vm121_changed": "YES"
  },
  "errors": [],
  "mode": "RECOVER_BACKEND_SOURCE_AND_REAPPLY_EVENT_TRIGGER",
  "precheck": {
    "admin_exists": true,
    "backend_container": "wgaccess-backend",
    "compile_host_before": {
      "rc": 1,
      "stderr": "File \"/opt/wg-access/backend/app/api/admin.py\", line 18\n    def _trigger_wg_access_agent_best_effort() -> None:\n    ^^^\nSyntaxError: invalid syntax",
      "stdout": ""
    },
    "helper_exists_before": false,
    "pending_global_before": 0,
    "service_unit_exists": true,
    "source_backup": "/opt/wg-access/backups/STEP_042C_AGENT_EVENT_TRIGGER_FILE_PATH_IMPLEMENT_20260709-095315/admin.py"
  },
  "rollback": {
    "script": "/root/rollback-step042c2-recover-reapply-20260709-095639.sh"
  },
  "schema": "router-step-facts-v1",
  "step": "STEP_042C2_RECOVER_REAPPLY_EVENT_TRIGGER_CLEAN",
  "validation": {
    "agent_journal_recent": "Jul 09 09:56:40 wg-access-dev systemd[1]: Starting wg-access-agent.service - WG Access Agent real poller...\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.221518+00:00] sync desired enabled peers: 5\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.442021+00:00] remote stdout: fmcqSUy1fErBV5RrcoVoex2VAgaxz2i79GzK8qd88UI=        10.253.1.10/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: zwzkWJkpX7q5PfcT9pG2v52Es4yM0VRP3w1drj7LJmw=        10.253.1.11/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: HknQ+VpqOIvsd3RxkrgaUqiR7zkS9nMfDRzDAvdqUVw=        10.253.1.12/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: JQXornv9vzH7nn9E1laZehYLnwMXuitP+eP35Gde0D4=        10.253.1.13/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: Kl5Ox5HbG4yvDUxkRuoyZmAF3Wx5HW0lHbVS9B0vFXM=        10.253.1.14/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.442131+00:00] sync current runtime peers: 5\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.442217+00:00] sync keep peer tunnel_ip=10.253.1.10\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.442276+00:00] sync keep peer tunnel_ip=10.253.1.11\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.442330+00:00] sync keep peer tunnel_ip=10.253.1.12\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.442380+00:00] sync keep peer tunnel_ip=10.253.1.13\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.442436+00:00] sync keep peer tunnel_ip=10.253.1.14\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.709070+00:00] remote stdout: interface: wg_paid\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   public key: FD1J+KVZ965pCjgtO0YWxJsKANY9uz6v1P54JLkiZzY=\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   private key: (hidden)\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   listening port: 51830\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: peer: Kl5Ox5HbG4yvDUxkRuoyZmAF3Wx5HW0lHbVS9B0vFXM=\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   preshared key: (hidden)\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   endpoint: 10.71.100.2:56264\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   allowed ips: 10.253.1.14/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   latest handshake: 16 minutes, 32 seconds ago\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   transfer: 820 B received, 3.61 KiB sent\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: peer: JQXornv9vzH7nn9E1laZehYLnwMXuitP+eP35Gde0D4=\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   preshared key: (hidden)\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   endpoint: 10.71.100.2:39020\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   allowed ips: 10.253.1.13/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   latest handshake: 18 hours, 44 minutes, 8 seconds ago\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   transfer: 1.35 KiB received, 6.96 KiB sent\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: peer: HknQ+VpqOIvsd3RxkrgaUqiR7zkS9nMfDRzDAvdqUVw=\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   preshared key: (hidden)\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   endpoint: 10.71.100.2:41351\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   allowed ips: 10.253.1.12/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   latest handshake: 19 hours, 46 minutes, 15 seconds ago\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   transfer: 692 B received, 3.48 KiB sent\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: peer: zwzkWJkpX7q5PfcT9pG2v52Es4yM0VRP3w1drj7LJmw=\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   preshared key: (hidden)\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   endpoint: 10.71.100.2:35150\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   allowed ips: 10.253.1.11/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   latest handshake: 19 hours, 59 minutes, 52 seconds ago\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   transfer: 1.35 KiB received, 6.96 KiB sent\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: peer: fmcqSUy1fErBV5RrcoVoex2VAgaxz2i79GzK8qd88UI=\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   preshared key: (hidden)\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   endpoint: 10.71.100.2:40520\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   allowed ips: 10.253.1.10/32\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   latest handshake: 20 hours, 51 minutes, 11 seconds ago\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]:   transfer: 3.38 KiB received, 17.40 KiB sent\nJul 09 09:56:41 wg-access-dev wg_access_agent.py[127545]: [2026-07-09T09:56:41.716832+00:00] no pending jobs\nJul 09 09:56:41 wg-access-dev systemd[1]: wg-access-agent.service: Deactivated successfully.\nJul 09 09:56:41 wg-access-dev systemd[1]: Finished wg-access-agent.service - WG Access Agent real poller.",
    "agent_show_after_trigger": "Result=success\nExecMainStartTimestamp=Thu 2026-07-09 09:56:40 UTC\nExecMainStartTimestampMonotonic=59716052202\nExecMainStatus=0\nInvocationID=d0c4b78a78b84f46af3a040b1d13e2e0",
    "agent_show_before_trigger": "Result=success\nExecMainStartTimestamp=Thu 2026-07-09 09:56:40 UTC\nExecMainStartTimestampMonotonic=59716052202\nExecMainStatus=0\nInvocationID=d0c4b78a78b84f46af3a040b1d13e2e0",
    "backend_container_write_trigger": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    },
    "backend_health": {
      "rc": 0,
      "stderr": "",
      "stdout": "{\"status\":\"ok\",\"service\":\"wg-access-backend\",\"environment\":\"dev\"}"
    },
    "backend_openapi": {
      "rc": 0,
      "stderr": "",
      "stdout": "rc=0"
    },
    "compile_after_restore_before_patch": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    },
    "compile_container_after_patch": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    },
    "compile_host_after_patch": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    },
    "path_active": {
      "rc": 0,
      "stderr": "",
      "stdout": "active"
    },
    "path_enabled": {
      "rc": 0,
      "stderr": "",
      "stdout": "enabled"
    },
    "path_journal_recent": "Jul 09 09:56:40 wg-access-dev systemd[1]: wg-access-agent.path: Deactivated successfully.\nJul 09 09:56:40 wg-access-dev systemd[1]: Stopped wg-access-agent.path - WG Access agent event trigger path.\nJul 09 09:56:40 wg-access-dev systemd[1]: Stopping wg-access-agent.path - WG Access agent event trigger path...\nJul 09 09:56:40 wg-access-dev systemd[1]: Started wg-access-agent.path - WG Access agent event trigger path.",
    "pending_global_after": 0,
    "trigger_write_for_invocation_from_container": {
      "rc": 0,
      "stderr": "",
      "stdout": ""
    }
  }
}
