{
  "assessment": {
    "all_ok": true,
    "report_success_checks": {
      "agent_invocation_observed_via_reconcile_service": true,
      "agent_service_unit_present": true,
      "enabled_peer_count_preserved": true,
      "manual_agent_service_start_not_used": true,
      "pending_global_zero_after": true,
      "private_material_not_published": true,
      "reconcile_script_installed": true,
      "reconcile_script_syntax_ok": true,
      "reconcile_service_unit_installed": true,
      "reconcile_timer_active": true,
      "reconcile_timer_enabled": true,
      "reconcile_timer_listed": true,
      "reconcile_timer_unit_installed": true,
      "reconcile_validation_start_ok": true,
      "vm100_peer_count_still_five": true,
      "vm100_selector_count_still_five": true,
      "vm100_uci_still_empty": true,
      "vm101_legacy_table200_vpn1_still_ok": true,
      "vm101_table202_vpn2_still_ok": true
    }
  },
  "changes": {
    "agent_service_started_manually": "NO",
    "private_material_published": "NO",
    "reconcile_service_installed": "YES",
    "reconcile_service_started_for_validation": "YES",
    "reconcile_timer_enabled": "YES",
    "reconcile_timer_installed": "YES",
    "reconcile_timer_started": "YES",
    "vm100_changed": "NO_EXPECTED",
    "vm101_changed": "NO",
    "vm121_changed": "YES"
  },
  "current_state_quick": {
    "vm100_peer_count": 5,
    "vm100_selector_count": 5,
    "vm100_uci_wireguard_wg_paid_section_count": 0,
    "vm101_legacy_table200_vpn1_rc": 0,
    "vm101_table202_vpn2_rc": 0
  },
  "implementation": {
    "actions": {
      "backup_root": "/opt/wg-access/backups/STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT_20260709-095902",
      "systemctl_daemon_reload": {
        "rc": 0,
        "stderr": "",
        "stdout": ""
      },
      "systemctl_enable_timer": {
        "rc": 0,
        "stderr": "Created symlink /etc/systemd/system/timers.target.wants/wg-access-reconcile.timer → /etc/systemd/system/wg-access-reconcile.timer.",
        "stdout": ""
      },
      "systemctl_start_reconcile_for_validation": {
        "rc": 0,
        "stderr": "",
        "stdout": ""
      },
      "systemctl_start_timer": {
        "rc": 0,
        "stderr": "",
        "stdout": ""
      }
    },
    "assessment": {
      "all_ok": true,
      "ready_for_042E_happy_path_without_manual_agent_start": true,
      "success_checks": {
        "agent_invocation_observed_via_reconcile_service": true,
        "agent_service_unit_present": true,
        "enabled_peer_count_preserved": true,
        "manual_agent_service_start_not_used": true,
        "pending_global_zero_after": true,
        "private_material_not_published": true,
        "reconcile_script_installed": true,
        "reconcile_script_syntax_ok": true,
        "reconcile_service_unit_installed": true,
        "reconcile_timer_active": true,
        "reconcile_timer_enabled": true,
        "reconcile_timer_listed": true,
        "reconcile_timer_unit_installed": true,
        "reconcile_validation_start_ok": true
      }
    },
    "changes": {
      "agent_service_started_manually": "NO",
      "private_material_published": "NO",
      "reconcile_service_installed": "YES",
      "reconcile_service_started_for_validation": "YES",
      "reconcile_timer_enabled": "YES",
      "reconcile_timer_installed": "YES",
      "reconcile_timer_started": "YES",
      "vm100_changed": "NO_EXPECTED",
      "vm101_changed": "NO",
      "vm121_changed": "YES"
    },
    "errors": [],
    "mode": "IMPLEMENT_RECONCILE_SERVICE_TIMER",
    "precheck": {
      "agent_service_cat": {
        "rc": 0,
        "stderr": "",
        "stdout": "# /etc/systemd/system/wg-access-agent.service\n[Unit]\nDescription=WG Access Agent real poller\nAfter=network-online.target docker.service\nWants=network-online.target\n\n[Service]\nType=oneshot\nUser=root\nWorkingDirectory=/opt/wg-access/agent\nEnvironment=WG_ACCESS_AGENT_ENV=/opt/wg-access/agent/agent.env\nExecStart=/opt/wg-access/agent/wg_access_agent.py"
      },
      "agent_service_is_active": {
        "rc": 3,
        "stderr": "",
        "stdout": "inactive"
      },
      "agent_service_is_enabled": {
        "rc": 0,
        "stderr": "",
        "stdout": "static"
      },
      "agent_service_unit_exists": true,
      "enabled_peer_count_before": 5,
      "pending_global_before": 0
    },
    "rollback": {
      "script": "/root/rollback-step042d-reconcile-20260709-095902.sh"
    },
    "schema": "router-step-facts-v1",
    "step": "STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT",
    "validation": {
      "agent_journal_recent": "6: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.\nJul 09 09:59:03 wg-access-dev systemd[1]: Starting wg-access-agent.service - WG Access Agent real poller...\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.360202+00:00] sync desired enabled peers: 5\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.523016+00:00] remote stdout: fmcqSUy1fErBV5RrcoVoex2VAgaxz2i79GzK8qd88UI=        10.253.1.10/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: zwzkWJkpX7q5PfcT9pG2v52Es4yM0VRP3w1drj7LJmw=        10.253.1.11/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: HknQ+VpqOIvsd3RxkrgaUqiR7zkS9nMfDRzDAvdqUVw=        10.253.1.12/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: JQXornv9vzH7nn9E1laZehYLnwMXuitP+eP35Gde0D4=        10.253.1.13/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: Kl5Ox5HbG4yvDUxkRuoyZmAF3Wx5HW0lHbVS9B0vFXM=        10.253.1.14/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.523110+00:00] sync current runtime peers: 5\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.523186+00:00] sync keep peer tunnel_ip=10.253.1.10\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.523243+00:00] sync keep peer tunnel_ip=10.253.1.11\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.523297+00:00] sync keep peer tunnel_ip=10.253.1.12\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.523349+00:00] sync keep peer tunnel_ip=10.253.1.13\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.523403+00:00] sync keep peer tunnel_ip=10.253.1.14\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.706609+00:00] remote stdout: interface: wg_paid\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   public key: FD1J+KVZ965pCjgtO0YWxJsKANY9uz6v1P54JLkiZzY=\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   private key: (hidden)\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   listening port: 51830\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: peer: Kl5Ox5HbG4yvDUxkRuoyZmAF3Wx5HW0lHbVS9B0vFXM=\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   preshared key: (hidden)\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   endpoint: 10.71.100.2:56264\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   allowed ips: 10.253.1.14/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   latest handshake: 18 minutes, 54 seconds ago\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   transfer: 820 B received, 3.61 KiB sent\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: peer: JQXornv9vzH7nn9E1laZehYLnwMXuitP+eP35Gde0D4=\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   preshared key: (hidden)\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   endpoint: 10.71.100.2:39020\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   allowed ips: 10.253.1.13/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   latest handshake: 18 hours, 46 minutes, 30 seconds ago\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   transfer: 1.35 KiB received, 6.96 KiB sent\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: peer: HknQ+VpqOIvsd3RxkrgaUqiR7zkS9nMfDRzDAvdqUVw=\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   preshared key: (hidden)\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   endpoint: 10.71.100.2:41351\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   allowed ips: 10.253.1.12/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   latest handshake: 19 hours, 48 minutes, 37 seconds ago\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   transfer: 692 B received, 3.48 KiB sent\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: peer: zwzkWJkpX7q5PfcT9pG2v52Es4yM0VRP3w1drj7LJmw=\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   preshared key: (hidden)\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   endpoint: 10.71.100.2:35150\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   allowed ips: 10.253.1.11/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   latest handshake: 20 hours, 2 minutes, 14 seconds ago\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   transfer: 1.35 KiB received, 6.96 KiB sent\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: peer: fmcqSUy1fErBV5RrcoVoex2VAgaxz2i79GzK8qd88UI=\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   preshared key: (hidden)\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   endpoint: 10.71.100.2:40520\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   allowed ips: 10.253.1.10/32\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   latest handshake: 20 hours, 53 minutes, 33 seconds ago\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]:   transfer: 3.38 KiB received, 17.40 KiB sent\nJul 09 09:59:03 wg-access-dev wg_access_agent.py[128348]: [2026-07-09T09:59:03.714384+00:00] no pending jobs\nJul 09 09:59:03 wg-access-dev systemd[1]: wg-access-agent.service: Deactivated successfully.\nJul 09 09:59:03 wg-access-dev systemd[1]: Finished wg-access-agent.service - WG Access Agent real poller.",
      "agent_show_after_reconcile_validation": "Result=success\nExecMainStartTimestampMonotonic=59859080487\nExecMainStatus=0\nInvocationID=09e991cf43364643929e8ba10ab306e6",
      "agent_show_before_reconcile_validation": "Result=success\nExecMainStartTimestampMonotonic=59859080487\nExecMainStatus=0\nInvocationID=09e991cf43364643929e8ba10ab306e6",
      "enabled_peer_count_after": 5,
      "list_timer": {
        "rc": 0,
        "stderr": "",
        "stdout": "-                           -           Thu 2026-07-09 09:59:03 UTC 61ms ago     wg-access-reconcile.timer            wg-access-reconcile.service"
      },
      "pending_global_after": 0,
      "reconcile_journal_recent": "Jul 09 09:59:03 wg-access-dev systemd[1]: /etc/systemd/system/wg-access-reconcile.service:3: Invalid URL, ignoring: STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nJul 09 09:59:03 wg-access-dev systemd[1]: /etc/systemd/system/wg-access-reconcile.service:3: Invalid URL, ignoring: STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nJul 09 09:59:03 wg-access-dev systemd[1]: /etc/systemd/system/wg-access-reconcile.service:3: Invalid URL, ignoring: STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nJul 09 09:59:03 wg-access-dev systemd[1]: /etc/systemd/system/wg-access-reconcile.service:3: Invalid URL, ignoring: STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nJul 09 09:59:03 wg-access-dev systemd[1]: /etc/systemd/system/wg-access-reconcile.service:3: Invalid URL, ignoring: STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nJul 09 09:59:03 wg-access-dev systemd[1]: /etc/systemd/system/wg-access-reconcile.service:3: Invalid URL, ignoring: STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nJul 09 09:59:03 wg-access-dev systemd[1]: /etc/systemd/system/wg-access-reconcile.service:3: Invalid URL, ignoring: STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nJul 09 09:59:03 wg-access-dev systemd[1]: Starting wg-access-reconcile.service - WG Access reconcile VM100 runtime peers from VM121 DB...\nJul 09 09:59:03 wg-access-dev wg-access-reconcile-now.sh[128335]: [wg-access-reconcile] start 2026-07-09T09:59:03+00:00\nJul 09 09:59:03 wg-access-dev wg-access-reconcile-now.sh[128335]: [wg-access-reconcile] source=systemd-reconcile-service\nJul 09 09:59:03 wg-access-dev wg-access-reconcile-now.sh[128361]: Result=success\nJul 09 09:59:03 wg-access-dev wg-access-reconcile-now.sh[128361]: ExecMainStartTimestamp=Thu 2026-07-09 09:59:03 UTC\nJul 09 09:59:03 wg-access-dev wg-access-reconcile-now.sh[128361]: ExecMainExitTimestamp=Thu 2026-07-09 09:59:03 UTC\nJul 09 09:59:03 wg-access-dev wg-access-reconcile-now.sh[128361]: ExecMainStatus=0\nJul 09 09:59:03 wg-access-dev wg-access-reconcile-now.sh[128335]: [wg-access-reconcile] done 2026-07-09T09:59:03+00:00\nJul 09 09:59:03 wg-access-dev systemd[1]: wg-access-reconcile.service: Deactivated successfully.\nJul 09 09:59:03 wg-access-dev systemd[1]: Finished wg-access-reconcile.service - WG Access reconcile VM100 runtime peers from VM121 DB.",
      "script_bash_syntax": {
        "rc": 0,
        "stderr": "",
        "stdout": ""
      },
      "service_cat": {
        "rc": 0,
        "stderr": "",
        "stdout": "# /etc/systemd/system/wg-access-reconcile.service\n[Unit]\nDescription=WG Access reconcile VM100 runtime peers from VM121 DB\nDocumentation=STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\nAfter=network-online.target docker.service wg-access-agent.service\nWants=network-online.target docker.service\nConditionPathExists=/usr/local/sbin/wg-access-reconcile-now.sh\n\n[Service]\nType=oneshot\nExecStart=/usr/local/sbin/wg-access-reconcile-now.sh\nTimeoutStartSec=360\nNice=5"
      },
      "timer_active": {
        "rc": 0,
        "stderr": "",
        "stdout": "active"
      },
      "timer_cat": {
        "rc": 0,
        "stderr": "",
        "stdout": "# /etc/systemd/system/wg-access-reconcile.timer\n[Unit]\nDescription=WG Access reconcile boot and safety timer\nDocumentation=STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT\n\n[Timer]\nOnBootSec=90s\nOnUnitActiveSec=5min\nRandomizedDelaySec=15s\nPersistent=true\nUnit=wg-access-reconcile.service\n\n[Install]\nWantedBy=timers.target"
      },
      "timer_enabled": {
        "rc": 0,
        "stderr": "",
        "stdout": "enabled"
      }
    }
  },
  "mode": "IMPLEMENT_AND_VALIDATE_RECONCILE_TIMER",
  "publish": {
    "local_report": "http://127.0.0.1:8099/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260709-095902_step042d_reconcile_on_boot_and_safety_timer_implement/",
    "trycf_report": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260709-095902_step042d_reconcile_on_boot_and_safety_timer_implement/"
  },
  "rollback": {
    "script": "/root/rollback-step042d-reconcile-20260709-095902.sh"
  },
  "schema": "router-step-facts-v1",
  "step": "STEP_042D_RECONCILE_ON_BOOT_AND_SAFETY_TIMER_IMPLEMENT"
}
