# Локальный архитектурный план — HMN egress recovery

Версия: **20260711-122207 UTC**

Это immutable timestamped-версия рабочего плана.

## Обозначения

- `[x]` — выполнено и принято либо окончательно salvaged.
- `[~]` — подтверждено оператором, но точный локальный микрорепорт не найден.
- `[ ]` — не выполнено.
- `[!]` — активный блокер.

## Фаза 1. Базовая recovery-архитектура

- [x] STEP_049I — architecture lock.
- [x] Разделены slot health и endpoint health.
- [x] Определены состояния NORMAL / SLOT_REPAIR /
      EMERGENCY_REFRESH / DEGRADED_NO_FRESH_POOL /
      VPN_EXHAUSTED / DIRECT_FAILOPEN /
      EXTERNAL_HMN_ACCESS_RECOVERY / RECOVERED.
- [x] Direct failopen вынесен в отдельный крайний этап.

## Фаза 2. State, quarantine и repair

- [x] Recovery state helper установлен.
- [x] Mtime/selftest helper исправлен.
- [x] Planner исключает quarantined endpoint.
- [x] Repair adapter записывает old/new endpoint.
- [x] Repair adapter добавляет старый endpoint в quarantine.
- [x] Repair adapter увеличивает daily repair counter.
- [x] Реальный watcher → dispatcher → adapter repair доказан.
- [x] vpn2 repaired:
      `109.248.198.4:37129` →
      `151.236.30.139:33998`.
- [x] STEP_050E salvaged через STEP_050E2.

## Фаза 3. Emergency-refresh skeleton и guard

- [x] Emergency-refresh runner установлен.
- [x] Emergency-refresh config установлен.
- [x] Commit guard отказывает при disabled commit.
- [x] Below-threshold dry-run работает.
- [x] Threshold dry-run выдаёт
      `would_run_emergency_refresh`.
- [x] Реальный HMN refresh не запускался.
- [x] Rebalance apply не запускался.
- [x] Direct failopen остаётся выключенным.
- [x] STEP_050F и STEP_050H окончательно salvaged
      через STEP_050H2.
- [x] Production daily counter подтверждён равным 1.
- [x] Нулевое значение классифицировано как артефакт
      временного `REG_STATE_DIR`.

## Фаза 4. Последние микрошаги

- [x] STEP_050G1 — выполнен по подтверждению оператора;
      точное имя и raw decision берутся из локальной
      evidence-таблицы ниже.
- [x] STEP_050G2 — выполнен по подтверждению оператора;
      точное имя и raw decision берутся из локальной
      evidence-таблицы ниже.
- [x] STEP_050H — выполнен; raw STOP superseded
      каноническим STEP_050H2.
- [x] STEP_050H2 — canonical PASS.
- [x] STEP_050H3A — XS Map опубликована и проверена.
- [x] STEP_050H3B — documentation-only STOP:
      Python попытался исполнить JSON.
- [x] STEP_050H3B2 — documentation-only STOP:
      неполный microstep evidence ошибочно считался
      критическим блокером.
- [x] STEP_050H3B3 — локальный архитектурный план
      опубликован с nonblocking evidence policy.

## Текущее production-состояние

- vpn1..vpn5 strict: **OK**.
- tables 201..205 default routes: **OK**.
- watcher: **healthy**.
- VM100 `wg_paid peer_count=5`.
- VM100 controller: **running**.
- VM121 enabled peers: **5**.
- VM121 lease rows: **5**.
- VM121 pending jobs: **0**.
- daily repair counter: **1**.
- quarantine lines: **2**.
- direct failopen: **disabled**.

## Следующий runtime-этап

- [ ] `STEP_050I_ENABLE_EMERGENCY_COMMIT_AND_THRESHOLD_DRYRUN_ONLY`.

Ограничения STEP_050I:

1. Перед production state read выполнять
   `unset REG_STATE_DIR`.
2. Не запускать реальный HMN refresh.
3. Не запускать rebalance apply.
4. Не включать direct failopen.
5. До изменения VM101 снимать fingerprints.
6. Делать rollback script.
7. После шага проверять vpn1..vpn5.
8. Проверять tables 201..205.
9. Проверять strict ping через все пять VPN.
10. Проверять watcher.
11. Проверять VM100.
12. Проверять VM121.

## После STEP_050I

- [ ] Отдельный reviewed-step реального emergency refresh.
- [ ] Валидация fresh HMN pool.
- [ ] Top5 rebuild/rebalance.
- [ ] DEGRADED_NO_FRESH_POOL.
- [ ] VPN_EXHAUSTED handling.
- [ ] Direct failopen — только отдельным этапом.
- [ ] External HMN access recovery strategies.
- [ ] Checkpoint snapshots VM100/VM101/VM121.
- [ ] Production allocator.
- [ ] Onboarding и migration реальных клиентов.

## Закреплённые ссылки

- Актуальная XS Map:
  https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-120734_xs_map_audit_repair_publish/
- Этот локальный архитектурный план:
  https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-122207_local_architecture_plan_hmn_egress_recovery/
