Changelog
[1.0.0] - 2026-10-15
Первый публичный стабильный релиз SCADA.AI. Переход от версий 3.x.x к 1.0.0 знаменует готовность продукта к промышленному развёртыванию у конечных заказчиков.
🎉 Added
- Разделение конфигурации на два уровня:
.env(зашивается в Docker-образ при сборке) — содержит только секреты:YANDEX_API_KEY,YANDEX_FOLDER_ID,ENABLED_MODULES./data/system_config.json(на постоянном Docker volume) — runtime-настройки: БД, город, LLM-параметры, включённые модули. Изменяются через Конфигуратор в UI и сохраняются между перезапусками.- Генерация
system_config.jsonна этапе сборки релиза (build_release.py) с дефолтными значениями для нового клиента. - Функция
_load_settings()вsettings.py— загрузка конфигурации с приоритетом:system_config.json>.env> дефолты. - Быстрый старт (QUICK_START.md) с описанием системных требований, установки, настройки БД и типовых проблем.
🔒 Security
- Исключение секретов из UI:
yandex_api_keyиyandex_folder_idубраны из моделиEnvConfigи из ответаGET /config/env— теперь их невозможно прочитать через API после сборки. - Запись секретов только в
.envобраза: ключи Yandex больше не сохраняются вsystem_config.json, который доступен для редактирования через UI.
🐛 Fixed
- Бесконечная рекурсия в
chat.ts:generateId()вызывал сам себя вместоcrypto.randomUUID(). - Сброс настроек БД после перезапуска:
get_env()читал из зашитого.envвместо актуальногоsettings→ теперь возвращает данные изsystem_config.json. - Ошибка 500 при запуске DDA-анализа:
PermissionErrorпри сохранении истории вbackend/data/analysis_history→ путь исправлен на/data/analysis_history(проброшенный volume). - Отсутствие тренда/прогноза для VOC в Аналитике: условие
trend.slope_per_day !== 0вTrendChart.svelteзаменено на проверку!== undefined && !== null— теперь тренд рисуется и для стабильных параметров. - Версия в UI: обновлена с
v3.3.3.0наv1.0.0вHome.svelteиConfig.svelte. - Переключение модулей:
toggle_module()теперь пишетenabled_modulesвsystem_config.json, а не в.env.
⚙️ Changed
- Номер версии:
3.3.3.0→1.0.0во всех точках:build_release.py,settings.py, UI, Docker-теги. build_release.py:generate_env()создаёт.envтолько с секретами (без БД, города и пр.).- Используется
cwd=ROOT / "backend"иcwd=ROOT / "frontend"при сборке Docker — решает проблему путей в Git Bash + Docker Desktop на Windows. - Добавлено создание
data/system_config.jsonвcopy_data(). config.py:update_env()сохраняет в/data/system_config.jsonвместо записи в.env.toggle_module()обновляетenabled_modulesв JSON.get_env()возвращает данные из объектаsettings.
🏗️ Build & Infrastructure
- Cython-компиляция: добавлено исключение
!compile_cython.pyв.dockerignore, чтобы файл попадал в контекст сборки Docker. - Dockerfile: корректная работа в среде Git Bash + Docker Desktop на Windows (через
cwdвместо относительных путей). - Увеличение лимитов WSL2: в документации добавлены рекомендации по
.wslconfig(минимум 8 ГБ RAM для компиляции Cython).
📚 Documentation
- Добавлен
QUICK_START.mdс пошаговой инструкцией развёртывания. - Описаны типовые проблемы:
ERR_CONNECTION_TIMED_OUT(порт только на localhost),Permission denied(пути volume), сброс настроек (разделение.env/ JSON), ошибка компиляции Cython. - Обновлён
ARCHITECTURE.mdс учётом новой схемы конфигурации.
⚠️ Breaking Changes
- Миграция с 3.3.3.0: клиенты, обновляющиеся с предыдущих версий, должны вручную перенести runtime-настройки (БД, город, модули) из
.envвdata/system_config.jsonпри первом запуске. Секреты Yandex остаются в.envобраза. - API
/config/env: поляyandex_api_keyиyandex_folder_idбольше не возвращаются и не принимаются. Попытка их передать будет проигнорирована. - Путь истории DDA: изменён с
backend/data/analysis_history/на/data/analysis_history/. Существующие записи истории необходимо перенести вручную.
[3.3.3.0] - 2026-09-22
🔥 Мультидоступ и подготовка к продакшену
Исправлено:
- Фикс 401 на DDA endpoints — добавлен Authorization заголовок к нативным fetch запросам
- DDAInterpretation.svelte — интерпретация результатов
- ABComparisonModal.svelte — A/B сравнение
- Убран захардкоженный localhost:8081 из всех фронтенд-файлов
- api.ts — основной HTTP клиент
- auth.ts — логин
- license.ts — статус и загрузка лицензии
- DDAInterpretation.svelte — стриминг интерпретации
- ABComparisonModal.svelte — A/B анализ
- Теперь хост определяется динамически из window.location или .env
- Фикс crypto.randomUUID для non-secure contexts (http://IP:port)
- Добавлен полифилл generateId() в chat.ts
- CORS настроен для мультидоступа
- allow_origins=["*"] для разработки и демо
- allow_credentials=False (JWT в заголовке, не в cookies)
Добавлено:
- Поддержка подключения с других машин по сети
- Динамическое определение хоста API через VITE_API_BASE_URL или window.location
Проверено: - Мультидоступ работает: логин, DDA, чат с другой машины - Все модули доступны по сети (health, analytics, deep_analysis, energy)
Технические детали
frontend/src/lib/api.ts—API_BASEвместо хардкодаfrontend/src/stores/chat.ts— полифиллgenerateId()backend/main.py— CORSallow_origins=["*"],allow_credentials=False
[3.3.2.3] - 2026-08-25
Обновлена страница входа
- Фоновое изображение
logo.gifс затемнением - Новый заголовок
AI.SCADA(AI синий, SCADA светлосерый, шрифтfont-mono) - Современный дизайн: уменьшенное окно, узкие поля ввода, тёмная кнопка с синим кантом
- Динамическая версия в футере (загружается из
/system/info) - Убрано автозаполнение полей (
autocomplete="off", безplaceholder)
[3.3.2.2] - 2026-08-24
Документация
- Создан
backend/docs/auth.md— полная документация по системе авторизации и ролевой модели: - Ролевая модель (4 роли, матрица доступов)
- Архитектура авторизации (схема потока аутентификации)
- Механизм работы (логин, токены, сессии, выход, восстановление)
- Ролевая защита на бэкенде (AuthMiddleware, require_role)
- Ролевая защита на фронтенде (скрытие UI, hasRole)
- API Endpoints с примерами запросов
- Управление пользователями (хранилище, смена паролей)
- Лицензирование и авторизация (связь двух систем)
- Защита от краевых случаев (истёкшие токены, 401/402/403)
- Примеры кода (безопасные хелперы)
- Известные проблемы и решения (история багов)
- Быстрый старт (демо-доступы)
auth.mdдобавлен в whitelistdocs.pyдля отображения в конфигураторе
[3.3.2.0] - 2026-08-24
Добавлено
- Система авторизации и ролевая модель:
- 4 предустановленные роли:
admin,engineer,operator,boss. - Локальное хранение пользователей в
backend/data/users.jsonс хешированием паролей (bcrypt). - Endpoints:
POST /api/v1/auth/login,POST /api/v1/auth/logout,GET /api/v1/auth/me. - Управление пользователями (только
admin):GET/POST/DELETE /api/v1/auth/users,PUT /users/{username}/password. - AuthMiddleware:
- Проверка JWT-токена на всех запросах (кроме публичных путей).
- Установка
request.state.userдля использования в роутерах. - Корректная обработка
OPTIONS(CORS preflight). - Управление сессиями лицензий:
POST /api/v1/license/session/start— создание сессии.POST /api/v1/license/session/heartbeat— продление сессии (каждые 30 сек).POST /api/v1/license/session/end— завершение сессии.- Лимит одновременных подключений согласно лицензии.
- Вкладка «Лицензия» в Конфигураторе:
- Просмотр статуса лицензии (клиент, тип, срок, сессии, доступные модули).
- Drag & Drop загрузка файла
.licс валидацией (расширение, размер до 1МБ). - Автоматическое обновление статуса после загрузки.
- Фронтенд-авторизация:
LoginModal.svelte— модальное окно входа при запуске.- Отображение имени пользователя и кнопка «Выход» в шапке.
- Хранение токена в
localStorage, автоматическая подстановка в запросы. - Обработка 401 (автоматический выход и перезагрузка).
Технические улучшения
- Создан модуль
backend/core/auth/(models, password, jwt_utils, storage, middleware). - Создан
backend/api/routes/auth.pyс полным набором endpoints. - Создан
frontend/src/stores/auth.tsдля управления состоянием авторизации. - Обновлён
frontend/src/lib/api.ts— корректная работа сkyv2 иRequestобъектами. - Обновлён
frontend/src/stores/license.ts— безопасное чтение стора черезget().
Безопасность
- Пароли хранятся только в виде хешей (bcrypt).
- JWT-токены с секретным ключом и временем жизни 24 часа.
allow_credentials=Trueв CORS для корректной работы с заголовками.
[3.3.1.1] - 2026-08-21
Добавлено
- Вкладка "Лицензия" в Конфигураторе:
- Полноценный UI для просмотра статуса лицензии (клиент, тип, срок, сессии, доступные модули).
- Drag & Drop зона и кнопка для загрузки нового файла
.lic. - Валидация формата и размера файла на стороне клиента.
- Автоматическое обновление статуса после успешной загрузки.
Технические улучшения
- Добавлена функция
uploadLicenseвfrontend/src/stores/license.ts. - Создан компонент
LicensePanel.svelteи интегрирован вConfig.svelteкак отдельная вкладка. - Улучшена обработка ошибок при загрузке лицензии через UI.
[3.3.1] - 2026-08-21
Исправлено
- Критический баг: утечка сессий при перезагрузке страницы (F5). Теперь
session_idсохраняется вsessionStorage, что позволяет переиспользовать существующую сессию вместо создания новой. - Улучшена стабильность работы счётчика concurrent users в информационном блоке лицензии.
Технические улучшения
- Добавлена логика
sessionStorageвfrontend/src/stores/license.tsдля управления жизненным циклом сессии на стороне клиента. - Оптимизированы вызовы
startSessionиendSessionвHome.svelteиConfig.svelte(добавленonDestroy). - Уменьшен риск "зависания" неактивных сессий на backend благодаря корректной очистке при закрытии вкладки.
[3.3.0.1] - 2026-08-21
Исправлено
- Исправлены проблемы с CORS при локальной разработке (Vite + FastAPI)
- Увеличен таймаут HTTP-клиента до 180 секунд для долгих запросов к БД/LLM
- Исправлены дубликаты импортов в Home.svelte
- Добавлен блок "Лицензия" в правый сайдбар Home.svelte
Документация
- Обновлён README.md с информацией о системе лицензирования
- Добавлен LICENSING.md в whitelist docs.py для отображения в UI
- Обновлены версии во всех файлах документации
🔧 Технические улучшения
- Переход на customFetch в api.ts для надёжного перехвата HTTP-ошибок
- Добавлена обработка HTTP 402/403 на фронтенде
- Улучшена стабильность работы с long-running запросами
[3.3.0] - 2026-08-21
Добавлено
- Полноценная система лицензирования (Offline):
- Валидация JWT-токенов с подписью RSA-2048 (
core/license/) - Поддержка Grace Period (по умолчанию 3 дня) с визуальными предупреждениями в UI
- Ограничение количества одновременных пользовательских сессий (in-memory tracking с таймаутом 30 мин)
- Feature gates — модули загружаются только если они разрешены текущей лицензией
- UI управления лицензией:
- Новый store
frontend/src/stores/license.tsдля управления состоянием лицензии - Компонент
LicenseBanner.svelte— предупреждения при grace period / истечении - Обработка HTTP 402/403 в
api.tsчерез customFetch wrapper - CLI-инструменты:
scripts/generate_keys.py— генерация RSA-2048 ключейscripts/generate_license.py— генерация файлов.lic- Middleware:
- Глобальная проверка срока действия лицензии для всех API-запросов
- Возврат HTTP 402 при истечении (после grace period)
- Возврат HTTP 403 при превышении лимита пользователей
- Документация:
- Новый раздел
docs/LICENSING.mdс полным описанием системы - Обновлён
MODULES.md— добавлена таблица соответствия лицензий и модулей
🛠️ Изменено
- Увеличен таймаут HTTP-клиента (ky) на фронтенде до 180 секунд для поддержки долгих LLM/DB запросов
- Исправлены проблемы с CORS при локальной разработке (Vite + FastAPI)
- Переход на
customFetchвapi.tsдля надёжного перехвата HTTP-ошибок
Документация
- Создан
docs/LICENSING.md— полное руководство по системе лицензирования - Обновлён
MODULES.md— добавлен раздел о feature gates - Обновлён
CHANGELOG.md— добавлена запись о v3.3.0 - Обновлены
Project_full_description.mdиARCHITECTURE.md— версия 3.3.0
v3.2.9 (2026-07-01)
v3.2.9.1 (2026-07-08)
Fixes
- DDA: Исправлен UnicodeEncodeError при логировании результатов анализа с символами ↔ и другими Unicode
- DDA: Исправлены кнопки зума (+/-/reset/download) на графике "Типичный паттерн" для multi-tag анализа
- Заменён единый
patternChartInstanceнаpatternChartInstances: Record<string, ChartJS> - Уникальный ID для каждого графика в цикле
- Функции zoom принимают
tagKeyпараметр
Known Issues
- Health модуль: если SCADA не пишет данные последние 24 часа, отображаются нули (данные есть, но старые)
Added
A/B Анализ — полноценный статистический модуль сравнения периодов/оборудования
Backend: POST /api/v1/deep_analysis/ab endpoint
Backend: модуль modules/deep_analysis/analyzers/ab.py с функциями:
compare_snapshots() — базовая статистика + Welch's t-test + Cohen's d
compare_patterns() — FFT-автодетект периодов + корреляция суточных паттернов
generate_verdict() — автоматический вердикт с severity (low/medium/high)
Два режима анализа:
Before/After: один тег, разные периоды (оценка эффекта изменений)
Equipment Comparison: два тега, один период (сравнение оборудования)
Метрики: mean/median/std/variance/min/max/range delta в %
Статистическая значимость: p-value, t-stat, Cohen's d, интерпретация
Сравнение паттернов: корреляция, совпадение периодов, изменение амплитуды
Автогенерация findings и recommendations на основе результатов
Frontend: ABComparisonModal.svelte — модалка с выбором режима/тегов/периодов
Frontend: кнопка "Сравнить периоды (A/B)" в DeepAnalysisControls
Frontend: визуализация результатов (verdict, статистика, значимость, паттерны)
Frontend: кнопка "Использовать в анализе" — передача результата в LLM интерпретацию
Frontend: автопереключение на вкладку "Интерпретация" через forceTab пропс
Backend: защита от NaN/Inf/None через _safe_float() helper
Backend: _safe_pct_change() — безопасный расчёт % изменений
Backend: санитизация JSON ответа (рекурсивная замена NaN → null)
Backend: валидация размера выборки (MIN_SAMPLE_SIZE = 10)
Backend: фильтрация невалидных данных перед статистикой
Backend: корректная обработка дат YYYY-MM-DD (расширение до 00:00:00 / 23:59:59)
Документация: полная MD-документация по A/B анализу с математикой, API, примерами
Fixed
Frontend: унификация высоты хидеров SystemLogsPanel / DeepAnalysisControls / DeepAnalysisResults
Убран встроенный margin у <h2> через my-0
Добавлен leading-6 (line-height: 24px) для консистентности между тегами
Унифицирован размер шрифта: text-base (16px) во всех трёх хидерах
Унифицирован padding: px-4 py-3 (24px) для всех трёх контейнеров
Восстановлен border-b border-neutral-200 dark:border-neutral-700 у DeepAnalysisControls
Упрощена структура вкладок: убран лишний <div> внутри <button>, flex перенесён на кнопку
Убрано подчёркивание у активной вкладки — только цветовое выделение
Сброшены дефолтные стили браузера для <button> (border/padding/background)
Кнопки с иконками 16px: p-1.5 → p-1 (высота 24px = высоте h2)
Добавлены accessibility атрибуты: role="button", tabindex="0", onkeydown
Backend: KeyError: 'mean' в compare_snapshots при малых выборках
Backend: ValueError: Out of range float values are not JSON compliant: nan
Backend: SmallSampleWarning от scipy.stats.ttest_ind — добавлена проверка размера
Backend: деление на ноль при variance = 0 (константные данные) — защита в Cohen's d
Backend: np.corrcoef возвращал NaN для константных паттернов — try/except + валидация
Backend: некорректная парсинг дат формата YYYY-MM-DD без времени
Backend: 500 ошибка при пустых данных — возврат 400 с понятным сообщением
Frontend: кнопки zoom (+/-/reset) не работали на маленьком графике "Типичный паттерн"
Добавлен $effect для заполнения patternChartInstance после рендеринга
Аналогично time series графику: ChartJS.getChart(canvas) с задержкой 200ms
Frontend: NaN% в отображении pattern_correlation — корректный путь comparison.pattern_correlation
Frontend: миллионы процентов в статистике — formatDelta() с каппированием >+999% / <-999%
Frontend: кнопка "Использовать в анализе" закрывала всю DDA-панель — теперь только модалку
Frontend: раскрывающийся блок "Показать абсолютные значения" для статистики A и B
Changed
Frontend: вкладки в DeepAnalysisResults — современный стиль "пилюли" → минималистичный (только цвет)
Frontend: forceTab пропс в DeepAnalysisResults для программного переключения вкладок
Frontend: handleABResult в Home.svelte добавляет ab_comparison в ddaAnalysisResult
Backend: endpoint /ab теперь возвращает структурированный 400 вместо 500 при валидационных ошибках
Technical
Helper функции _safe_float() и _safe_pct_change() в ab.py — защита от краевых случаев
Константа MIN_SAMPLE_SIZE = 10 — минимальный размер выборки для статистики
is_valid(x) — фильтрация NaN/Inf/None из данных перед анализом
sanitize_dict() — рекурсивная санитизация всех float значений в статистике
try/except вокруг compute_basic_stats, stats.ttest_ind, np.corrcoef
Проверка variance > 0 перед запуском t-test (константные данные)
Полная типизация: все функции возвращают предсказуемую структуру даже при ошибках
v3.2.8 (2026-06-30)
- [x] Multi-tag seasonal визуализация
- [x] Chart.js с zoom/pan/tooltips для паттернов
- [x] Интеллектуальный formatPeriod()
- [x] Унифицированный стиль графиков
- [x] Filler plugin для Chart.js
- [x] Исправления всех UI багов
v3.2.7 (2026-06-29)
- [x] Первая версия с seasonal анализом
- [x] Базовая визуализация в single-tag
v3.2.5 (2026-06-26)
- [x] Исправлена проблема с отображением точек аномалий в multi-tag анализе
- [x] Добавлены реальные timestamps вместо индексов
- [x] Исправлены кнопки zoom/download в ChartModal
v3.2.4 (2026-06-25)
- [x] Добавлен конфигуратор настроек DDA
- [x] 4 вкладки: Детекция, Окно анализа, Downsampling, Корреляции
v3.2.3 (2026-06-24)
- [x] Добавлена визуализация аномалий на графиках
- [x] Цветовая кодировка по типам (spike/dip/drift/noise)
v3.2.2 (2026-06-23)
- [x] Добавлен multi-tag корреляционный анализ
- [x] Тепловая карта корреляций
- [x] Scatter plot с линией регрессии
v3.2.1 (2026-06-22)
- [x] Базовая детекция аномалий (Isolation Forest)
- [x] Визуализация временных рядов
[3.2.0] - 2026-06-17
Added
- Модуль analytics — полноценный движок аналитики SCADA-системы
- Collectors: сбор исторических данных (hourly/daily/raw) с адаптивным downsampling
- Analyzers: тренды (линейная регрессия), корреляции (Pearson), ранжирование проблем
- LLM layer: YandexGPT инсайты + детерминированный fallback
- Endpoint GET /analytics/report с параметрами period/params/aggregation
- Визуализация аналитики (Chart.js + svelte-chartjs):
- Интерактивные графики с 4 линиями (данные, тренд, MA-7, прогноз)
- Фиксированные пределы оси Y по физическим границам параметров
- Zoom/pan через chartjs-plugin-zoom (колёсико мыши, drag, pinch)
- Экспорт графиков в PNG через chart.toBase64Image()
- Кнопки управления: Zoom In/Out/Reset/Download
UI аналитики: - AnalyticsPanel виджет с 4 вкладками (Тренды, Проблемы, Рекомендации, Прогноз) - Периоды прогноза: 7/30/90/365 дней - Раскрывающиеся карточки проблем (компоненты impact, нормы параметра) - Раскрывающиеся карточки рекомендаций (детали расчёта) - Русификация всех текстов (severity, effort, reason)
Интеграция с чатом: - Ключевые слова: "аналитик", "тренд", "прогноз", "рекомендац", "корреляц" - Команда "покажи аналитику" в правой инфопанели - Автооткрытие AnalyticsPanel через visual.widgets
Fixed
- state_snapshot_uncloneable warning — убраны callbacks из Chart.js options
- Математика тренда — правильная формула на основе дней (не количества точек)
- Корректное масштабирование оси Y через suggestedMin/suggestedMax
- Цветовые конфликты — MA-7 теперь нейтральный серый (#9ca3af)
Technical
- Установлены: chart.js, svelte-chartjs, chartjs-plugin-zoom
- Backend возвращает raw_data для графиков (до 500 точек с downsampling)
- Frontend: ChartJS.getChart(canvas) для доступа к Chart instance
- Модуль analytics добавлен в /system/info capabilities
[3.1.0] - 2026-06-09
Added
- Модуль
energy_electricity— расчёт стоимости электроэнергии по тегам ЛЭРС - Модуль
energy_water— учёт потребления воды (подготовка инфраструктуры) - Модуль
energy_heat— учёт потребления тепла (подготовка инфраструктуры) - Виджет
energy_cost_card— суммарная стоимость ресурсов (текущий и прошлый месяц) - Конфигуратор: вкладка "Энергоучёт" — CRUD тарифов и тегов счётчиков
- Интервальные тарифы (
data/tariffs.json) с валидацией дат - Конфиг счётчиков (
data/energy_config.json) - Детализация расчёта под статусами HealthScoreCard и LifeSupportCard (серым моноширинным текстом)
- Кнопки (i) с формулами расчёта во всех health-виджетах
- Сворачиваемые блоки в health report (Параметры жизнедеятельности, Аварии, Проблемы)
- Монохромные иконки в сайдбаре (Package/Wrench/Zap/Droplet/Flame)
Changed
- Формула health_score: 40% Аварии + 35% Среда + 25% Оборудование (было 35+30+25+10 с Энергией)
- Удалён
energy_panelвиджет (заменён наenergy_cost_card) - Удалён
stats_cardsвиджет (избыточный) - Сайдбар: раскрывающиеся списки "Модули" и "Инструменты" с шевронами (по умолчанию раскрыты)
- Виджет энергозатрат: прошлый месяц как основной (полные данные), текущий — как дополнение
Fixed
- Async-цепочка в
render_all(добавленawaitпередrender_visual) - Пустой
sub_scoresот LLM — теперь вычисляется детерминированно из реальных данных - Корректное отображение "Прошлый месяц" в виджете энергозатрат (114 005 ₽)
- "Виджет не найден" — добавлен
energy_cost_cardв WidgetRouter - Layout виджетов: 3 в ряд (было 2×2 с пустым углом)
[3.0.2] - 2026-06-08
Added
- Backend: Встроенная документация системы (docs/)
- README.md, MODULES.md, API.md, CHAT_EXAMPLES.md, ARCHITECTURE.md, CHANGELOG.md
- REST API для доступа к документации (GET /docs/list, GET /docs/{filename})
- Frontend: DocsViewer компонент в конфигураторе
- Sidebar со списком файлов + markdown рендеринг через marked
- Вкладка "Документация" в Config.svelte
Changed
- Версия приложения: 3.0.1 → 3.0.2
Все значимые изменения в проекте документируются в этом файле. Формат основан на [Keep a Changelog
[3.3.1.1] - 2026-08-21
✨ Добавлено
- Вкладка "Лицензия" в Конфигураторе:
- Полноценный UI для просмотра статуса лицензии (клиент, тип, срок, сессии, доступные модули).
- Drag & Drop зона и кнопка для загрузки нового файла
.lic. - Валидация формата и размера файла на стороне клиента.
- Автоматическое обновление статуса после успешной загрузки.
🔧 Технические улучшения
- Добавлена функция
uploadLicenseвfrontend/src/stores/license.ts. - Создан компонент
LicensePanel.svelteи интегрирован вConfig.svelteкак отдельная вкладка. - Улучшена обработка ошибок при загрузке лицензии через UI.
[3.3.1] - 2026-08-21
Исправлено
- Критический баг: утечка сессий при перезагрузке страницы (F5). Теперь
session_idсохраняется вsessionStorage, что позволяет переиспользовать существующую сессию вместо создания новой. - Улучшена стабильность работы счётчика concurrent users в информационном блоке лицензии.
🔧 Технические улучшения
- Добавлена логика
sessionStorageвfrontend/src/stores/license.tsдля управления жизненным циклом сессии на стороне клиента. - Оптимизированы вызовы
startSessionиendSessionвHome.svelteиConfig.svelte(добавленonDestroy). - Уменьшен риск "зависания" неактивных сессий на backend благодаря корректной очистке при закрытии вкладки.
](https://keepachangelog.com/).
[3.0.1.2] - 2026-06-08
Added
- Backend:
tools_namesв ответе/system/info— список зарегистрированных инструментов - Frontend: Правая панель "Инструменты" с чипсами имён (как у модулей)
Changed
- Frontend: "Tools" → "Инструменты" (локализация)
Fixed
- Frontend: HealthScoreCard — таблица штрафов переведена на русский
- Авария High → Авария высокого приоритета
- CRITICAL параметр → Критичный параметр
- WARNING параметр → Параметр с отклонением
[3.0.1.1] - 2026-06-08
Added
- Backend: Модуль
localization.pyс маппингами STATUS_RU, SEVERITY_RU, PRIORITY_RU - Backend:
status_ruполе в виджетах health_score и life_support_card - Backend:
by_priority_ruв alarms_panel (Высокий/Средний/Низкий) - Frontend: Локализация статусов во всех компонентах health
- Frontend: Кнопка (i) в LifeSupportCard теперь работает (исправлен порядок переменных)
Changed
- Backend: Детерминированный пересчёт статуса здоровья (не от LLM)
- LLM возвращает только score/summary/issues
- Статус определяется формулой: <30=CRITICAL, <60=WARNING, <85=GOOD, >=85=EXCELLENT
- Frontend: EnvironmentalPanel — статусы OK→Норма, WARNING→Внимание, CRITICAL→Критично
- Frontend: AlarmsPanel — приоритеты HIGH→Высокий, MEDIUM→Средний, LOW→Низкий
Fixed
- Frontend: LifeSupportCard — удалён блок "Проблемы" (ломал визуал)
- Frontend: LifeSupportCard — paramStatusColor теперь понимает русские статусы
[3.0.1] - 2026-06-03
Added
- Backend: Файловое логирование (один файл на сессию)
- Backend: Tool calling через YandexGPT 5.1 (формат
toolCallList) - Backend: UI настройки модулей (интервал polling логов)
- Frontend: SystemLogsPanel — просмотр логов в реальном времени
- Frontend: WidgetRouter — динамический боутинг виджетов
Changed
- Backend: Переход на YandexGPT 5.1 (была 4.0)
- Frontend: Миграция на Svelte 5 + runes (была 4.x)
Fixed
- Backend: Стабилизация индекса здоровья (few-shot examples в prompt)
- Frontend: Responsive layout для mobile устройств
[3.0.0] - 2026-05-29
Added
- Первая публичная версия SCADA.AI v3
- Backend: FastAPI + asyncpg + YandexGPT
- Backend: Модуль health (анализ здоровья системы)
- Backend: Модуль hello (базовые ответы)
- Backend: Модуль logs (анализ системных логов)
- Frontend: Svelte 4 + Tailwind CSS
- Frontend: Operator dashboard (Home.svelte)
- Frontend: Configurator (Config.svelte)
- Frontend: NarrativePanel (текстовые ответы)
- Frontend: HealthScoreCard, LifeSupportCard виджеты
- Frontend: EnvironmentalPanel, AlarmsPanel, EnergyPanel виджеты
- Frontend: Голосовое озвучивание (speechSynthesis)
- Database: PostgreSQL интеграция (tags_value, alarm_events_history)
[2.x.x] - 2025-2026 (Legacy)
Внутренние версии для тестирования. Не публичные.
[1.x.x] - 2025 (Prototype)
Первоначальный прототип на Python + Flask. Переписан в v3.0.0.
Roadmap
v3.1.0 (Реализовано 2026-06-09)
- [x] Модуль
energy_electricity— расчёт стоимости электроэнергии - [x] Модуль
energy_water— инфраструктура для учёта воды - [x] Модуль
energy_heat— инфраструктура для учёта тепла - [x] Интервальные тарифы (tariffs.json) с CRUD в конфигураторе
- [x] Конфигуратор тегов счётчиков (energy_config.json)
- [x] Виджет
energy_cost_card— суммарная стоимость ресурсов
v3.2.0 (Планируется)
- [ ] Модуль
historical_data— тренды и сравнение периодов - [ ] Модуль
predictive_analytics— прогнозы экономии - [ ] Boss dashboard — отдельный экран для руководства
v4.0.0 (Долгосрочно)
- [ ] Ролевая модель (admin, engineer, operator, boss)
- [ ] Зашифрованное хранилище пользователей (users.enc)
- [ ] Multi-tenancy (несколько зданий в одной системе)
- [ ] Mobile app (React Native)