{
  "adapter": {
    "adapter": "hmn_pool_replace",
    "apply_performed": false,
    "apply_rc": 0,
    "candidate_endpoint": "109.248.198.4:37129",
    "current_endpoint": "192.121.163.235:42530",
    "decision": "dry_run_ok",
    "dscp": "cs5",
    "epoch": 1783757619,
    "interface": "vpn2",
    "iso": "2026-07-11T08:13:39+00:00",
    "mark": "0x202",
    "max_pool_age_sec": 129600,
    "mode": "--dry-run",
    "pool_is_fresh": true,
    "post_strict_ok": false,
    "provider": "hidemyname",
    "reason": "dry_run_candidate_selected",
    "rollback_file": "",
    "safety": {
      "dry_run_no_ifup_ifdown": true,
      "dry_run_no_route_change": true,
      "dry_run_no_uci_set": true,
      "dry_run_no_wg_set": true,
      "no_vm100_change": true,
      "requires_explicit_commit": true
    },
    "schema": "router-egress-recovery-hmn-pool-replace-v2",
    "selected_pool": "/root/hmn/cache/ok-awg1-strict-foreign-latest.tsv",
    "selected_pool_age_sec": 54877,
    "selected_pool_endpoint_count": 15,
    "slot": "egress2",
    "table": "202",
    "unused_candidate_count": 10
  },
  "assessment": {
    "all_ok": true,
    "decision": "PASS_STEP_049D2_TSV_RANKING_CONTRACT_SHELL_AUDIT",
    "success_checks": {
      "adapter_dryrun_ok": true,
      "all_interfaces_exist": true,
      "all_tables_have_routes": true,
      "apply_not_executed": true,
      "audit_readonly": true,
      "endpoint_order_present": true,
      "legacy_cron_call_removed": true,
      "legacy_process_not_running": true,
      "legacy_safe_call_removed": true,
      "prod_strict_all_ok": true,
      "production_not_modified": true,
      "refresh_not_executed": true,
      "strict_foreign_has_at_least_5_endpoints": true,
      "tsv_contract_collected": true,
      "vm101_rc_zero": true
    },
    "warnings": [
      "No changes made.",
      "If no explicit latency exists, daily rebalance should treat HMN strict pool order as ranked order.",
      "Multi-slot rebalance must choose unique endpoints; existing single-slot adapter chooses only first unused candidate."
    ]
  },
  "mode": "SHELL_ONLY_READONLY_TSV_RANKING_CONTRACT_AUDIT",
  "publish": {
    "facts_json": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-081318_step049d2_tsv_ranking_contract_shell_audit/facts.json",
    "report_txt": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-081318_step049d2_tsv_ranking_contract_shell_audit/report.txt",
    "trycf_report": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-081318_step049d2_tsv_ranking_contract_shell_audit/"
  },
  "schema": "router-step-facts-v1",
  "step": "STEP_049D2_TSV_RANKING_CONTRACT_SHELL_AUDIT",
  "summary": {
    "adapter_egress2_candidate": "109.248.198.4:37129",
    "adapter_egress2_current": "192.121.163.235:42530",
    "adapter_egress2_decision": "dry_run_ok",
    "header_has_latency": true,
    "next_step": "install_planners_using_pool_order_or_explicit_metric_based_on_conclusion",
    "numeric_present": true,
    "prod_strict_ok": {
      "vpn1": "true",
      "vpn2": "true",
      "vpn3": "true",
      "vpn4": "true",
      "vpn5": "true"
    },
    "ranking_conclusion": "explicit_numeric_latency_or_score_detected",
    "selected_endpoint_count": "2",
    "strict_all_endpoint_count": "19",
    "strict_foreign_endpoint_count": "15",
    "working_endpoint_count": "35"
  },
  "tsv": {
    "selected": {
      "endpoint_count": "2",
      "endpoint_order_first15": [
        "1:192.121.163.235:42530",
        "2:178.215.227.13:44408"
      ],
      "exists": "true",
      "first20_raw_excerpt": [],
      "header_guess": [
        "1:slot\tfile\tendpoint\tavg_ms\tconfig_path",
        "2:vpn2\t128-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf\t192.121.163.235:42530\t38.879\tKEYMASK-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf",
        "3:vpn1\t150-NL-Netherlands-Amsterdam-R5-178.215.227.13-awg1.conf\t178.215.227.13:44408\t53.234\tKEYMASK-NL-Netherlands-Amsterdam-R5-178.215.227.13-awg1.conf"
      ],
      "line_count": "3",
      "mtime": "2026-07-08T06:16:33+00:00",
      "numeric_tokens_first15": [
        "line=1",
        "line=2 f4=38.879",
        "line=3 f4=53.234"
      ]
    },
    "strict_all": {
      "endpoint_count": "19",
      "endpoint_order_first15": [
        "1:192.121.163.235:42530",
        "2:95.211.68.119:45176",
        "3:78.31.250.16:41729",
        "4:178.215.227.13:44408",
        "5:157.173.27.69:41797",
        "6:157.173.25.198:34340",
        "7:37.235.54.96:38971",
        "8:192.71.244.202:45735",
        "9:151.236.30.139:33998",
        "10:84.32.230.159:43808",
        "11:89.46.237.14:38594",
        "12:64.253.89.235:37402",
        "13:77.67.8.84:43378",
        "14:192.71.27.64:40044",
        "15:23.158.72.87:45460"
      ],
      "exists": "true",
      "first20_raw_excerpt": [],
      "header_guess": [
        "1:rank\tfile\tendpoint\tavg_ms\tping_loss\tconfig_path",
        "2:1\t128-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf\t192.121.163.235:42530\t39.008\t9.9.9.9:0%,1.1.1.1:0%\tKEYMASK-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf",
        "3:2\t075-NL-Netherlands-Amsterdam-H13-95.211.68.119-awg1.conf\t95.211.68.119:45176\t44.271\t9.9.9.9:0%,1.1.1.1:0%\tKEYMASK-NL-Netherlands-Amsterdam-H13-95.211.68.119-awg1.conf"
      ],
      "line_count": "20",
      "mtime": "2026-07-10T16:59:02+00:00",
      "numeric_tokens_first15": [
        "line=1",
        "line=2 f1=1 f4=39.008",
        "line=3 f1=2 f4=44.271",
        "line=4 f1=3 f4=50.697",
        "line=5 f1=4 f4=50.900",
        "line=6 f1=5 f4=56.803",
        "line=7 f1=6 f4=62.423",
        "line=8 f1=7 f4=62.926",
        "line=9 f1=8 f4=66.349",
        "line=10 f1=9 f4=67.482",
        "line=11 f1=10 f4=72.088",
        "line=12 f1=11 f4=77.023",
        "line=13 f1=12 f4=124.618",
        "line=14 f1=13 f4=163.880",
        "line=15 f1=14 f4=164.930"
      ]
    },
    "strict_foreign": {
      "endpoint_count": "15",
      "endpoint_order_first15": [
        "1:192.121.163.235:42530",
        "2:95.211.68.119:45176",
        "3:78.31.250.16:41729",
        "4:178.215.227.13:44408",
        "5:157.173.27.69:41797",
        "6:157.173.25.198:34340",
        "7:37.235.54.96:38971",
        "8:192.71.244.202:45735",
        "9:151.236.30.139:33998",
        "10:84.32.230.159:43808",
        "11:89.46.237.14:38594",
        "12:77.67.8.84:43378",
        "13:192.71.27.64:40044",
        "14:109.248.198.4:37129",
        "15:194.71.227.212:32583"
      ],
      "exists": "true",
      "first20_raw_excerpt": [],
      "header_guess": [
        "1:rank\tfile\tendpoint\tavg_ms\tping_loss\tconfig_path",
        "2:1\t128-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf\t192.121.163.235:42530\t39.008\t9.9.9.9:0%,1.1.1.1:0%\tKEYMASK-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf",
        "3:2\t075-NL-Netherlands-Amsterdam-H13-95.211.68.119-awg1.conf\t95.211.68.119:45176\t44.271\t9.9.9.9:0%,1.1.1.1:0%\tKEYMASK-NL-Netherlands-Amsterdam-H13-95.211.68.119-awg1.conf"
      ],
      "line_count": "16",
      "mtime": "2026-07-10T16:59:02+00:00",
      "numeric_tokens_first15": [
        "line=1",
        "line=2 f1=1 f4=39.008",
        "line=3 f1=2 f4=44.271",
        "line=4 f1=3 f4=50.697",
        "line=5 f1=4 f4=50.900",
        "line=6 f1=5 f4=56.803",
        "line=7 f1=6 f4=62.423",
        "line=8 f1=7 f4=62.926",
        "line=9 f1=8 f4=66.349",
        "line=10 f1=9 f4=67.482",
        "line=11 f1=10 f4=72.088",
        "line=12 f1=11 f4=77.023",
        "line=13 f1=12 f4=163.880",
        "line=14 f1=13 f4=164.930",
        "line=15 f1=14 f4=202.323"
      ]
    },
    "working": {
      "endpoint_count": "35",
      "endpoint_order_first15": [
        "1:192.36.27.17:35500",
        "2:38.244.192.244:45389",
        "3:157.173.27.69:41797",
        "4:192.71.247.18:35999",
        "5:194.71.227.212:32583",
        "6:38.7.197.83:38465",
        "7:193.235.207.39:38330",
        "8:107.172.187.100:39480",
        "9:78.31.250.16:41729",
        "10:84.32.230.159:43808",
        "11:95.211.68.119:45176",
        "12:149.154.157.24:35090",
        "13:107.175.93.59:31095",
        "14:107.174.226.51:44839",
        "15:192.121.162.75:45945"
      ],
      "exists": "true",
      "first20_raw_excerpt": [],
      "header_guess": [
        "1:id\tcountry\tname\twg_ip\twg_port\tendpoint\tendpoint_match\taddress\tconfig_file",
        "2:12\tDK\tDenmark, Copenhagen S4\t192.36.27.17\t35500\t192.36.27.17:35500\tyes\t10.119.249.139/32\tKEYMASK-163600/012-DK-Denmark-Copenhagen-S4-192.36.27.17-awg1.conf",
        "3:29\tUA\tUkraine, Kyiv S3\t38.244.192.244\t45389\t38.244.192.244:45389\tyes\t10.112.60.219/32\tKEYMASK-163600/029-UA-Ukraine-Kyiv-S3-38.244.192.244-awg1.conf"
      ],
      "line_count": "36",
      "mtime": "2026-07-10T16:36:45+00:00",
      "numeric_tokens_first15": [
        "line=1",
        "line=2 f1=12 f7=35500",
        "line=3 f1=29 f7=45389",
        "line=4 f1=49 f7=41797",
        "line=5 f1=53 f7=35999",
        "line=6 f1=62 f7=32583",
        "line=7 f1=63 f6=38465",
        "line=8 f1=70 f8=38330",
        "line=9 f1=71 f8=39480",
        "line=10 f1=72 f7=41729",
        "line=11 f1=73 f7=43808",
        "line=12 f1=75 f7=45176",
        "line=13 f1=76 f7=35090",
        "line=14 f1=87 f8=31095",
        "line=15 f1=88 f6=44839"
      ]
    }
  }
}
