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

Ниже перечислены все шаги, которые 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.
