## dev426-to-dev427

### Добавлено

- Настроенную SD-карту можно безопасно перенести в другую BPI-R4 без отказа входа в Web UI. После авторизации система показывает отдельное предупреждение об изменении аппаратной платформы и предлагает явную миграцию настроек.
- Миграция выполняется как полное восстановление подтверждённой конфигурации на заводском профиле новой платы: создаётся точная аварийная копия базы и factory profile, а рабочая история новой платы начинается с revision 1.
- Физические порты, WAN failover и цели Dynamic Routing перепривязываются к новым hardware ID и MAC. Пользователи, пароли, секреты, VPN/PPPoE-файлы и накопленное служебное состояние сохраняются; производные сетевые кэши перестраиваются.
- Ранний загрузочный helper завершает или безопасно возобновляет уже подтверждённую миграцию до запуска сети и продуктовых служб. Неожиданная смена платы после подтверждения останавливает операцию без применения чужой привязки.

### После обновления

Для проверки штатно выключите исходную BPI-R4, переставьте SD-карту во вторую плату и войдите в Web UI. Должно появиться предупреждение об изменившемся оборудовании, но авторизация и системный обзор должны работать. Нажмите «Мигрировать настройки и перезагрузить». После загрузки проверьте сеть, firewall, VPN, Secure DNS, Dynamic Routing, MTProxy/Stratum и отсутствие повторного предупреждения.

## dev425-to-dev426

### Исправлено

- В форме WAN PPPoE после ввода логина и пароля кнопка сохранения становится доступной при выключенной службе Secure DNS.
- PPPoE больше не принуждается к недоступному режиму Secure DNS. По умолчанию форма предлагает пользовательский DNS `8.8.8.8`, его можно изменить или дополнить.
- DNS-серверы и search domains PPPoE назначаются созданному PPP-интерфейсу. Физический Ethernet-интерфейс провайдера не получает эти параметры.
- Backend проверяет PPPoE DNS теми же правилами, что DHCP и статический WAN, включая обязательный непустой список для режима «Свои DNS».

### После обновления

Откройте настройку WAN, выберите PPPoE и введите выданные провайдером логин и пароль. Кнопка сохранения должна стать активной без включения Secure DNS. После проверки и применения плана убедитесь, что PPPoE получил адрес и маршрут, DNS `8.8.8.8` назначен PPP-интерфейсу и доступ в Интернет работает. Подтвердите настройки и проверьте сохранение после перезагрузки.

## dev424-to-dev425

### Исправлено

- Пользовательская проверка и применение конфигурации теперь получают приоритет перед фоновой пересборкой Dynamic Routing, пока фоновый процесс ещё не перешёл к изменению runtime.
- Фоновая подготовка, которую опередило пользовательское действие, завершается без изменения таблиц ядра, без recovery journal и автоматически повторяется после применения новой конфигурации.
- Если фоновая операция уже перешла границу commit, она не прерывается: сначала выполняется обязательный readback либо rollback, после чего пользовательское действие продолжает работу с однозначным состоянием.
- Изменение DNS-адресов или переподключение VPN между проверкой и применением больше не должно вызывать промежуточную полную пересборку с последующей второй пересборкой того же состояния.

### После обновления

При включённой Dynamic Routing начните проверку пользовательского изменения и одновременно переподключите VPN либо дождитесь изменения DNS RRset. Проверка и применение должны завершиться с первого действия без безымянного отказа «Служба занята» и без двойного применения таблиц. После завершения фоновой сверки правила и доступность туннельных сетей должны соответствовать новой подтверждённой конфигурации.

## dev423-to-dev424

### Исправлено

- После полного восстановления страница ожидания больше не перенаправляет браузер автоматически и не открывает новый адрес до готовности Web-службы.
- После возврата сетевого подключения страница выдерживает 15 секунд на запуск служб, завершает индикатор 8/8 и показывает явную ссылку «Открыть Web-интерфейс и войти».
- Если браузер не передал событие отключения и возврата сети, ссылка появляется по ограниченному резервному таймеру 60 секунд после команды перезагрузки.
- Страница ожидания не выполняет cross-origin HTTPS/API-проверку нового адреса: TLS-соединение открывается только после явного перехода пользователя по ссылке.

### После обновления

Восстановите резервную копию с изменением LAN-подсети. После перезагрузки страница не должна переходить автоматически. После возврата связи и короткой задержки индикатор должен завершиться на 8/8 и показать ссылку на новый management address. Перейдите по ней вручную и войдите в систему.

## dev422-to-dev423

### Исправлено

- Числовые IPv4/IPv6 endpoint VPN больше не отправляются в DNS. Туннель с endpoint вида `178.209.100.222:51820` запускается напрямую и не зависит от ответа bootstrap DNS.
- После полного восстановления с изменением LAN-подсети физические порты моста отключаются на 10 секунд только один раз при первой загрузке восстановленной конфигурации. Это заставляет LAN-клиент отказаться от аренды прежней подсети; обычные перезагрузки и восстановление без смены LAN порты не затрагивают.
- Страница ожидания после перезагрузки больше не опрашивает HTTPS API нового management IP до перехода. После возврата сетевого подключения браузер сразу открывает восстановленный адрес; если событие браузера не пришло, используется ограниченный fallback 45 секунд.
- При загрузочной сверке общий VPN firewall собирается и применяется одной атомарной транзакцией после обработки всех VPN-клиентов и серверов. Ошибка одного туннеля больше не вызывает повторную замену общей nftables-таблицы для каждого следующего туннеля.

### После обновления

Восстановите ту же резервную копию на чистом образе. Туннель `GITR` с числовым endpoint должен запуститься без DNS-запроса. После смены LAN компьютер должен самостоятельно получить адрес новой подсети, а страница ожидания — открыть новый management address без циклических TLS EOF. Итоговый restore должен завершить 8/8 шагов без `VPN_RECONCILE_FAILED` и производных предупреждений Dynamic Routing или MTProxy.

## dev421-to-dev422

### Исправлено

- Полное восстановление больше не сообщает о готовности до запуска и проверки runtime. Страница ожидания показывает восемь реальных этапов и завершает процесс только после восстановления VPN, Secure DNS, зависимых служб и итогового readback.
- При временно недоступной зависимости восстановление остаётся в состоянии выполнения и автоматически повторяется; успешная повторная сверка снимает связанные startup-предупреждения.
- VPN-туннели запускаются независимо: ошибка одного туннеля не мешает попытке восстановить остальные. DNS endpoint VPN разрешается через выбранный WAN-интерфейс с TTL-кешем.
- Если на WAN вручную заданы DNS-серверы, для системных запросов используются только они. `8.8.8.8` и `1.1.1.1` используются как bootstrap только при выбранном на WAN режиме «Безопасный DNS». Клиентам DHCP bootstrap-адреса не выдаются.
- Исправлена загрузочная гонка Dynamic Routing: восстановленная включённая конфигурация больше не подменяется заводским выключенным состоянием.
- После восстановления с изменённой LAN-сетью физические порты моста штатно переинициализируются, чтобы клиент заново получил DHCP-адрес. Переход не оставляет старую LAN-сеть, способную конфликтовать с восстановленным WAN.
- Отложенный boot-recovery теперь действительно восстанавливает MTProxy и остальные зависящие службы, а не только хранит их конфигурацию.