- Исходный STEP_049I architecture lock:
  https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-095354_step049i_architecture_lock_hmn_egress_recovery/
- Канонический STEP_050H2:
  https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/
- Исторический STOP STEP_050H3B:
  https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-121503_local_architecture_plan_hmn_egress_recovery/
- Исторический STOP STEP_050H3B2:
  https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-121827_local_architecture_plan_hmn_egress_recovery_salvage/

---

# Последние микрошаги

Отсутствие локального report evidence здесь является предупреждением, а не runtime-блокером.

- [x] **Architecture lock** — `STEP_049I_ARCHITECTURE_LOCK_HMN_EGRESS_RECOVERY`, raw decision=`PASS_STEP_049I_ARCHITECTURE_LOCK_HMN_EGRESS_RECOVERY`, [report](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-095354_step049i_architecture_lock_hmn_egress_recovery/).
- [~] **G1 — operator-confirmed completed** — точный локальный report не найден; состояние не считается runtime-блокером.
- [x] **G2 — operator-confirmed completed** — `STEP_050G2_SALVAGE_CLEAN_ENV_DAILY_COUNTER_AND_HOOK`, raw decision=`PASS_STEP_050G2_SALVAGE_CLEAN_ENV_DAILY_COUNTER_AND_HOOK`, [report](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-110937_step050g2_salvage_clean_env_daily_counter_and_hook/).
- [x] **H — выполнен; raw result salvaged шагом H2** — `STEP_050H_EMERGENCY_REFRESH_THRESHOLD_COMMIT_GUARD_NO_REFRESH`, raw decision=`STOP_STEP_050H_EMERGENCY_REFRESH_THRESHOLD_COMMIT_GUARD_NO_REFRESH`, [report](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-112702_step050h_emergency_refresh_threshold_commit_guard_no_refresh/).
- [x] **H2 — канонический salvage PASS** — `STEP_050H2_SALVAGE_COUNTER_STATE_AFTER_GUARD_TEST`, raw decision=`PASS_STEP_050H2_SALVAGE_COUNTER_STATE_AFTER_GUARD_TEST`, [report](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/).
- [x] **XS Map publication PASS** — `STEP_050H3A_XS_MAP_AUDIT_REPAIR_PUBLISH`, raw decision=`PASS_STEP_050H3A_XS_MAP_AUDIT_REPAIR_PUBLISH`, [report](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-120734_xs_map_audit_repair_publish/).

## Предупреждения

- No exact local report evidence found for step_050g1

---

# Полный журнал найденных STEP-отчётов

