{ "versions": [ { "version": "0.8.60", "date": "2026-05-07", "title": "AJAX-навигация панели была отключена", "summary": "Панель была переведена в стабильный режим обычной навигации: panel.js больше не перехватывает переходы по ссылкам и POST-формы. AJAX оставлен только для безопасных фоновых функций: раскрытие меню, мобильное меню, обновление фрагментов и live-status.", "features": [ "Убран перехват кликов по ссылкам для AJAX-подмены страниц", "Убран перехват POST-форм для AJAX-submit", "Удалена логика swapPage/ajaxNavigate из panel.js", "Скрипты страниц снова выполняются через нормальную загрузку документа", "Снижена нестабильность из-за смешанного full-load/AJAX режима", "Оставлены безопасные фоновые функции: nav groups, mobile menu, refreshFragments, live-status и toasts", "Версия обновлена до 0.8.60" ] }, { "version": "0.8.59", "date": "2026-05-07", "title": "Раскрытие блока Образы было восстановлено", "summary": "На странице базы знаний был подключён /static/panel.js, чтобы раскрывающийся блок Образы снова работал по клику. Группа Образы не открыта принудительно, но корректно раскрывается через свою кнопку.", "features": [ "web/static/knowledge.html снова подключает /static/panel.js", "Блок Образы раскрывается по клику на свою кнопку", "При открытии Базы знаний Образы не раскрываются принудительно", "Версия блока базы знаний обновлена до 0.8.59", "Версия проекта обновлена до 0.8.59" ] }, { "version": "0.8.58", "date": "2026-05-07", "title": "Меню базы знаний было исправлено", "summary": "На статической странице базы знаний была убрана принудительная раскрытость группы Образы. Теперь при открытии Базы знаний меню Образы не раскрывается само по себе, а нижний пункт База знаний остаётся активным.", "features": [ "В web/static/knowledge.html удалён класс open у группы Образы", "Активным оставлен только пункт База знаний", "Версия блока базы знаний обновлена до 0.8.58", "Версия проекта обновлена до 0.8.58" ] }, { "version": "0.8.57", "date": "2026-05-07", "title": "Меню было централизовано на основных страницах", "summary": "Главная страница, создание VM и карточка VM были переведены на общий шаблон меню _sidebar.html. Это устранило ситуацию, когда пункт База знаний был добавлен в общий шаблон, но не появлялся на страницах со старым зашитым aside.", "features": [ "dashboard.html теперь подключает общее меню через _sidebar.html", "vm_create.html теперь подключает общее меню через _sidebar.html", "vm_detail.html теперь подключает общее меню через _sidebar.html", "Пункт База знаний теперь должен появляться на главной, создании VM и карточке VM", "Закреплено правило: меню правится только в web/templates/_sidebar.html, без отдельных копий в страницах", "Версия обновлена до 0.8.57" ] }, { "version": "0.8.56", "date": "2026-05-07", "title": "База знаний была добавлена в панель", "summary": "В главное меню Virtuality в самый низ был добавлен пункт База знаний. Раздел был первично наполнен документацией по SSL-ready подходу, Let’s Encrypt, bridge/NAT пробросам, ключевым директориям, обновлению панели и диагностике сети.", "features": [ "В левое меню добавлен пункт База знаний в нижней части навигации", "Добавлена статическая страница /static/knowledge.html с первым набором документации", "В базу знаний внесён чек-лист SSL-ready by default для Let’s Encrypt", "Описаны варианты проброса для bridge VM и NAT VM", "Добавлены ключевые директории Virtuality и команды обновления", "Добавлены быстрые команды диагностики хоста, VM и сетевого проброса", "Добавлены стили для нижнего пункта меню и карточек базы знаний", "Версия обновлена до 0.8.56" ] }, { "version": "0.8.55", "date": "2026-05-07", "title": "Проброс портов для bridge VM был добавлен", "summary": "Сетевой патч был расширен для VM в bridge/static сетях: правила теперь определяют интерфейс до IP VM через ip route get и используют его вместо жёсткой привязки к virbr100. Это позволяет пробрасывать порты на VM, подключённые к br0, например fastpanel с IP 10.0.0.152.", "features": [ "Добавлен патч patch_network_bridge_forwards.py", "Установщик теперь применяет bridge/static VM patch после патча диапазонов портов", "nftables DNAT теперь добавляет FORWARD/MASQUERADE правила для фактического интерфейса VM", "iptables fallback теперь использует интерфейс маршрута к guest_ip вместо постоянного virbr100", "Команда диагностики tcpdump теперь подставляет реальный интерфейс до VM", "Версия обновлена до 0.8.55" ] }, { "version": "0.8.54", "date": "2026-05-07", "title": "Ручной IP VM был добавлен в проброс портов", "summary": "На странице Сеть скрытое значение guest_ip=auto было заменено на видимое поле IP VM. Теперь при пустых DHCP leases, статическом IP внутри VM, bridge-сети или отсутствии qemu-guest-agent можно вручную указать внутренний IP и создать проброс без блокировки автоопределением.", "features": [ "В форме добавления проброса портов появилось поле IP VM", "Значение auto оставлено по умолчанию для обычного DHCP/qemu-guest-agent сценария", "Ручной внутренний IP VM теперь можно указать прямо при создании DNAT-правила", "Подсказки DHCP leases были уточнены для bridge/static VM и готовых образов", "Версия обновлена до 0.8.54" ] }, { "version": "0.8.53", "date": "2026-05-07", "title": "Проброс диапазонов портов был усилен", "summary": "Патч сетевых диапазонов был усилен: форма проброса теперь принимает диапазоны как текст, iptables DNAT использует корректный синтаксис диапазона назначения, а применение правил не падает сразу при сбое nftables, если iptables fallback смог поставить правила.", "features": [ "Обработчик /network/forward/add был исправлен для приёма диапазонов портов как строки", "iptables DNAT для диапазонов теперь формирует назначение вида IP:10000-20000 вместо ошибочного IP:10000:20000", "apply_port_forwards теперь пробует UFW и iptables fallback даже если nftables не применился", "Ошибки применения правил теперь собираются в более понятное сообщение", "Версия обновлена до 0.8.53" ] }, { "version": "0.8.52", "date": "2026-05-07", "title": "Страница сети была переведена на единое меню", "summary": "Раздел Сеть был переведён со старого shell-каркаса на общий v-layout/v-main с подключением _sidebar.html, чтобы после F5 левое меню не пропадало.", "features": [ "Страница network.html была переведена на общий v-layout/v-main каркас", "Раздел Сеть теперь подключает единое меню через _sidebar.html", "panel.js подключён на странице Сеть", "После F5 левое меню больше не должно пропадать в разделе Сеть", "Версия обновлена до 0.8.52" ] }, { "version": "0.8.51", "date": "2026-05-07", "title": "Левое меню было пересобрано централизованно", "summary": "Левое меню было вынесено в единый шаблон _sidebar.html и подключено к страницам ISO, Диски, Операции и Хост. Установщик теперь финально восстанавливает основные канонические шаблоны панели после патчеров.", "features": [ "Общее меню _sidebar.html было пересобрано", "Страница ISO была переведена на общий v-layout/v-main каркас", "Страница Диски была переведена на общий v-layout/v-main каркас", "Страница Операции была переведена на общий v-layout/v-main каркас", "Страница Хост была переведена на общий v-layout/v-main каркас", "Прогресс-бар был убран из таблицы операций", "install_web_panel.sh теперь восстанавливает основные канонические шаблоны панели после патчеров", "После F5 левое меню больше не должно пропадать на ISO, Диски, Операции и Хост", "Версия обновлена до 0.8.51" ] } ] }