### После обновления

Создайте резервную копию с включённым VPN `AMS`, Secure DNS, Dynamic Routing и MTProxy, затем восстановите её на чистом образе. После сообщения об установке конфигурации перезагрузите устройство. Страница ожидания должна показать все этапы, автоматически открыть Web UI на восстановленном адресе и завершиться без `VPN_RECONCILE_FAILED`, `DYNAMIC_ROUTING_STARTUP_FAILED` и `MTPROXY_RUNTIME_FAILED`. При ручном DNS на WAN проверьте использование этих адресов; при Secure DNS — возможность bootstrap через `8.8.8.8`/`1.1.1.1`.

## dev420-to-dev421

### Что исправлено

- Полное восстановление резервной копии больше не пытается менять работающую сеть и VPN по частям. Проверенная конфигурация ставится в очередь и применяется целиком при следующей загрузке до запуска сети и управляемых служб.
- После подготовки восстановления изменения конфигурации блокируются до перезагрузки, поэтому промежуточное состояние не может быть случайно изменено.
- Страница ожидания восстановления загружается до перезагрузки, показывает прогресс и текущий этап, находит новый адрес управления и автоматически открывает Web UI после успешного запуска.
- При ошибке восстановления прежняя подтверждённая конфигурация сохраняется, а страница показывает результат на старом адресе управления.

### Что сохранено

- Обычное изменение адреса LAN по-прежнему использует commit-confirmed: прежний адрес остаётся доступным до подтверждения или отката.
- Состав работающих служб и формат резервной копии не изменены.

## dev419-to-dev420

### Исправлено

- Полное восстановление конфигурации больше не перестраивает маршруты VPN в
  промежуточном состоянии, когда новые файлы VPN уже восстановлены, а сами
  туннели, включая `AMS`, ещё не запущены.
- Сначала применяется переход сети с сохранением прежнего адреса `br-lan`,
  затем запускается восстановленный VPN runtime и только после этого одним
  шагом проверяются маршруты VPN и зависящие службы.
- Если следующий шаг восстановления завершается ошибкой, rollback сначала
  возвращает все файлы и сетевое состояние, затем один раз восстанавливает
  прежний VPN runtime. Частично восстановленная конфигурация не остаётся
  активной.
- Старый адрес `br-lan` остаётся доступен вместе с новым до явного
  подтверждения настройки. При откате новый адрес удаляется, прежний остаётся
  основным.

### После обновления

Создайте резервную копию, содержащую включённый VPN `AMS`, изменённую сеть LAN
и зависящий от VPN MTProxy. Выполните preview и применение. Должно появиться
окно подтверждения сети; Web должен быть доступен по прежнему и новому адресу
до подтверждения. После подтверждения VPN `AMS`, его маршруты и MTProxy должны
соответствовать резервной копии.

## dev418-to-dev419

- Полное восстановление конфигурации переносит разрешённую зависимость выходного VPN-интерфейса из проверки плана в фазу применения.
- После запуска VPN MTProxy обязательно повторно проверяет фактическое наличие kernel-интерфейса; если интерфейс не поднялся, вся транзакция откатывается.
- Неизвестные интерфейсы и остальные конфликты MTProxy по-прежнему отклоняются без исключений.

## dev417-to-dev418

- Отключённая динамическая маршрутизация при первом запуске теперь создаёт только каноническое неактивное состояние и не запускает runtime либо зависимые необязательные службы.
- Полное восстановление конфигурации учитывает выходные VPN-интерфейсы из самой резервной копии: сначала восстанавливает и запускает VPN, затем проверяет и восстанавливает зависящий от него MTProxy.
- Обычная проверка MTProxy не ослаблена: несуществующий выходной интерфейс по-прежнему отклоняется, если он не предоставляется включённым VPN из той же проверенной конфигурации.
- Устранены ложные `DYNAMIC_ROUTING_STARTUP_FAILED` на чистом образе и `MTPROXY_EGRESS_UNAVAILABLE` при восстановлении зависимого VPN-интерфейса.

# Octava Router dev416 — полный состав обновления

Ниже перечислены все шаги, которые updater может выбрать от image 12 до dev401. Перед установкой применяются только шаги, необходимые текущей версии устройства; каждый пакет отдельно скачивается, проверяется по размеру и SHA-256 и имеет точный rollback.

## bootstrap-policy-and-dev367

Введён подписанный manifest schema 2 с явным `ready=true`, полным ordered path, проверкой SHA-256, зависимостей и exact rollback. Установлен package policy, отключающий произвольные APT-изменения продукта; обновления выполняются внутренним updater. Перед установкой Web показывает состав выпуска и требует отдельного решения администратора.

## dev367-to-dev368

Восстановлен полный подписанный путь от image 12. Добавлены DHCP static routes, повторяемые DNS-поля, ручное и быстрое резервирование MAC/IP. Исправлены удаление резервов и отображение динамических аренд.

## dev368-to-dev369

Исправлены зависимости и точный rollback промежуточного обновления; переход сохраняет пользовательские настройки и не требует ручной установки пакетов.

## dev369-to-dev371

Объединены исправления DHCP, Stratum, предупреждений и updater в последовательный подписанный переход. Неисправный промежуточный пакет исключён из пути.

## dev371-to-dev372

Исправлено сравнение установленной версии с каналом: более новая версия не предлагается как понижение, development channel корректно продолжает путь после объединённого test update.

## dev372-to-dev373

Исправлен startup reconcile: отключённая Dynamic Routing не создаёт ложную ошибку запуска, исправляющие обновления доступны при постоянном предупреждении, а штатное обновление не оставляет ложное требование восстановления.

## dev373-to-dev374

Исправлена передача и загрузка Stratum telemetry через Web gateway. Ошибка одного графика больше не закрывает настройки всего Octava Connect.

## dev374-to-dev375

Раздел обслуживания загружается отдельными карточками и не блокируется медленным сбором данных SD/firmware. Полный development path от image 12 сведён в один последовательный manifest.

## dev375-to-dev376

Обновление канала «Разработка» после dev375.

### Исправлено

- Смена DNS в настройках WAN снова делает доступным сохранение черновика.
  При возврате к исходным значениям кнопка выключается. Скрытые поля другого
  режима DNS не мешают сохранению, а причины ошибок показаны рядом с кнопкой.
- Выключенный агрегированный прокси не ругается на пустую заготовку профиля.
  При включении выводятся конкретные ошибки с указанием профиля.
- Под заголовком «Обновления» постоянно показана установленная версия роутера.

### Stratum