| Timestamped folder | Step | Raw decision |
|---|---|---|
| [20260711-095354_step049i_architecture_lock_hmn_egress_recovery](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-095354_step049i_architecture_lock_hmn_egress_recovery/) | `STEP_049I_ARCHITECTURE_LOCK_HMN_EGRESS_RECOVERY` | `PASS_STEP_049I_ARCHITECTURE_LOCK_HMN_EGRESS_RECOVERY` |
| [20260711-095951_step050a_readonly_recovery_insertion_audit](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-095951_step050a_readonly_recovery_insertion_audit/) | `STEP_050A_READONLY_RECOVERY_INSERTION_AUDIT` | `STOP_STEP_050A_VM101_SSH_UNREACHABLE` |
| [20260711-100241_step050a0_mgts_access_readonly_audit](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-100241_step050a0_mgts_access_readonly_audit/) | `STEP_050A0_MGTS_ACCESS_READONLY_AUDIT` | `STOP_STEP_050A0_VM101_PING_OK_SSH_FAIL` |
| [20260711-100938_step050a2_vm101_nested_pve_readonly_insertion_audit](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-100938_step050a2_vm101_nested_pve_readonly_insertion_audit/) | `STEP_050A2_VM101_NESTED_PVE_READONLY_INSERTION_AUDIT` | `STOP_STEP_050A2_PVE_OK_VM101_NESTED_SSH_FAILED` |
| [20260711-102652_step050a2_vm101_nested_pve_readonly_insertion_audit](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-102652_step050a2_vm101_nested_pve_readonly_insertion_audit/) | `STEP_050A2_VM101_NESTED_PVE_READONLY_INSERTION_AUDIT` | `PASS_STEP_050A2_VM101_NESTED_PVE_READONLY_INSERTION_AUDIT` |
| [20260711-103040_step050b_install_recovery_state_helpers_no_behavior_change](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-103040_step050b_install_recovery_state_helpers_no_behavior_change/) | `STEP_050B_INSTALL_RECOVERY_STATE_HELPERS_NO_BEHAVIOR_CHANGE` | `STOP_STEP_050B_INSTALL_RECOVERY_STATE_HELPERS_NO_BEHAVIOR_CHANGE` |
| [20260711-103449_step050b2_patch_recovery_state_helper_mtime_selftest](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-103449_step050b2_patch_recovery_state_helper_mtime_selftest/) | `STEP_050B2_PATCH_RECOVERY_STATE_HELPER_MTIME_SELFTEST` | `PASS_STEP_050B2_PATCH_RECOVERY_STATE_HELPER_MTIME_SELFTEST` |
| [20260711-103820_step050c_patch_rebalance_dryrun_quarantine_exclude_no_apply](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-103820_step050c_patch_rebalance_dryrun_quarantine_exclude_no_apply/) | `STEP_050C_PATCH_REBALANCE_DRYRUN_QUARANTINE_EXCLUDE_NO_APPLY` | `PASS_STEP_050C_PATCH_REBALANCE_DRYRUN_QUARANTINE_EXCLUDE_NO_APPLY` |
| [20260711-104057_step050c2_verify_quarantined_target_not_returned](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-104057_step050c2_verify_quarantined_target_not_returned/) | `STEP_050C2_VERIFY_QUARANTINED_TARGET_NOT_RETURNED` | `PASS_STEP_050C2_VERIFY_QUARANTINED_TARGET_NOT_RETURNED` |
| [20260711-104436_step050d_patch_repair_record_quarantine_and_counter](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-104436_step050d_patch_repair_record_quarantine_and_counter/) | `STEP_050D_PATCH_REPAIR_RECORD_QUARANTINE_AND_COUNTER` | `PASS_STEP_050D_PATCH_REPAIR_RECORD_QUARANTINE_AND_COUNTER` |
| [20260711-104821_step050e_simulate_repair_records_quarantine_and_counter](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-104821_step050e_simulate_repair_records_quarantine_and_counter/) | `STEP_050E_SIMULATE_REPAIR_RECORDS_QUARANTINE_AND_COUNTER` | `STOP_STEP_050E_SIMULATE_REPAIR_RECORDS_QUARANTINE_AND_COUNTER` |
| [20260711-105320_step050e2_salvage_classify_repair_quarantine_proof](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-105320_step050e2_salvage_classify_repair_quarantine_proof/) | `STEP_050E2_SALVAGE_CLASSIFY_REPAIR_QUARANTINE_PROOF` | `PASS_STEP_050E2_SALVAGE_CLASSIFY_REPAIR_QUARANTINE_PROOF` |
| [20260711-105707_step050f_emergency_refresh_skeleton_no_auto_direct](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-105707_step050f_emergency_refresh_skeleton_no_auto_direct/) | `STEP_050F_EMERGENCY_REFRESH_SKELETON_NO_AUTO_DIRECT` | `STOP_STEP_050F_EMERGENCY_REFRESH_SKELETON_NO_AUTO_DIRECT` |
| [20260711-110019_step050f2_salvage_emergency_refresh_skeleton_counter_state](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-110019_step050f2_salvage_emergency_refresh_skeleton_counter_state/) | `STEP_050F2_SALVAGE_EMERGENCY_REFRESH_SKELETON_COUNTER_STATE` | `PASS_STEP_050F2_SALVAGE_EMERGENCY_REFRESH_SKELETON_COUNTER_STATE` |
| [20260711-110520_step050g_hook_emergency_refresh_decision_dryrun_only](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-110520_step050g_hook_emergency_refresh_decision_dryrun_only/) | `STEP_050G_HOOK_EMERGENCY_REFRESH_DECISION_DRYRUN_ONLY` | `STOP_STEP_050G_HOOK_EMERGENCY_REFRESH_DECISION_DRYRUN_ONLY` |
| [20260711-110937_step050g2_salvage_clean_env_daily_counter_and_hook](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-110937_step050g2_salvage_clean_env_daily_counter_and_hook/) | `STEP_050G2_SALVAGE_CLEAN_ENV_DAILY_COUNTER_AND_HOOK` | `PASS_STEP_050G2_SALVAGE_CLEAN_ENV_DAILY_COUNTER_AND_HOOK` |
| [20260711-112702_step050h_emergency_refresh_threshold_commit_guard_no_refresh](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-112702_step050h_emergency_refresh_threshold_commit_guard_no_refresh/) | `STEP_050H_EMERGENCY_REFRESH_THRESHOLD_COMMIT_GUARD_NO_REFRESH` | `STOP_STEP_050H_EMERGENCY_REFRESH_THRESHOLD_COMMIT_GUARD_NO_REFRESH` |
| [20260711-113010_step050h2_salvage_counter_state_after_guard_test](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/) | `STEP_050H2_SALVAGE_COUNTER_STATE_AFTER_GUARD_TEST` | `PASS_STEP_050H2_SALVAGE_COUNTER_STATE_AFTER_GUARD_TEST` |
| [20260711-120734_xs_map_audit_repair_publish](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-120734_xs_map_audit_repair_publish/) | `STEP_050H3A_XS_MAP_AUDIT_REPAIR_PUBLISH` | `PASS_STEP_050H3A_XS_MAP_AUDIT_REPAIR_PUBLISH` |
| [20260711-121503_local_architecture_plan_hmn_egress_recovery](https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-121503_local_architecture_plan_hmn_egress_recovery/) | `STEP_050H3B_PUBLISH_LOCAL_ARCHITECTURE_PLAN` | `STOP_STEP_050H3B_PUBLISH_LOCAL_ARCHITECTURE_PLAN_H2_SOURCE_VALIDATION_FAILED` |
