{
  "adapter_egress2": {
    "adapter": "hmn_pool_replace",
    "apply_performed": false,
    "candidate_endpoint": "109.248.198.4:37129",
    "current_endpoint": "192.121.163.235:42530",
    "decision": "dry_run_ok",
    "epoch": 1783705348,
    "interface": "vpn2",
    "iso": "2026-07-10T17:42:28+00:00",
    "mark": "0x202",
    "max_pool_age_sec": 129600,
    "mode": "--dry-run",
    "pool_is_fresh": true,
    "provider": "hidemyname",
    "reason": "dry_run_candidate_selected",
    "safety": {
      "no_ifup_ifdown": true,
      "no_route_change": true,
      "no_uci_set": true,
      "no_vm100_change": true,
      "no_wg_set": true
    },
    "schema": "router-egress-recovery-hmn-pool-replace-v1",
    "selected_pool": "/root/hmn/cache/ok-awg1-strict-foreign-latest.tsv",
    "selected_pool_age_sec": 2606,
    "selected_pool_endpoint_count": 15,
    "slot": "egress2",
    "table": "202",
    "unused_candidate_count": 10
  },
  "assessment": {
    "all_ok": false,
    "decision": "STOP_STEP_048K_VPN2_ONLY_IFUP_RECOVER",
    "success_checks": {
      "adapter_egress2_still_dryrun_ok": true,
      "bounded_vpn2_only_action": true,
      "endpoint_fingerprint_unchanged": true,
      "ifup_vpn2_rc_zero": true,
      "lock_acquired": true,
      "prod_strict_all_ok": false,
      "replacement_not_performed": true,
      "table202_post_has_route": true,
      "uci_set_not_performed": true,
      "vm100_change_not_performed": true,
      "vm100_controller_v7_running": true,
      "vm100_crosscheck_rc_zero": true,
      "vm100_peers_five": true,
      "vm101_rc_zero": true,
      "vm121_agent_points_to_vm100": true,
      "vm121_crosscheck_rc_zero": true,
      "vm121_db_pending_zero": true,
      "vpn2_exists_post": true
    },
    "warnings": [
      "This step performs ifup vpn2 only; it must not change HMN endpoint config.",
      "If table202 remains empty after vpn2 exists, route slots apply may have been attempted.",
      "If STOP, do not proceed to broad recovery; inspect vm101_048k.txt."
    ]
  },
  "mode": "BOUNDED_VPN2_ONLY_IFUP_RECOVER_NO_ENDPOINT_REPLACEMENT",
  "publish": {
    "facts_json": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260710-174133_step048k_vpn2_only_ifup_recover/facts.json",
    "report_txt": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260710-174133_step048k_vpn2_only_ifup_recover/report.txt",
    "trycf_report": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260710-174133_step048k_vpn2_only_ifup_recover/"
  },
  "schema": "router-step-facts-v1",
  "step": "STEP_048K_VPN2_ONLY_IFUP_RECOVER",
  "summary": {
    "adapter_egress2_candidate": "109.248.198.4:37129",
    "adapter_egress2_decision": "dry_run_ok",
    "adapter_egress2_reason": "dry_run_candidate_selected",
    "endpoint_fingerprint_unchanged": true,
    "ifup_vpn2_rc": "0",
    "next_step": "observe_health_or_if_stop_controlled_vpn2_replace",
    "prod_strict_ok": {
      "vpn1": "true",
      "vpn2": "false",
      "vpn3": "true",
      "vpn4": "true",
      "vpn5": "true"
    },
    "route_reapply_performed": "true",
    "route_reapply_rc": "0",
    "table202_post_has_route": "true",
    "vm100_peer_count": "5",
    "vm121_db_summary": {
      "enabled_peers": 5,
      "lease_rows": 5,
      "pending_jobs": 0
    },
    "vpn2_endpoint_post": "192.121.163.235:42530",
    "vpn2_exists_after_ifup": "true",
    "vpn2_exists_post": "true",
    "vpn2_exists_pre": "false",
    "vpn2_operstate_post": "unknown"
  }
}