- Имя агрегированного воркера задаётся полностью, например `Octava.pool`,
  и отправляется пулу без добавления суффикса.
- Разные профили могут использовать одинаковые имена. Порты включённых
  листенеров должны различаться.
- В прозрачном прокси графики SHA-256 и Scrypt разделены и используют тот же
  формат, что и агрегированный прокси. Добавлен выбор периода 15 минут —
  90 дней. Новая история различает адрес и порт листенера.

Важно для существующих профилей: старое значение `Octava` теперь отправляется
как `Octava`, а не как `Octava.octava`. Если на пуле нужно прежнее имя,
укажите `Octava.octava` целиком. Обновление не переписывает настройки профилей.
Имена прозрачного прокси по-прежнему передаются от майнеров без изменений.
Старые точки графика без указания листенера не приписываются новому порту.

### Установка

Используйте встроенное обновление, канал «Разработка»: скачать и проверить,
затем установить. Манифест сохраняет весь необходимый путь от image 12 через
bootstrap и предыдущие исправления. Переключаться на тестовый канал не нужно.

Пакет dev375 сохранён для автоматического восстановления при сбое установки.
Произвольное понижение версии после сохранения полных имён воркеров требует
совместимого снимка конфигурации: старый dev375 такие имена не поддерживает.

Исходники: 8b1b45ddcd0799d4a4f92e383154afd4c7200997.
Проверки на сервере не заменяют приёмку реального пула и майнера.

## dev376-to-dev377

Обновление восстанавливает отображение сохранённой истории хешрейта после
перехода на раздельные графики слушателей. Старые измерения показываются
отдельной исторической серией по алгоритму, без приписывания неизвестного порта.

После перезапуска сохранённые измерения доступны также за 15 минут и час.
Графики обновляются каждые 15 секунд, когда раздел открыт; несохранённые
настройки остаются на месте. Ошибка получения данных не удаляет уже показанную
историю. Пустой период больше не сопровождается ложным сообщением о том,
что служба прокси не запущена.

Состав служб, настройки слушателей, имена воркеров, порты и протоколы не
изменяются. Штатная установка пакета перезапускает службы так же, как прежние
обновления; счётчики активного процесса начинают новый период. История на диске
сохраняется. Для новых измерений необходимы подключения майнеров и принятые шары.

Установка выполняется встроенным обновлением канала «Разработка». Полная
цепочка зависимостей от bootstrap для image 0.1.0-pre12 сохранена. Для перехода
с dev376 устанавливается только новый пакет Router Control. Откат последнего
шага использует точный подписанный пакет dev376.

## dev377-to-dev378

Исправлено преждевременное прекращение применения настроек агрегированного
и прозрачного Stratum. Ранее Web API прекращал ожидание через 22 секунды
и отменял серверный запрос. Теперь согласованы бюджеты: до 90 секунд на
операцию, отдельные 60 секунд на безопасный откат и 155 секунд на ожидание
результата интерфейсом. Подтверждение изменений и защита откатом сохранены.

Таймаут ответа отличается от недоступности системного демона. Ошибка
межсетевого экрана агрегированного прокси имеет понятное описание.
Не повторяйте применение до получения результата и обновления состояния.

На графиках обоих прокси добавлена ось времени: часы, даты и учёт часового
пояса интерфейса. Периоды от 15 минут до 90 дней имеют соответствующий
масштаб. Подписи остаются на пустом графике; одиночное измерение видно точкой.
Совместимость сохранённой истории из dev377 сохранена.

Обновление не меняет состав служб, порты, конфигурацию прокси и имена
воркеров. Штатные перезапуски служб при пакетной установке остаются прежними.
Выявленные задержки записи SD этим обновлением не устраняются; после него
нужно повторно проверить применение на партнёрском роутере.

Установка — встроенным механизмом канала «Разработка». Полная цепочка от
bootstrap для image 0.1.0-pre12 сохранена, последний шаг dev377 → dev378.
Для отката предусмотрен точный пакет dev377.

## dev378-to-dev379

При открытии интерфейса во время установки обновления показывается текущий
процесс. Страница сразу получает сохранённый сервером прогресс; при временной
недоступности служб сохраняется последнее полученное состояние. Открытые
вкладки также переходят к активному обновлению. После завершения доступен вход.

Исправлен оставшийся в браузере таймаут 25 секунд для применения, подтверждения
и отката настроек обоих Stratum. Он согласован с сервером; превышение времени
ожидания больше не называется отсутствием связи. После таймаута необходимо
проверить состояние операции перед повторным применением.

Удалён только график «История майнеров» и его статическая заглушка.
Сбор истории, сохранённые данные, показатели и графики хешрейта сохранены.
Состав служб, настройки прокси, порты и имена воркеров не меняются.

Пакет устанавливается штатным обновлением канала «Разработка».
Цепочка от image12 сохранена. Последний шаг dev378 → dev379, откат dev378.
Успешное применение на партнёрском устройстве требует ручной проверки;
задержки записи SD этим пакетом не устраняются.

## dev379-to-dev380

Исправлены короткие таймауты кнопок установки и восстановления обновления.
Ранее запуск службы ограничивался 8 секундами, а интерфейс ждал 15 секунд;
при задержке операции показывалась ложная ошибка отсутствия связи.

После подтверждения запуск не отменяется из-за разрыва браузерного запроса.
Ожидание согласовано между браузером, Web API и системным демоном. При потере
ответа интерфейс проверяет состояние операции и открывает её прогресс,
не повторяя запрос установки. Если запуск не состоялся, это состояние
отображается с возможностью вернуться ко входу.

Состав служб, пользовательская конфигурация, история майнеров и работающие
прокси не меняются. Улучшения dev379 сохранены. Установка выполняется только
подписанным manifest в канале «Разработка», с полной цепочкой от image12
и точным пакетом dev379 для отката.

## dev380-to-dev381

### Состав обновления

- VPN-туннель автоматически получает необходимые разрешения для трафика из LAN и VLAN в пределах его маршрутов.
- Галочка «Весь трафик» включает маршрутизацию и автоматический masquerade. При её снятии автоматический NAT удаляется; ручные правила сохраняются и имеют приоритет.
- Пользовательские запреты межсетевого экрана продолжают действовать. Изоляция клиентов VPN-серверов сохранена.
- В редакторе правил явно выбирается направление: к роутеру (INPUT), от роутера (OUTPUT), через роутер (FORWARD).
- Исправлена проверка сетей IPv4 и IPv6 в редакторе.
- При обновлении пересоздаются изменившиеся системные правила firewall даже при неизменных настройках пользователя.
- Исправлено отображение прежней ошибки при новой попытке установки обновления; диагностическая история сохраняется.

### Установка

Используйте раздел «Обслуживание», канал «Разработка»: проверить обновления,
скачать и проверить, затем установить. Весь путь от bootstrap-обновления
образа pre12 и необходимые зависимости сохранены в подписанном манифесте.
Для текущего dev380 устанавливается один новый пакет dev381.
Состав служб и сохранённые настройки не меняются. Перезапуск служб во время
установки может кратковременно прервать управление и сетевые соединения.

