{
  "schema": "vm101-local-plan-publication-v1",
  "generated_at_utc": "20260711-150958",
  "source_step": "STEP_050LP1_PUBLISH_CANONICAL_VM101_AUTONOMOUS_RECOVERY_PLAN",
  "plan_id": "vm101-hmn-autonomous-egress-recovery",
  "schema_version": 1,
  "scope": [
    "VM101"
  ],
  "excluded_blocking_scopes": [
    "VM100",
    "VM121"
  ],
  "current_milestone": "M06",
  "progress": {
    "total": 15,
    "done": 5,
    "in_progress": 1,
    "pending": 9,
    "blocked": 0
  },
  "milestones": [
    {
      "id": "M01",
      "title": "Health monitor обнаруживает отказ VPN-слота",
      "status": "done",
      "evidence": [
        "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/"
      ],
      "notes": "Watcher и strict status checks доказаны."
    },
    {
      "id": "M02",
      "title": "Локальная замена отказавшего VPN-туннеля",
      "status": "done",
      "evidence": [
        "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/"
      ],
      "notes": "Watcher → dispatcher → adapter repair доказан."
    },
    {
      "id": "M03",
      "title": "Quarantine отказавших endpoints",
      "status": "done",
      "evidence": [
        "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/"
      ],
      "notes": "Отказавший endpoint исключается из повторного выбора."
    },
    {
      "id": "M04",
      "title": "Глобальный repair counter после локальных замен",
      "status": "done",
      "evidence": [
        "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/"
      ],
      "notes": "Счётчик увеличивается после успешного ремонта."
    },
    {
      "id": "M05",
      "title": "Порог full refresh и dry-run решения",
      "status": "done",
      "evidence": [
        "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-113010_step050h2_salvage_counter_state_after_guard_test/",
        "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-141947_step050i9_full_audit_minimal_enable_commit_dryrun/"
      ],
      "notes": "При изолированном count=5 доказано would_run_emergency_refresh."
    },
    {
      "id": "M06",
      "title": "Постоянно включить emergency commit на VM101",
      "status": "in_progress",
      "evidence": [
        "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-141947_step050i9_full_audit_minimal_enable_commit_dryrun/"
      ],
      "notes": "VM101-проверка прошла в STEP_050I9, но изменение было откачено из-за нерелевантного VM121-блокера."
    },
    {
      "id": "M07",
      "title": "Выполнить контролируемый реальный full HideMyName refresh",
      "status": "pending",
      "evidence": [],
      "notes": "Обновить список, протестировать и безопасно установить пять слотов."
    },
    {
      "id": "M08",
      "title": "Реализовать DEGRADED_POOL при ошибке HideMyName refresh",
      "status": "pending",
      "evidence": [],
      "notes": "Продолжать работу на оставшихся VPN и старом резервном пуле."
    },
    {
      "id": "M09",
      "title": "Реализовать SLOT_EXHAUSTED и консолидацию пользователей",
      "status": "pending",
      "evidence": [],
      "notes": "Перераспределять пользователей только по рабочим слотам."
    },
    {
      "id": "M10",
      "title": "Реализовать DIRECT_EMERGENCY при нуле рабочих VPN",
      "status": "pending",
      "evidence": [],
      "notes": "Перевести всех пользователей в Direct и продолжить recovery."
    },
    {
      "id": "M11",
      "title": "Реализовать cached-pool bootstrap через vpn1",
      "status": "pending",
      "evidence": [],
      "notes": "Перебирать сохранённые кандидаты с настраиваемым интервалом."
    },
    {
      "id": "M12",
      "title": "Реализовать абстрактный bootstrap strategy contract",
      "status": "pending",
      "evidence": [],
      "notes": "Поддержать будущий резервный транспорт, включая Деденево."
    },
    {
      "id": "M13",
      "title": "Реализовать безопасный возврат Direct → VPN",
      "status": "pending",
      "evidence": [],
      "notes": "Возврат только после проверки полного рабочего набора."
    },
    {
      "id": "M14",
      "title": "Провести полную последовательную имитацию отказов на VM101",
      "status": "pending",
      "evidence": [],
      "notes": "От единичного отказа до Direct и обратного восстановления."
    },
    {
      "id": "M15",
      "title": "Доказать перезагрузочную устойчивость state machine",
      "status": "pending",
      "evidence": [],
      "notes": "Состояние, timers, services, pool и quarantine переживают reboot."
    }
  ],
  "publish": {
    "current_report": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-150958_step050lp1_publish_canonical_vm101_recovery_plan/",
    "architecture_plan": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-150958_local_architecture_plan_vm101_autonomous_hmn_recovery/",
    "xs_map": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-120734_xs_map_audit_repair_publish/",
    "global_project_plan": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-123348_global_project_plan_wg_paid/",
    "previous_plan": "https://helena-background-beam-harry.trycloudflare.com/r/e94a0859747d7b96f29c7fdafc2d0351ba603bb0a7e9e5a4/20260711-143018_local_architecture_plan_hmn_egress_recovery_step050i10/"
  }
}
