{
  "adapter_contract": {
    "dry_run_behavior": "resolve failed slot and choose unused alive/ranked HMN candidate without applying",
    "future_apply_behavior": "backup, apply candidate to failed interface, strict-test, commit or rollback/try next",
    "health_monitor_dependency": "router-egress-slot-health status only",
    "name": "hmn_pool_replace",
    "slot_stability_rule": "keep slot_id/interface/table/mark/dscp stable; replace provider config inside failed slot only"
  },
  "assessment": {
    "all_ok": false,
    "decision": "STOP_STEP_048G_HMN_RECOVERY_ADAPTER_DRYRUN_DESIGN",
    "success_checks": {
      "dryrun_candidate_has_source_file": false,
      "dryrun_candidate_selected": false,
      "dryrun_no_apply": true,
      "has_hmn_pool_endpoints": true,
      "has_script_rank_keywords": true,
      "has_script_replace_keywords": true,
      "has_strict_test_keywords": true,
      "has_unused_hmn_candidates": false,
      "health_status_exists": true,
      "hmn_dir_exists": true,
      "slots_conf_exists": true,
      "synthetic_adapter_hmn_pool_replace": true,
      "synthetic_provider_hmn": true,
      "synthetic_slot_resolved": 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_enabled_peers_five": true,
      "vm121_db_pending_zero": true
    },
    "warnings": [
      "Read-only/dry-run design only.",
      "No ifdown/ifup, no uci set, no wg set, no route changes, no tunnel replacement.",
      "Synthetic failure uses egress4/vpn4 only to prove candidate selection and slot stability."
    ]
  },
  "mode": "READONLY_HMN_PROVIDER_RECOVERY_ADAPTER_DRYRUN_DESIGN",
  "publish": {
    "facts_json": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260710-154319_step048g_hmn_recovery_adapter_dryrun_design/facts.json",
    "report_txt": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260710-154319_step048g_hmn_recovery_adapter_dryrun_design/report.txt",
    "trycf_report": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260710-154319_step048g_hmn_recovery_adapter_dryrun_design/"
  },
  "schema": "router-step-facts-v1",
  "step": "STEP_048G_HMN_RECOVERY_ADAPTER_DRYRUN_DESIGN",
  "summary": {
    "apply_performed": "false",
    "candidate_endpoint_count": 59,
    "first_unused_candidate": "",
    "next_step": "install_hmn_recovery_adapter_dryrun_script_or_design_controlled_apply_test",
    "replacement_candidate_endpoint": "",
    "replacement_candidate_file": "",
    "slot_stability": "keep_same_slot_interface_table_mark",
    "synthetic_adapter": "hmn_pool_replace",
    "synthetic_failed_interface": "vpn4",
    "synthetic_failed_mark": "0x204",
    "synthetic_failed_slot": "egress4",
    "synthetic_failed_table": "204",
    "synthetic_provider": "hidemyname",
    "unused_candidate_endpoint_count": 0,
    "vm100_peer_count": "5",
    "vm121_db_summary": {
      "enabled_peers": 5,
      "lease_rows": 5,
      "pending_jobs": 0
    }
  }
}