### Проверка после установки

Проверьте доступ из LAN через существующий VPN-маршрут, включение и снятие
галочки «Весь трафик», сохранность ручных правил NAT и новые направления
в редакторе firewall. Автоматические проверки исходников пройдены; проверка
на реальном устройстве для этого выпуска ещё предстоит.

## dev381-to-dev382

Исправлен конфликт слушателей при одновременном выборе LAN со статическим
адресом и WAN с DHCP. Каждый слушатель теперь привязывается к выбранному
интерфейсу: один порт можно использовать на нескольких интерфейсах без
конфликта и без открытия доступа через невыбранные интерфейсы.

Добавлены понятные сообщения: порт занят, адрес или интерфейс недоступен,
недостаточно прав для открытия слушателя. Состав служб, порты, настройки
воркеров и работа прозрачного прокси не изменяются.

Обновление: «Обслуживание» → канал «Разработка» → проверить обновления,
скачать и проверить, установить. Путь от pre12 и предыдущие исправления
сохранены. Откат последнего шага предусмотрен на dev381.

После установки повторите включение агрегированного прокси с выбранными
LAN и WAN. Проверки исходников и реального bind в изолированной Linux-сети
прошли. Проверка на партнёрском устройстве ещё предстоит.

## dev382-to-dev383

Над выбором типа прокси показаны состояния агрегированного и прозрачного
режимов и отдельные кнопки перезапуска. Перезапуск ненадолго отключает
майнеры выбранного прокси; другой прокси и сохранённые настройки не меняются.
Открытые черновики сохраняются. При незавершённом применении перезапуск
недоступен до подтверждения или отката.

Для агрегированного режима теперь различаются открытые слушатели,
подключение к пулу, ожидание первого задания и получение заданий.
Отображается последняя причина ошибки соединения; сведения обновляются
вместе с телеметрией. Причины старых отказов до обновления восстановить нельзя.

Это обновление добавляет диагностику ситуации «майнер offline»; оно не
объявляет исправленной ещё не установленную причину отсутствия заданий.
После установки проверьте состояние пула, при необходимости перезапустите
только агрегированный прокси и передайте показанную причину отказа.

Установка выполняется штатным обновлением канала разработки. Сохранён
полный последовательный путь предыдущих обновлений; для последнего шага
предусмотрен точный откат на dev382. Новых пакетов зависимостей не добавлено.

## dev383-to-dev384

Исправлено согласование расширений при подключении майнера к агрегированному
прокси. Теперь поддерживаются version-rolling и subscribe-extranonce:
возможности согласуются с пулом, а каждому майнеру передаётся допустимая маска.
Ранее агрегатор отказывал в обоих расширениях, из-за чего некоторые ASIC
повторяли подключение и отображались как offline.

Добавлена обработка изменения маски и корректная передача версии блока в
шарах. Майнеры с расширениями и без них могут использовать одно агрегированное
соединение. Исправлена проверка дублей шар разных майнеров.

Ошибки чтения начального запроса больше не выдаются за неправильный запрос
подписки. Новые диагностические сообщения доступны на русском и английском.

Настройки пользователей, воркеров, портов и сети сохраняются. Реализация
прозрачного прокси и состав системных служб не изменяются.

Установка — штатным механизмом обновления на канале разработки. Все предыдущие
шаги обновления сохраняются, включая переход с образа 12. Для последнего шага
предусмотрен точный пакет отката dev383.

После установки проверьте подключение ASIC к агрегированному прокси:
он должен пройти авторизацию, получать задания и отправлять шары. Проверки
протокола на билд-сервере пройдены; аппаратная приёмка этого исправления
завершается на реальном майнере после установки.

## dev384-to-dev385

В агрегированном и прозрачном прокси графики теперь показывают средний
хешрейт за завершённую минуту. Отметки времени округлены до границы минут.
Короткие всплески отдельных десятисекундных выборок больше не выдаются
за минутную мощность майнера.

Минута без принятых шар отображается как ноль. Пропуски телеметрии и сбросы
счётчика показаны разрывами линии; прежний пик не остаётся в текущей подписи.
После запуска требуется накопить полный минутный интервал.

Пятиминутная история и обзор длинных периодов рассчитываются усреднением,
с учётом нулевых интервалов. Сохранённая история до обновления остаётся
доступна с пометкой о прежнем способе расчёта. Разделение по алгоритмам,
воркерам и портам сохраняется.

Протокол майнинга, параметры воркеров, сеть и состав служб не изменяются.
Установка — штатным обновлением на канале разработки. Предыдущая цепочка
перехода с образа 12 сохраняется; последний шаг dev384→dev385 имеет точный
пакет отката dev384.

После обновления дождитесь двух полных минут и проверьте новые точки
графика. Это оценка по принятым шарам: естественные колебания сохраняются,
но каждая новая базовая точка относится к полному минутному интервалу.

## dev385-to-dev386

Исправлена ошибка dev385: старые пятиминутные записи хешрейта отображались
отдельными точками из-за небольших задержек таймера записи.

В графиках агрегированного и прозрачного прокси старые записи с отклонением
до 30 секунд соединяются линией. Настоящие пропуски и переход между старым
способом расчёта и новыми минутными средними остаются разрывами.

Минутный расчёт, нулевые интервалы и сохранённые значения истории не
изменяются. Старые пики остаются историческими измерениями с соответствующей
пометкой. Настройки, протокол майнинга и состав служб сохранены.

Обновление устанавливается штатно на канале разработки. Сохранена полная
предыдущая цепочка; добавлен шаг dev385→dev386 с точным пакетом отката dev385.
После установки откройте график за день со старой историей: последовательные
измерения должны соединяться, а реальные пропуски — оставаться разрывами.

## dev386-to-dev387

Исправлена несовместимость агрегированного прокси с майнерами, которым нужны
как минимум два байта `extranonce2`. Ранее прокси резервировал два байта из
трёх, оставляя майнеру только один; такой майнер закрывал соединение сразу
после подписки и отображался offline.

Теперь одна upstream-группа обслуживает до 255 активных майнеров, резервируя
один байт для их уникальных префиксов и оставляя майнеру два байта. При
подключении 256-го майнера автоматически создаётся второе параллельное
соединение к пулу с тем же полностью заданным именем worker. Каждая группа
независимо получает задания, difficulty и version mask, обрабатывает ответы и
переподключается. Общая телеметрия и история хешрейта сохраняются.

Transparent Stratum, конфигурация proxy, listener ports, пользовательские
данные и состав служб не изменяются.

Обновление устанавливается штатно на канале разработки. Сохранена полная
предыдущая цепочка; добавлен шаг dev386→dev387 с точным пакетом отката dev386.
После установки проверьте агрегированный listener реальным майнером: он должен
авторизоваться, получать задания и отправлять принятые шары без цикла
переподключений.

