- 'Domain and IP lists' → 'Списки доменов и IP'
- '.lst lists containing domains and subnets' → 'с доменами и подсетями'
- '.lst lists containing domains. IP entries are ignored' → 'IP игнорируются'
- '.srs/.json lists. Subnets are ignored by default' → 'Подсети по умолчанию игнорируются'
- dependsOnRuleConditions(): show Device filter also for DNS when conditions are set
- makeDeviceOptionsExclusive(): prevent same device in Device filter + Forced routing simultaneously
- fullyRoutedOption: also shows for DNS action
- ruleSetOption: 'Subnets are ignored by default' (was: Only domain rules)
- domainIpListsOption: renamed 'Domain and IP lists', retain=true, dependsOnRoutingAction, write/remove handlers
- dnsDomainListsOption: new field for DNS action showing 'Domain lists' with IP-ignored note
- _dns_domain_ip_lists: added to dependsOnRuleConditions DNS conditions
- isErrorLogLine: detect sing-box rule-set download errors
- maskDiagnostics: mask option private_key and option url
- Дефолтный путь cache.db изменён: /tmp → /etc/sing-box/cache.db
- При перезагрузке роутера fakeip маппинги сохраняются (overlay fs)
- При SIGHUP hot-reload sing-box читает полный кэш без потерь
- При tachyon stop кэш удаляется (clean state)
- UI настроек обновлён: Persistent выбран по умолчанию, RAM помечен как 'lost on reboot'
- Удалён устаревший Flash (/usr/share) вариант
- Новая кнопка 'Загрузить .conf' в настройках AWG-секции
- Парсинг INI-формата AmneziaWG .conf файлов на стороне браузера
- Нормализация поля Address: добавляет /32 (IPv4) и /128 (IPv6) если нет
- Автоконвертация I1-I5 из формата UCI binary <b 0xHEX> в чистый hex
- Заполняет все поля: PrivateKey, Address, PublicKey, Endpoint, Jc/Jmin/Jmax, S1-S4, H1-H4, I1-I5, PresharedKey
- Визуальная обратная связь: состояния success/error с автосбросом
- Переводы добавлены в ru.po
- Добавлен генератор WARP конфигурации (warp_generator.uc)
- Исправлена запись binary UCI значений (<b 0x...>) в поля awg_i1-i5:
warp_generator.uc использует to_hex(), section.js очищает значения перед записью
- generator.uc: добавлена защита uci_bin_to_hex() при чтении awg параметров
- generator.uc: поля awg_i3/i4/i5 со значением '0' пропускаются
- section.js: кнопка Generate WARP Config переработана в стиле Tachyon UI
(cbi-button-neutral, состояния loading/success/error с анимациями)
- LuCI: новое поле 'Исключить устройства' в форме секции (addLocalDeviceSubnetDynamicField)
- Перевод RU: 'Исключить устройства' + описание
- sing-box: add_excluded_ips_rule() — direct-bypass правило с наивысшим приоритетом
- nftables: nft_excluded_source_match_args() — негативный матч saddr в правилах маркировки
- Сигнатуры: nft/apply.uc + service/state.uc — отслеживание изменений excluded_ips
- TypeScript: поле excluded_ips в типе секции
- Диагностика: IP исключённых устройств маскируются в логах поддержки
- LuCI section.js: new 'Excluded devices' field (after fully_routed_ips)
- po/ru: translations for new field and description
- singbox/generator.uc: add_excluded_ips_rule() - direct bypass rule, highest priority
- nft/apply.uc: nft_excluded_source_match_args() - negative saddr match in nft rules
- nft/apply.uc + service/state.uc: signature tracking for config change detection
- fe-app-tachyon/src/tachyon/types.ts: excluded_ips type field
- maskDiagnostics.ts: redact excluded_ips in support logs
- backend: исправлена гонка данных (race condition) при старте роутера,
когда list_update пытался добавить элементы в nft-сеты, пока reload-firewall
ещё пересоздавал таблицу TachyonTable. Фаза применения nft теперь защищена
RELOAD_LOCK_DIR, что устраняет ошибку 'nft add element ... No such file or directory'
- backend: добавлены CLI-команды telegram_status, telegram_start, telegram_stop
в /usr/bin/tachyon для управления ботом из LuCI
- luci: добавлен виджет статуса Telegram-бота на вкладке настроек —
показывает состояние (запущен/остановлен с PID), кнопки Запустить/Остановить,
автообновление каждые 10 секунд без перезагрузки страницы
- frontend: пересобран main.js (yarn ci — 507 тестов прошли успешно)
- версия npm-пакета: 1.2.0
Resolves merge conflicts:
- install.sh, build.sh, .github/workflows/build.yml: Reverted to Dushnilin's versions to avoid installing SourceForge mirrors.
- fe-app-tachyon: Resolved type, formatting and copyOutbound conflicts, keeping both Dushnilin's custom features and ushan0v's frontend performance optimizations.
- backend: Kept Dushnilin's ucode refactorings, Telegram bot integration, and release repository URL (Dushnilin/tachyon) while merging updates.uc cache format v8 & persistent cache format v7.
- tests: Merged tests from both branches, preserving ucode -L wrappers for local test execution.
- Установщик (install.sh): внедрена верификация хешей sha256sums.txt, нормализована очерёдность бутстрапа ucode до языковых проверок.
- Сборщик (build.sh): добавлена автоматическая генерация sha256sums.txt для пакетов релиза.
- Бэкенд: права на honeypot FIFO ограничены до 0660 в watchdog.uc, исправлена опечатка в SUBNETS_TELEGRAM, удалён helpers.old.uc.
- Тесты бэкенда: написаны тесты для core_ip, core_url и config_connections.
- Фронтенд: реализовано автопереподключение WebSocket с экспоненциальным бэкоффом, проведена дедупликация виджетов и модальных окон в initController.ts, мигрирован CSS-префикс с fkp_ на tachyon_.
- Тесты фронтенда: добавлен initController.test.ts для тестирования загрузки дашборда.
- Вынесена логика вызова команд shell в core.common
- Удалено дублирование реализации чтения stdin и извлечения параметров UCI
- Громоздкие циклы парсинга URL в helpers.uc переписаны на регулярные выражения
- Проверка IPv4/IPv6 упрощена до использования регулярных выражений вместо построчного разбора
- Использованы встроенные функции ucode (lc, length) вместо ручных аналогов
- Очистка фронтенда: удален функционал мониторинга прямого трафика и лишняя колонка 'Add to' из UI таблиц