Перейти к содержанию

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 — CORS allow_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 добавлен в whitelist docs.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 — корректная работа с ky v2 и 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)