## dev387-to-dev391

Исправлена установка обновлений, если старая служба конфигурации завершилась только по таймауту systemd. Установщик продолжает работу лишь после подтверждения, что процесс полностью остановлен; активная или продолжающая останавливаться служба по-прежнему блокирует изменение пакета.

При отказе до замены пакета прежние службы переводятся из состояния `failed` и запускаются снова. Это предотвращает состояние, при котором Web-интерфейс доступен, но системный API остаётся выключенным.

Сохранены исправления dev388–dev390: логотип в шапке, корректное скрытие восстановленных предупреждений и безопасное отключение конфликтующего VPN при `VPN_ROLLBACK_FAILED`. Неисправный промежуточный dev390 исключён из пути обновления; с dev387 устанавливается сразу dev391.

Исправлен редкий отказ Unix IPC Transparent Stratum и service proxy: при раннем отказе доступа клиент теперь получает точную протокольную ошибку вместо случайного `broken pipe`.

Состав служб, пользовательские настройки, ключи, пароли, VPN-конфигурации и накопленная телеметрия не заменяются.

## dev391-to-dev393

Обновление заменяет отозванный экспериментальный вариант MTProxy на собственный сервис Octava, написанный на Go и входящий в единый Router Control.

### Что добавлено

- собственный MTProxy data plane без Telemt и без отдельного Rust runtime;
- 64-байтовое obfuscated MTProto рукопожатие и padded intermediate transport;
- отдельные ключи и ссылки `tg://` для пользователей;
- выбор интерфейсов приёма и отдельного интерфейса выхода;
- fail-closed привязка исходящих соединений к выбранному интерфейсу;
- служебные лимиты соединений и времени рукопожатия;
- автоматическая проверка, запрещающая появление постороннего application runtime в Router Control.

### Что исправлено

- исключена зависимость продукта от стороннего Telemt;
- runtime-конфигурация перенесена в отдельный каталог с минимально необходимыми правами;
- MTProxy после обновления остаётся выключенным до явной настройки и включения администратором.

Сохранённые настройки Router, VPN, динамической маршрутизации, Stratum и пользователей обновление не заменяет. После установки требуется ручная проверка подключения официального клиента Telegram через созданного пользователя MTProxy.

## dev393-to-dev394

Обновление исправляет три связанные проблемы управления сетью и не меняет сохранённые пользовательские настройки.

### Исправлено

- VPN проверяет все сети `AllowedIPs` и маршрут по умолчанию до изменения конфигурации, firewall и запуска службы. При конфликте туннель не включается, а интерфейс показывает префикс, семейство адресов, интерфейс, шлюз, источник маршрута и владельца.
- Отключение и аварийный откат VPN сначала останавливают службу и отключают автозапуск. Ошибка очистки маршрута больше не оставляет конфликтующий туннель включённым и не создаёт самоблокировку конфигурации.
- Для правила динамической маршрутизации «весь трафик» с назначенными исключениями кнопка применения использует итог проверки всего плана. Под кнопками показана точная причина недоступности; ошибки semantic/runtime выведены в основной блок плана.
- Проверены исключения exact domain, wildcard domain, IP, CIDR, встроенных сервисных и географических списков, включая IPv4-only VPN с системными правилами для неподдерживаемого семейства.
- Внутренний BPI-R4 адаптер `eth0`, к которому относятся внешние порты, скрыт из пользовательского списка интерфейсов и редакторов. `lan0`–`lan3` остаются доступны.

Пользовательские VPN-конфигурации, ключи, правила маршрутизации и остальные настройки при обновлении сохраняются.

## dev394-to-dev395

Обновление исправляет восстановление туннелей и VPN-серверов после неудачного отката. Сохранённые настройки, ключи и списки клиентов не изменяются.

### Исправлено

- Ошибка конкретного VPN больше не блокируе настройку всего роутера.
- Для сбойного туннеля или сервера заблокирован только повторный запуск. Его можно изменить, отключить или удалить.
- После успешного исправления роутер проверяет, что объект остановлен и не включён в автозапуск, и автоматически убирает соответствующее предупреждение.
- Механизм един для AmneziaWG, AmneziaWG v3, WireGuard, OpenVPN, L2TP и PPTP, для туннелей, серверов и их клиентов.
- Общий аварийный режим только для чтения теперь используется только при отказе базы конфигурации, записи, аудита, системного восстановления или внутренней ошибке службы.

После установки исправьте или отключите затронутый VPN. Предупреждение должно исчезнуть без ручного скрытия.

## dev395-to-dev396

### Что изменено

- MTProxy вынесен из раздела майнинга в отдельный раздел `Octava Connect → MTProxy`. Настройки и сохранённая конфигурация не изменяются.
- Для отключённого MTProxy создаётся обязательный каталог состояния. Штатно выключенная служба больше не создаёт постоянное предупреждение после загрузки.
- После изменения отключённого VPN-туннеля старые маршруты того же туннеля очищаются и строятся заново. Реальный конфликт с другим маршрутом по-прежнему блокирует только запуск конфликтующего объекта.
- Внутренние тесты изолированы от systemd build server и больше не вызывают PolicyKit.

### Что исправлено

- MTProxy больше не отображается как разновидность Stratum proxy.
- Устранён `MTPROXY_RUNTIME_FAILED` на чистой системе при выключенном MTProxy.
- Устранён ложный `VPN_ROUTE_STATE_MISMATCH` после изменения отключённого туннеля.
- Проверка удаления маршрута учитывает конкретный интерфейс-владелец и не принимает маршрут другого VPN за остаток текущего.

После установки сохранённые VPN, MTProxy, правила маршрутизации и пользовательские данные остаются на месте. Отключённые службы автоматически не включаются.

## dev396-to-dev397

### Что изменено

- Раздел `Octava Connect → MTProxy` переименован в `Octava Connect → Телеграм`.
- Интерфейсы приёма и выхода теперь показываются раздельно: внутренний `eth0`, порты-члены моста и интерфейсы без адресов больше не предлагаются там, где они неприменимы.
- Ссылка подключения создаётся для IP-адреса выбранного интерфейса прослушивания и его порта. Перед копированием адрес в готовой ссылке можно заменить на внешний IP или DNS-имя.
- Обязательные поля отмечаются и проверяются непосредственно в форме; причина недоступности кнопки проверки плана показана рядом с кнопками.
- Кнопки выбора варианта Stratum proxy снова занимают две равные колонки без пустого места.

### Что исправлено

- Убраны отдельные поля публичного адреса и публичного порта, которые дублировали параметры готовой ссылки.
- Списки интерфейсов больше не смешивают выходные туннели, LAN, внутренний parent и отдельные физические порты.
- Кнопка проверки плана становится доступна сразу после заполнения всех обязательных параметров и добавления хотя бы одного пользователя.
- Невалидные и незаполненные обязательные значения получают явное выделение и понятное описание ошибки.

Сохранённая конфигурация, пользователи, ключи, VPN, динамические маршруты и настройки Stratum остаются на месте. Службы автоматически не включаются.

## dev397-to-dev398

Это обновление исправляет четыре выявленных несоответствия интерфейса и управления.

### Исправлено

- Проверка плана динамической маршрутизации больше не сообщает без оснований, что системный демон недоступен. Таймауты согласованы, а при реальном отказе показывается конкретная причина связи с конфигурационной службой.
- В разделе «Телеграм» MTProxy сообщает, что ожидает подключения клиентов, без упоминания майнеров.
- Внутренний DSA-адаптер `eth0`, к которому относятся физические порты `lan0`–`lan3`, скрыт из пользовательских списков интерфейсов. В системной диагностике он сохраняется.
- Для уже созданных пользователей MTProxy показывается действующая ссылка `tg://` с кнопкой копирования.
- Секрет созданного пользователя MTProxy больше нельзя изменить. Для нового секрета нужно удалить пользователя и создать его заново либо создать другого пользователя.

### Дополнительно

- Аппаратный профиль портов BPI-R4 теперь входит в пакет и дополняется независимым определением DSA-связей через ядро.
- Ответ плана динамической маршрутизации может безопасно содержать увеличенный объём данных без ложного отказа веб-службы.

После установки проверьте создание плана динамического правила, отсутствие `eth0` в пользовательских списках и ссылки существующих пользователей в разделе «Телеграм».

## dev398-to-dev399

### Исправлено

- Допустимые большие правила динамической маршрутизации больше не отклоняются
  из-за устаревшего ограничения файла состояния в 1 МиБ. Защита от
  переполнения сохранена: действуют отдельные пределы модели, файла и истории.
- Warm-start динамической маршрутизации поддерживает весь разрешённый набор
  адресных связок и остаётся ограниченным по размеру.
- MTProxy проверяет фактические правила nftables, а не только сохранённый план
  и состояние процесса. Отсутствующее или изменённое разрешение listener port
  определяется как неисправность и пересобирается.
- При включении MTProxy выбранный порт разрешается только на выбранных
  интерфейсах; при выключении listener и egress rules удаляются.

### После обновления

Сохранённые правила, пользователи MTProxy, секреты и ссылки подключения не
изменяются. Startup reconcile пересоберёт owned firewall table MTProxy. После
входа проверьте применение большого правила Dynamic Routing и подключение
Telegram к MTProxy; затем выключите MTProxy и убедитесь, что его порт закрыт.

## dev399-to-dev400

### Что исправлено

- Правило «весь трафик через выбранный выход, кроме большого списка IP/CIDR»
  больше не разворачивается в десятки тысяч отдельных nftables rules.
  Исключения представлены компактным interval-набором, а основной маршрут —
  одной partition.
- Сложные правила с несколькими политиками и управляемым маршрутом по умолчанию
  сохраняют полный порядок приоритетов; оптимизация не меняет их семантику.
- Таймауты Web, API и `configd` согласованы с полным временем apply и rollback.
  После обрыва ответа интерфейс перечитывает фактическое состояние транзакции.
- Независимое восстановление конфигурации теперь умеет откатывать раздел
  Dynamic Routing вместе с DNS observer, DPI и service proxy runtime.
- Выбранный логический bridge разворачивается в его реальные member-интерфейсы
  из текущей конфигурации устройства без привязки к именам портов BPI-R4.

### Что произойдёт после установки

При первом запуске новый `configd` обнаружит незавершённую транзакцию и
восстановит последнее подтверждённое состояние. Существующие пользовательские
настройки и подтверждённая конфигурация сохраняются.

После обновления требуется вручную проверить исходное правило Dynamic Routing:
построить план, применить, подтвердить и проверить трафик как для исключённого
адреса, так и для адреса, направляемого через выбранный VPN.

## dev400-to-dev401

### Добавлено

- Резервная копия конфигурации больше не имеет искусственных ограничений общего размера и числа файлов на путях Web UI, Web API, local API и CLI. Большая корректная конфигурация проходит проверку, применение, точное восстановление и rollback. Проверки schema, device profile, разрешённых путей, режимов файлов, duplicate keys, symlink/path traversal и SHA-256 сохранены.
- Dynamic Routing выводит в техническом плане число списков, уникальных префиксов, DNS-привязок, partitions, destination sets, пакетных правил, расчётный размер nftables и действующий предел partitions.
- Stage обновления выполняется отдельным durable worker. Обновление страницы или повторный вход показывают уже существующую операцию и сохранённый прогресс.

### Исправлено

- Несколько крупных географических и сервисных списков больше не создают отдельное nft-правило для каждого назначения. Точные precedence partitions с одинаковыми источником и действием объединяются в interval set и одно пакетное правило; strict readback восстанавливает ту же semantic model.
- Все конечные foreground/API/recovery budgets увеличены на 30 секунд. Timeout и cancellation сохраняют точный код и фазу вместо ложного readback failure или drift.
- MTProxy привязывает listener к выбранным интерфейсам и исходящие соединения к выбранному выходу. Удалены скрытые terminal reject, которые блокировали ответы клиенту.
- Глобальная политика firewall управляет `INPUT`, `FORWARD` и `OUTPUT`. Явные пользовательские запреты имеют приоритет, а автоматические разрешения работающих служб восстанавливаются при возврате к политике запрета.
- Раздел обслуживания и updater остаются доступны при pending транзакции другого модуля; недоступная необязательная карточка показывает локальную ошибку.
- В составных интерфейсах показывается carrier каждого member-порта. Из выбора интерфейса статического маршрута исключены loopback, внутренний `eth0`, bridge members и ненастроенные L2-порты; backend применяет ту же проверку.
- Исторические failed update units очищаются только после доказанного terminal durable state, диагностическая история сохраняется.

### Сохранность данных

Обновление не заменяет пользователей, пароли, ключи, VPN/PPPoE credentials, прокси, маршруты, DHCP reservations, накопленную телеметрию и принятую конфигурацию. Перед изменением пакета updater сохраняет exact rollback.

## dev401-to-dev402

### Исправлено

- MTProxy получает минимально необходимую `CAP_NET_RAW` и может привязать входящие и исходящие сокеты к выбранным интерфейсам.
- Уже работающий MTProxy перезапускается при штатном обновлении и больше не остаётся исполняться из удалённого старого файла.
- Отключённый MTProxy остаётся отключённым: обновление не меняет сохранённое состояние службы и не запускает её без настройки.
## dev402-to-dev403

### Исправлено

- Кнопка «Скачать и проверить» больше не запускает установку и не переводит интерфейс на страницу установки. После скачивания и проверки администратор отдельно решает, устанавливать ли обновление.
- Завершённое скачивание теперь хранит достоверный прогресс 100%, а старые 96% не переносятся в итоговое состояние.
- В разделе обновлений текущая версия и доступное обновление показываются раздельно. Если обновлений нет, выводится явный статус.
- Проверка repository запускается в фоне после открытия раздела и показывает локальный спиннер, не задерживая вход и остальной интерфейс.

## dev403-to-dev404

### Исправлено

- После завершения «Скачать и проверить» интерфейс повторно читает durable state обновления после снятия общего spinner.
- В состоянии `staged` кнопка «Скачать и проверить» отключается, а кнопка «Установить» гарантированно становится активной без перезагрузки страницы и повторной проверки.

Скачивание и проверка пакетов по-прежнему не запускают установку автоматически. Установка начинается только после отдельного решения администратора.

## dev404-to-dev405

### Добавлено

- В карточке правила Dynamic Routing под готовыми списками появился отдельный
  блок «Исключённые адаптеры». В нём доступны применимые WAN, bridge, VLAN/L3
  и VPN-интерфейсы. Внутренний `eth0`, `lo`, участники bridge и свободные
  L2-порты не показываются.
- Сохранённый, но временно недоступный адаптер остаётся в правиле и явно
  помечается как недоступный.

### Исправлено

- Правило «все источники через VPN» больше не захватывает трафик, пришедший
  через исключённый VPN-адаптер. Для исключённого ingress сначала проверяется
  следующее подходящее правило, а при его отсутствии применяется общее
  действие маршрутизации.
- Exact interface rules выполняются до wildcard-классификации и восстановления
  dynamic conntrack mark. Поэтому уже установленная метка не возвращает
  исключённый поток в тот же VPN и не создаёт маршрутную петлю.
- Большие списки назначений не копируются для каждого исключённого адаптера:
  полностью исключённый интерфейс представлен одной компактной default
  partition на семейство адресов.

### После обновления

Updater перезапустит службы, формирующие и применяющие Dynamic Routing. Все
подтверждённые настройки, VPN, пользователи, секреты и накопленная телеметрия
сохраняются. Откройте нужное правило, выберите исключённые адаптеры, проверьте
план, примените и подтвердите его. Затем проверьте обычный LAN-трафик и трафик,
пришедший через каждый исключённый VPN-интерфейс.

## dev405-to-dev406

### Исправлено

- В блоке «Исключённые адаптеры» больше не показываются интерфейсы, уже
  назначенные выходами динамической маршрутизации. Учитываются общее действие
  по умолчанию, основные и резервные выходы всех правил, а также ещё не
  сохранённый выбор в открытом редакторе. Список обновляется сразу при смене
  основного или резервного выхода.
- Ранее сохранённое исключение выходного адаптера скрывается и удаляется при
  следующем сохранении черновика правила.
- MTProxy больше не меняет владельца каталога своей конфигурации при запуске.
  Обновление восстанавливает права, необходимые configd для повторного
  применения настроек, и перезапускает уже работающий MTProxy, не включая
  отключённую службу.

### Интерфейс

- Симулятор правил удалён из раздела Dynamic Routing вместе с занимаемой им
  разметкой. Диагностический read-only API сохранён для CLI и проверки системы.

После обновления откройте нужное правило и проверьте, что `AMS` и другие
назначенные выходы отсутствуют среди исключаемых адаптеров. Если MTProxy был
включён, проверьте его состояние и подключение Telegram. Все подтверждённые
настройки, пользователи, секреты, VPN и накопленная телеметрия сохраняются.

## dev406-to-dev407

### Исправлено

- Окно обновления показывает только ещё не установленные шаги фактического
  пути, от самого нового к самому старому. Установленная история больше не
  попадает в предлагаемый состав.
- Исключённые VPN-адаптеры Dynamic Routing сохраняются в модели редактора и
  попадают в черновик после проверки формы. Адаптеры, используемые как
  основной или резервный выход, по-прежнему недоступны для исключения.
- Из редактора правила удалён выбор обхода DPI. Сохранённые настройки backend
  не удаляются и не меняются при несвязанном редактировании.
- В форме VPN-сервера адрес сервера и сеть клиентов объединены в одну сеть:
  первый пригодный адрес получает сервер, остальные назначаются клиентам.
  Интерфейсы приёма и доступные сети выбираются флажками. Пустой публикуемый
  адрес вычисляется как IPv4 выбранного интерфейса и порт и показывается в
  placeholder до проверки плана.
- После изменения VPN-сервера существующие пользователи, ключи, сертификаты и
  пароли сохраняются. Повторно скачанный профиль содержит актуальные адрес,
  DNS, endpoint и разрешённые маршруты; при смене сети peer/PPP адреса
  назначаются заново в стабильном порядке. Ошибка применения возвращает
  прежние профили и адреса.

### Интерфейс обслуживания

- Оставлен один штатный механизм изменения версии — подписанное обновление.
  Отдельные пользовательские карточки установки пакетов и прошивки удалены;
  внутренние диагностические API сохранены.

### После обновления

Проверьте состав доступного обновления, затем выполните отдельные действия
«Скачать и проверить» и «Установить». После входа проверьте черновик Dynamic
Routing с исключёнными VPN-интерфейсами и повторную загрузку профиля
существующего пользователя после изменения тестового VPN-сервера. Все
подтверждённые настройки, пользователи, ключи, VPN, MTProxy, Stratum и
накопленная телеметрия сохраняются.

## dev407-to-dev408

### Добавлено

- Проверки и применения Network, Routing, Firewall, Secure DNS, Management,
  Dynamic Routing, Stratum, Telegram/MTProxy, VPN и восстановления конфигурации
  выполняются как единые сохраняемые операции. Обновление страницы, повторный
  вход и переход между разделами больше не сбрасывают их состояние.
- Внизу интерфейса показывается общий индикатор: текущее действие и этап,
  выполненное и оставшееся число шагов, переход к связанному разделу и
  безопасная отмена. После запуска операции остальные разделы остаются
  доступными.

### Исправлено

- Большие списки маршрутов и правил больше не завершаются по общему таймауту
  браузера или API. Искусственные ограничения размера конфигурационных
  запросов сняты; структура данных и доступные ресурсы продолжают проверяться.
- Dynamic Routing больше не компилирует один и тот же кандидат повторно при
  проверке, снимке и применении. Применяется кандидат, прошедший проверки для
  текущей ревизии; изменение после проверки требует нового плана.
- После перезапуска службы незавершённая операция явно отмечается как
  прерванная, а не выдаётся за зависшую или успешно завершённую.
- Надпись Octava Router на отдельной странице обновления имеет нормальный
  контраст на синем фоне.

### После обновления

Откройте большой список Dynamic Routing, нажмите «Проверить план» и наблюдайте
этапы в нижней панели. Можно перейти в другой раздел и вернуться: операция и
прогресс сохраняются. После успешной проверки примените и подтвердите план.
Проверьте тем же способом один план Firewall или Routing. Действующие маршруты,
правила, VPN, пользователи, ключи, MTProxy, Stratum и телеметрия сохраняются.


## dev408-to-dev410

### Исправлено

- Во время длительной проверки или применения интерфейс сохраняет исходный раздел и черновик. Переходы по меню, смена продукта, языка, пользователя и выход блокируются до завершения или явной отмены операции. Повторная проверка больше не получает ложную ошибку `BUSY` из-за фиксированного 30-секундного ожидания внутренней блокировки.
- Обработка больших safety-списков Dynamic Routing больше не сравнивает каждый префикс со всеми предыдущими. Набор из десятков тысяч адресов компилируется за ограниченное число проверок родительских сетей.
- Фоновый монитор читает только SHA-указатель принятой routing revision. Полный runtime загружается и проверяется лишь после фактической смены revision, поэтому `configd` не расходует ядро на повторную компиляцию одного состояния каждую секунду.
- При остановке `configd` активная длительная операция получает отмену. Если остановка пришлась на runtime-транзакцию, package upgrade сохраняет journal previous/candidate; новый демон проверяет его относительно подтверждённой конфигурации и завершает либо откатывает транзакцию до готовности API.
- Устранён отказ установки dev409 поверх большого runtime: переход выполняется напрямую с dev408 на dev410, без установки отозванного пакета.

### После обновления

Запустите проверку большого плана Dynamic Routing. До её завершения меню должно оставаться заблокированным, нижняя панель должна показывать этапы, а отмена должна быть доступна. После завершения повторите проверку и убедитесь, что черновик сохранён и `BUSY` не появляется.

## dev410-to-dev411

### Исправлено

- DPI bypass полностью выведен из рабочего контура Router: служба больше не запускается вместе с системой и configd не обращается к её runtime-сокету.
- Обновление останавливает и отключает оставшийся DPI unit на ранее установленных версиях. Это устраняет ложное предупреждение `DYNAMIC_ROUTING_STARTUP_FAILED` при выключенной функции.
- DPI удалён из API Dynamic Routing и из списка управляемых служб. Установленный старый пакет остаётся неактивным только для точного rollback; в image 13 он не включается.
- Стабилизирована нагрузочная проверка учёта трафика Transparent Stratum без изменения его runtime.


## dev411-to-dev412

### Исправлено

- Проверка фактической nftables-таблицы теперь принимает безопасный порядок exact-правил входного интерфейса до восстановления метки существующего соединения.
- План с исключёнными VPN-адаптерами больше не откатывается с ложной ошибкой о небезопасном порядке.
- Readback отдельно проверяет завершающее Default action exact-цепочки и по-прежнему fail-closed отклоняет реально неверный порядок или действие.

### После обновления

Повторите проверку, применение и подтверждение того же плана Dynamic Routing с исключёнными `GITR` и `WG-test`. VPN-маршруты, handshakes и management path должны сохраниться.

## dev412-to-dev413

### Исправлено

- Нижняя панель длительной операции теперь существует только во время работы: она показывает прогресс, блокирует переходы и предлагает отмену. После завершения панель автоматически скрывается и больше не содержит кнопку «Открыть», которая сбрасывала локальный черновик.
- Исключённый в правиле адаптер защищает не только входящий через него трафик, но и все сети, которые фактическая основная таблица маршрутизации направляет через этот адаптер. Правило «все источники / весь трафик через VPN» больше не перехватывает доступ к сетям других VPN.
- Связь адаптера с сетями берётся из действующих маршрутов ядра. Поэтому поддерживаются все specific routes WireGuard/AWG, OpenVPN `push route`, PPP и будущих туннелей; маршрут по умолчанию не создаёт неограниченное исключение.
- После перезапуска туннеля, нового OpenVPN route push либо смены metric маршрутов динамический runtime проверяет внешнее состояние не реже раза в пять секунд и атомарно перестраивается без изменения сохранённого правила.

### После обновления

Повторите проверку и применение правила `все источники / весь трафик -> AMS` с исключёнными `GITR` и `WG-test`. Убедитесь, что сети обоих туннелей доступны с LAN, обычный внешний трафик продолжает идти через AMS, а после успешного завершения нижняя панель операции исчезает сама.

## dev413-to-dev414

### Исправлено

- Пятисекундный контроль VPN-маршрутов, подтверждённых endpoint и DNS-составов
  больше не запускает полную компиляцию большого плана, если функциональное
  состояние не изменилось.
- Полная пересборка и проверка фактических таблиц выполняются только после
  изменения маршрута, endpoint или состава адресов DNS. Продление неизменного
  DNS TTL обновляет только время следующей проверки.
- Повторные проверки сериализованы: новый цикл не накладывается на уже идущую
  проверку или пересборку. Изменение состояния во время сборки оставляет
  следующий цикл в консервативном режиме полной проверки.

### После обновления

Оставьте Dynamic Routing включённым с большим списком и убедитесь, что при
неизменных VPN и DNS нет постоянной нагрузки и ошибок `BUSY`. Затем
перезапустите тестовый VPN или измените его маршрут: новая сеть должна попасть
в исключения не позднее следующего пятисекундного контроля.


## dev414-to-dev415

### Исправлено

- Пятисекундная проверка внешнего состояния Dynamic Routing больше не удерживает общую блокировку настроек при неизменных маршрутах, DNS, endpoint и affinity. Выключение и включение VPN поэтому не должно требовать повторного нажатия из-за фоновой проверки.
- Полный compiler, kernel readback и применение правил по-прежнему выполняются только после фактического изменения. Перед применением состояние повторно проверяется под общей транзакционной блокировкой.
- Временная сериализация настроек больше не показывается как безымянное «Служба занята». Интерфейс отдельно объясняет штатную фоновую сверку и другую выполняемую операцию настроек и сообщает, что это механизм защиты, а не сбой роутера.

### После обновления

При включённой Dynamic Routing несколько раз выключите и включите тестовый VPN. Каждая операция должна сработать с первой попытки. При реальном совпадении с фоновой пересборкой интерфейс должен показать понятную временную причину, а не сообщение о неисправности службы.


## dev415-to-dev416

Исправлена установка Router Control в чистый SD-образ: package lifecycle
теперь явно отличает first boot от обновления работающего устройства и не
пытается останавливать несуществующие в chroot службы. Поведение live update и
состав работающих служб не изменены.


## dev416-to-dev417

### Исправлено

- Исправлена потеря Web, SSH, ping и исходящих системных соединений после первого применения заводской политики firewall `drop`. Firewall schema 1 снова сохраняет совместимый OUTPUT accept до отдельного перехода на schema 2 с полным реестром зависимостей служб.
- Явные пользовательские OUTPUT `drop` и `reject` остаются выше compatibility rule и продолжают блокировать заданный администратором трафик.

### После обновления

Перезагрузка для исправления не требуется. На новом image 13.1 проверьте первый запуск сначала без WAN, затем с WAN: LAN, Web и SSH должны оставаться доступны после запуска configd и применения firewall.
