Release Notes — 26 апреля 2026
19 дней назад мы выпустили большой релиз с диагностическим модулем и анализом просодии. С тех пор команда внесла ещё 295 изменений — и они немаленькие. В этом релизе вы можете записать разовую (ad-hoc) сессию ещё до прихода пациента, ваши заметки сливаются с работой AI и транскрипцией бок о бок в трёх колонках, публичный профиль терапевта возвращается в полную силу, а в мобильном приложении появилась тёмная тема. Под капотом мы прошли этап усиления безопасности по SOC 2 / HIPAA, DDD-аудит и полную псевдонимизацию данных пациентов на стороне AI.
💚 Спасибо команде, которая довела этот релиз до конца — отчётами, тестами, кодом и терпением:
- Bohdan — разовые (ad-hoc) сессии, лимиты пакетов и льготный период, DDD-аудит, инвойсы KSeF, десятки исправлений (SCRUM-756, 815, 1267, 1268, 1276, 1280-1290, 1293, 1309-1316, 1353-1357, 1366, 1388, 1391, 1392)
- Bartek — трёхстороннее слияние, 9 отдельных CBT-анализов, когнитивные искажения, счётчик сессий пакета (SCRUM-1266, 1320, 1338, 1368-1375, 1385, 1386)
- Ewa Cylwik / Ewa — Beck PDF, вторая сессия AITS для одного и того же пациента, тёмная тема и пустое состояние на мобильном, многоязычная рассылка, цвета интерфейса, уникальность email пациента (SCRUM-883, 898, 902, 1089, 1094, 1297, 1304, 1307, 1319)
- Joanna — повторяющийся календарь, скрытие Zoom, своевременная отмена, самонаблюдение вместо оценки качества сессии (SCRUM-789, 874, 918, 919, 1005)
- А также Bartlomiej за когнитивные искажения и счётчик сессий, который стал основой новой модели подписки
1. ⚡ Разовые (ad-hoc) сессии — запись ещё до прихода пациента
Если вам когда-либо приходилось быстро включать диктофон — потому что пациент пришёл без предупреждения, потому что это разовая консультация, потому что это встреча с человеком, которого ещё нет в ваших записях — новый модуль ad-hoc сессий полностью снимает эту боль.
- Кнопка быстрой записи (Quick Record Button) в веб-панели, в PWA на телефоне и в приложении MAUI — один клик запускает запись ещё до того, как вы заполните данные пациента
- AdHoc Inbox — отдельный лоток для неназначенных записей, пока вы не решите, куда их отнести
- AssignPatientModal — назначьте запись существующему пациенту или создайте нового прямо из этого лотка
- Resume / Re-enter room — завершите запись сессии, начатой ранее
- Хранение “сирот” + автозавершение — сессии, не назначенные в течение X дней, автоматически закрываются, чтобы лоток оставался опрятным
- Видео “Начать без пациента” — в комнате LiveKit можно начать сессию, не конфликтуя с существующим пациентом; AdHoc-запись затем попадает в лоток
Раздел скрыт за кодом PromptyAI в настройках — по умолчанию выключен, для пользователей, которые сначала хотят увидеть остальное. Спроектировано и реализовано Bohdan.
2. 📊 Лимиты пакетов и льготный период — прозрачная подписка
Подписки прошли полный пересмотр. Старые планы Starter/Standard деактивированы, их заменили Start / Practice / Pro — рассчитанные под реальный объём сессий в месяц.
- Счётчик сессий на дашборде — видно, сколько сессий вы использовали в этом месяце и сколько осталось в пакете
- Письма о лимите — автоматические уведомления при 80% и 100% использования
- Предложение об апгрейде — при достижении лимита вы получаете мягкое предложение сменить план вместо жёсткой блокировки
- Цены из Stripe + скидки — цена, которую вы видите в приложении, приходит напрямую из Stripe с применёнными активными скидками (код бета-тестера не истекает)
- Отмена подписки в приложении — отмена прямо в приложении, без письма в поддержку
- 14-дневный льготный период — если платёж не прошёл, вы получаете 14 дней доступа только к собственному аккаунту (без просмотра данных пациентов), с письмами на T+0 и T+13. Реальная потеря данных наступает только через две недели
- Баннер подписки — понятное сообщение вверху приложения, без пустой полосы между меню и алертом
- Симулятор лимита сессий — в панели PromptyAI есть тестовый режим, где видно, как приложение ведёт себя при полностью использованном пакете
Совместная работа Bartlomiej (счётчик и лимиты, SCRUM-1266) и Bohdan (подписка, льготный период, предложение об апгрейде — SCRUM-756, SCRUM-1366, SCRUM-1391, SCRUM-1392).
3. 📝 Трёхстороннее слияние заметок — терапевт, AI и транскрипция в одном виде
Это одно из крупнейших архитектурных изменений под капотом, но эффект на повседневную работу очень заметен: каждое поле заметок (Notes, SessionSummary, разделы концептуализации) теперь отдельно запоминает, что написал терапевт, что сгенерировал AI и что пришло с диктофона / транскрипции.
- Notes 3-way — вид заметок показывает три источника бок о бок: ваш текст, предложения AI и автоматическую транскрипцию, а вы выбираете, что оставить
- SessionSummary 2-way + слияние JSON — в сводке сессии вы объединяете свою работу с анализом AI в единый связный документ
- Разделитель по времени (timestamp) — когда вы вручную редактируете поле AI, система оставляет видимый след того, когда и чей это фрагмент
- Метка [AI] с первой генерации — ваши поля не смешиваются со сгенерированными
- SourceBadge — цветная плашка с иконкой, показывающая источник фрагмента, вместо текста ЗАГЛАВНЫМИ буквами
- Замена раздела AI вместо добавления — когда вы запрашиваете повторную генерацию сводки, AI заменяет раздел вместо того, чтобы складывать под ним ещё одну копию
Спроектировано и реализовано Bartek (SCRUM-1320, SCRUM-1368-1375). Под капотом: полная локализация на 8 языков и новые DDD-контексты.
4. 🔍 CBT-анализы — 9 отдельных отчётов по запросу
Старая монолитная функция “сгенерировать CBT-анализ” была разделена на 9 отдельных пунктов, которые терапевт запускает тогда, когда они действительно нужны. Меньше ожидания, больше контроля.
- 9 независимых анализов — каждый генерируется отдельно, по запросу
- Шестерёнка редактирования промпта — нажмите на шестерёнку рядом с каждым анализом, чтобы увидеть/изменить промпт, который использует AI
- Раздел CBT-АНАЛИЗЫ за кодом PromptyAI — раздел доступен после ввода кода в настройках, для пользователей, тестирующих новые функции
Когнитивные искажения получили собственный вид (сообщено Bartlomiej, SCRUM-1385):
- Представление данных вместо отчёта AI — вы видите конкретные цитаты из транскрипции, помеченные AI, а не сгенерированное на их основе повествование
- Все цитаты после раскрытия — без фильтра по диапазону дат, раскрытие показывает всё
- Доступно в главном меню — в разделе Concептуализация v2
Старый промпт COGNITIVE_DISTORTIONS_INVENTORY был удалён (SCRUM-1386).
5. 🌐 Публичный профиль терапевта — полное обновление с панелями редактирования
Публичный профиль под брендом aitherapy.support был полностью пересобран.
- 3 новые панели редактирования — биография, специализации, контактные данные редактируются в элегантных боковых панелях
- Режим редактирования владельцем — при просмотре собственного профиля в авторизованном состоянии кнопки редактирования всегда под рукой
- Годы опыта — новое поле
YearsOfExperience, видимое в публичном профиле - Ребрендинг цвета — палитра шалфей/лаванда под брендом aitherapy.support
- Раздел “Ваша конфиденциальность” убран — он дублировал информацию; GDPR указан в футере
- Иконки Lucide — современная, чистая типографика иконок
Под капотом добавлен публичный эндпоинт GET /api/public/therapists — возвращающий терапевтов с активными публичными профилями. Основа для будущего каталога терапевтов.
6. 🎥 Видеосессии — PiP, смена камер, исправленное размытие фона
Видео получило набор исправлений, которые заметит любой терапевт, проводящий сессии через приложение.
- PiP / сворачивание — сверните комнату видео в плавающий мини-плеер и проверьте заметки в другой вкладке без разрыва соединения. Микрофон и камера продолжают работать
- Смена камер — переключите, кто отображается в главном окне, а кто в мини-окне, одним кликом
- Возобновление из PiP — при возврате из свёрнутого состояния вы пропускаете лобби (PreJoinLobby) и сразу попадаете в разговор
- Аудио по каждому участнику для диаризации — транскрипция разделяет говорящих даже в режиме PiP
- Исправлено размытие фона — CSP блокировал MediaPipe WASM; размытие теперь работает в один клик
- Более чистый интерфейс сессии AITS — AI-ассистент исчез с панели инструментов, меньше визуального шума
- Оверлей PiP кликабелен — убраны
pointerEvents:noneиoverflow:hidden, кнопки PiP реагируют на клики - Кнопка “Присоединиться к сессии” — была скрыта переопределением CSS, теперь видна
- Устаревшее замыкание (stale closure) в handleMaximize — исправлено; разворачивание из PiP больше не выдаёт ошибку
7. 📐 Концептуализация Beck v2 и ABC — PDF, переключатель версий, редактирование промпта
- Beck и ABC v2 PDF — исправлено форматирование и автоматическое включение в материалы сессии (сообщено Ewa, SCRUM-1297)
- Beck PDF — разделы только с рамкой, цветные специализации, аккуратные инициалы, SVG-стрелка между разделами
- Переключатель ABC v1/v2 в Концептуализации v2 — выберите, какую версию ABC отображать
- Шестерёнка редактирования промпта в ABC v2 — измените промпт AI на вкладке ABC v2
- Экспорт в PDF для AI-анализов и ABC по сессии — отдельные анализы экспортируются по отдельности
- Плюрализация меток ABC на 8 языках — таблица концептуализации теперь имеет правильные формы множественного числа
- Исправлены пустые столбцы ABC — бэкенд возвращает правильные имена свойств во множественном числе
8. 🧾 Инвойсы и KSeF — выбор платежей + конечный автомат состояний
Система выставления счетов была переработана для соответствия KSeF (польской национальной системе электронного инвойсинга).
- Инвойс из выбранных платежей — выберите платежи, и система создаст из них единый счёт (снимок + внешний ключ Payment)
- Точка входа “Выставить счёт” в финансовом разделе терапевта — быстрый доступ с дашборда
- Удаление позиции в модальном окне выставления счёта — исправляйте ошибки на лету
- Разделение KSeF dev/prod — песочница и продакшн работают на отдельных учётных данных
- Конечный автомат состояний инвойса (SCRUM-1357, Bohdan) — Черновик → Выставлен → Отправлен → Отменён, с ограничением в БД на недопустимые переходы
- AE KsefToken — токен KSeF зашифрован через Always Encrypted
Совместная работа Bohdan (SCRUM-1357, SCRUM-1388).
9. 📅 Календарь, повторяющиеся сессии и локации
Недельный и повторяющийся календарь получил десятки небольших, но заметных улучшений — большинство из них сообщены Joanna и Ewa.
- Сессии с 22:00 — были невидимы в недельной сетке, теперь показываются до конца дня
- Все часы в сетке повторяющихся слотов (SCRUM-874, Joanna)
- Своевременно отменённая сессия — не отображается как “Не оплачено” (SCRUM-918, Joanna)
- Метка повторения рядом с повторяющимся слотом (SCRUM-919, Joanna) — вы видите “еженедельно”, “раз в две недели” рядом с каждой повторяющейся сессией
- Скрытие интеграции с Zoom из интерфейса (SCRUM-789, Joanna) — Zoom больше не поддерживается как видеоканал
- Всплывающее окно сессии в календаре — больше не скрывается за пределами экрана
- TherapistAvailability — автосохранение при каждом изменении (задержка 800 мс), кнопка сохранения не нужна
- AddSessionModal — опция “создать сессию вне часов доступности” — исключения могут принудительно задать слот
- Статус “Не явился” (No-show) (NoShow=5) — новый статус, который можно установить даже из завершённой или отменённой сессии
- RecurringSessionsCalendar — сводные плитки над легендой и сеткой
Локации терапевта получили каналы онлайн-встреч по каждой локации:
- Режим на месте (onsite) — поля адреса и города для очных локаций
- Переключатель onsite/online вместо чекбокса — более понятный выбор режима
- Онлайн-канал для каждой локации — разные локации могут иметь разные каналы (AITS, Google Meet, внешняя ссылка), автоматически распространяемые на сессии
- Постоянные комнаты встреч для каждого пациента — у каждого пациента есть постоянная ссылка на комнату AITS и отдельная внешняя ссылка, видимая в настройках пациента
- Удаление локации — исправлено (пропадала из БД, но оставалась в списке интерфейса)
И наконец тип встречи в повторяющихся сессиях — исправлено распространение MeetingType и MeetingLink из конфигурации повторяющейся серии на каждую сгенерированную сессию и на письма-напоминания (SCRUM-902, Ewa).
10. 📱 Мобильное приложение — тёмная тема, AdHoc Inbox, шлифовка
Мобильное приложение перешло на версию 1.5.0 (сборка 18) с большим количеством изменений, видимых пользователю, и несколькими правками по подписи для App Store / Play Store.
- Тёмная тема — полный тёмный режим с читаемыми заголовками групп (SCRUM-1089, Ewa + SCRUM-815)
- Настраиваемые напоминания — выберите, когда вы хотите получать уведомление о сессии
- Мобильное напоминание за 15 минут — напоминание за 15 минут до сессии + предупреждение, если системные уведомления отключены (SCRUM-815, Bohdan)
- Пустое состояние для списка сессий — вместо пустого экрана более насыщенный онбординг (SCRUM-1094, Ewa)
- Баннер автообновления — когда приложение обнаруживает обновление, показывается приглашающий баннер обновления
- AdHoc Inbox + AssignPatient + быстрый старт в MAUI (SCRUM-1289, Bohdan)
- Быстрый старт в PWA на телефоне для разовых (ad-hoc) сессий (SCRUM-1286, Bohdan)
- Адаптивный веб-вид для телефона — на десктопе без изменений, на телефоне макет адаптируется под узкий экран
- Обработчик deep-link в iOS — использует BindingContext, регистрацию URL-схемы
- Строки назначения NSLocation в iOS — исправление ITMS-90683 (App Store отклонял сборку без них)
- Android AAB — явный шаг jarsigner
- Материалы App Store Connect и Google Play — полный пакет плюс аудит WCAG 2.2
11. 🔐 Безопасность: SOC 2 / HIPAA, MFA, полная псевдонимизация для AI
Под продуктовым слоем мы провели полное усиление безопасности по SOC 2 и HIPAA плюс DDD-аудит с пятью конкретными результатами.
- Повторная проверка MFA для критических операций — для чувствительных действий (смена пароля, экспорт данных) требуется повторное подтверждение через MFA
- Резервные коды для MFA — коды на случай экстренной ситуации, если вы потеряли телефон
- IAnonymizedLlmGateway (SCRUM-1353, Bohdan) — все вызовы AI-моделей теперь идут через псевдонимизирующий шлюз. Имена, даты, места заменяются псевдонимами до того, как покинут приложение; AI получает только анонимизированную версию
- Псевдонимизация email/SMS-уведомлений (SCRUM-1354) — шаблоны сообщений тоже не раскрывают данные пациента при отправке
- OAuth-токены Google/Zoom зашифрованы через Always Encrypted (SCRUM-1355) — токены доступа интеграций зашифрованы на уровне столбцов
- Флаг Patient.PendingConsent (SCRUM-1356) — пациенты без активного согласия попадают в поток принудительного оформления + значок на фронтенде
- Конечный автомат состояний инвойса (SCRUM-1357) — статусы инвойса неизменяемы в недопустимых направлениях, это обеспечивается на уровне БД
- Неизменяемость аудита + снимок пользователя в 3 таблицах аудита — журнал действий нельзя изменить постфактум
- DeanonymizationAuditLog — каждое использование данных пациента после деанонимизации логируется вместе со снимком email и displayName пользователя, выполнившего это действие
- Удалены захардкоженные секреты — все ключи и пароли из appsettings.json перенесены в Azure Key Vault
- Always Encrypted для всех текстовых данных пользователя (ADR-0018) — архитектурное направление утверждено; остальные таблицы мигрируют в следующем релизе
- Анализ пробелов соответствия ISO/IEC — сопоставлены 95 пробелов по 9 стандартам с планом устранения
Подкреплено полным DDD-аудитом (сессии 1-8, фазы 1-6) — реструктуризация доменных контекстов, документация архитектуры, ADR, mermaid-диаграммы + тесты, руководства, интеграция с Confluence.
12. 👤 Портал пациента — анализы в разделе “Цели”, материалы, улучшенный предпросмотр
- Концептуализация Beck во вкладке “Цели” пациента — когда вы публикуете концептуализацию, пациент видит её в своём портале
- Публикация анализов в портал пациента + настройки уведомлений (SCRUM-1338, Bartlomiej) — контроль того, что и когда получает пациент
- Предпросмотр PDF в портале —
iframeвместоembed, CSP разрешаетblob:(PDF загружаются) - Предпросмотр портала пациента из вида терапевта — увидеть, что видит пациент (обрамление в обёртке, дашборд 1:1)
- Материалы сессии в Azure Blob Storage — SessionMaterial хранится как blob, больше нет локальной файловой системы
- Раздел согласий / документов + источник регистрации в настройках пациента
- Глобальная уникальность email пациента (SCRUM-898) — второй пациент с тем же email получает 409 и закрытие модального окна (SCRUM-898, Ewa)
- Сидер шаблонов уведомлений для SK, CA, RU, UK, LT (SCRUM-883, Joanna) — полная многоязычная рассылка
- Резолвер с откатом к платформенному значению по умолчанию — если терапевт не переопределил шаблон, отправляется многоязычный шаблон по умолчанию (SCRUM-883)
13. 🎙️ Транскрипция — надёжная запись, дозапись, реальное время с диаризацией
- Дозапись к существующей транскрипции — продолжайте запись в той же сессии; сегменты дозаписываются (намерение сохраняется при перезагрузке страницы)
- Аудио по каждому участнику для диаризации — видеотранскрипция разделяет говорящих на независимых дорожках
- Транскрипция переживает PiP — сворачивание комнаты не прерывает запись
- Язык транскрипции из настроек сессии — STT использует язык, установленный вами для пациента
- Автообновление транскрипции при фокусе / изменении видимости / возврате из видео
- Подтверждение при остановке записи < 2с — защита от пустого WAV из-за случайного клика
- Значок “Отправляется” в списке сессий — видно, когда запись загружается
- Реальное время с диаризацией в видеосессии — раньше не запускалось; теперь работает
- Резервное копирование в OPFS + Opus 48 kbps — запись также сохраняется локально в OPFS как резерв, параметры аудио унифицированы
- Прямая загрузка аудио через SAS (SCRUM-1276, Bohdan) — аудио идёт напрямую в Azure через SAS-URL, минуя бэкенд
- m4a нативно в Azure Speech — m4a обрабатывается нативно, без конвертации
- Определение формата по магическим байтам (SCRUM-1311, Bohdan) — когда Content-Type=
application/octet-stream, формат определяется по содержимому файла - Хаб без текста в БД — realtime-хаб SignalR больше не сохраняет текст в БД; finishPending использует multipart POST, как в MAUI
- Исправление SignalR 1006 — убран skipNegotiation, чтобы Azure SignalR работал + настройка keep-alive
- Метка [AI] с первой генерации + надёжный поиск метки
14. 💬 Уведомления, настройки пациента, мелкие улучшения UX
- NotificationTemplatesAdmin — переключатель HTML/Text в редакторе писем
- NotificationSettings — предпросмотр письма отображает HTML с запасным вариантом
- PromptEditModal — пересобран: вкладки, выбор модели, обязательные названия версий
- Сброс флага Hide_dev_ui при выходе — флаги разработчика не сохраняются между сессиями
- Тестовый пациент Ann Fauler — англоязычный аналог польской Anna Pełnialska для демонстраций только на английском
- Переключатель режима презентации в Dev UI — быстрый переход в режим презентации
- Отчёт об ошибке — вложения Jira + метка автора отчёта + центрированная кнопка “Отправить”
- Исправлен цикл обновления авторизации (auth-refresh loop) — прерывание запросов и возврат на страницу входа при 401
- Баннер “Сервер запускается” — при холодном старте (scale-to-zero) показывается уведомление вместо пустой страницы
- Шкала оценки сессии — самонаблюдение вместо оценки качества + дисклеймер (SCRUM-1005, Joanna)
- Цвет кнопки “Свернуть” изменён на кобальтово-фиолетовый (SCRUM-1307, Ewa)
- Цвет метки “Транскрипция” изменён с красного на зелёный (SCRUM-1304, Ewa)
- “Записать сейчас” → “Записать разовую (AdHoc) сессию” — более точное название кнопки
- Песочница с зелёной лентой в левом верхнем углу + префикс
[SANDBOX]в заголовке — во избежание путаницы окружений, плюс повторяемое клонирование PROD → Sandbox (Azure IaC + скрипты)
✅ Чек-лист QA — что проверить после деплоя
| Функция | Проверка |
|---|---|
| Разовая (ad-hoc) сессия — Quick Record | Нажмите Quick Record на дашборде или в PWA — запись начинается сразу, сессия попадает в AdHoc Inbox |
| AssignPatient в AdHoc Inbox | Откройте разовую запись — можно назначить существующему пациенту или создать нового |
| Лимит пакета | Дашборд показывает счётчик сессий за текущий месяц и сколько осталось в пакете |
| Льготный период после неудачного платежа | Симулятор подписки в PromptyAI — вызовите неудачный платёж, вы получаете доступ только к аккаунту на 14 дней |
| Трёхстороннее слияние заметок | В деталях сессии поле Notes показывает три источника бок о бок (терапевт / AI / транскрипция); можно выбрать, что оставить |
| 9 CBT-анализов | Вкладка CBT-анализов показывает 9 отдельных пунктов; каждый генерируется по запросу; у каждого есть шестерёнка редактирования промпта |
| Публичный профиль — панели | Откройте свой публичный профиль в авторизованном состоянии — видны панели редактирования биографии, специализации, контактов |
| Видео PiP | Во время видеосессии нажмите свернуть — окно сворачивается в мини-плеер, микрофон продолжает работать, вы возвращаетесь без лобби |
| Размытие фона | В лобби видео включите размытие фона — работает сразу, без ошибок CSP |
| PDF концептуализации Beck | Сгенерируйте PDF концептуализации — он также появляется в материалах сессии |
| Переключатель ABC v1/v2 | В концептуализации v2 можно переключить источник ABC между версией 1 и 2 |
| Инвойс из выбранных платежей | Выберите несколько платежей и нажмите “Выставить счёт” — из снимка создаётся единый счёт |
| Повторяющаяся сессия с Google Meet | Вторая и третья сессии серии правильно настроены на Google Meet, а письмо содержит правильную ссылку |
| Сессии с 22:00 | Недельный календарь показывает сессии, запланированные на 22:00 и позже |
| Статус “Не явился” | В завершённой / отменённой сессии можно изменить статус на “Не явился” |
| Тёмная тема на мобильном | В мобильном приложении переключитесь на тёмную тему — заголовки групп читаемы |
| AdHoc Inbox на мобильном | Мобильное приложение показывает лоток разовых сессий и позволяет назначить пациента |
| Повторная проверка MFA | При смене пароля приложение снова запрашивает MFA |
| Псевдонимизация для AI | В логах видно, что данные пациента передаются в AI в виде псевдонимов |
| Материалы сессии как blob | Загрузите файл в материалы сессии — он попадает в Azure Blob Storage, а не на локальный диск |
| Глобальная уникальность email пациента | Добавьте второго пациента с тем же email — вы получите 409, и модальное окно закроется |
| Баннер “Сервер запускается” | После длительного простоя вход в приложение показывает баннер вместо пустой страницы |
🛠️ Что мы исправили — мелкий шрифт
Помимо крупных функций, было устранено ~80 отчётов от тестировщиков и пользователей. Основные моменты:
- Оверлей PiP не был кликабельным — исправлено
- Устаревшее замыкание в handleMaximize — разворачивание из PiP больше не выдаёт ошибку
- PiP сохраняет соединение — раньше
room.disconnect()срабатывал при переходе между полноэкранным режимом и PiP - Кнопка “Присоединиться к сессии” была скрыта переопределением CSS — раскрыта
- Вторая сессия AITS для одного пациента (SCRUM-1319, Ewa) — убран UNIQUE INDEX на
Session.VideoInviteToken - Нумерация сессий в концептуализации пропускает отменённые (SCRUM-1267, Bohdan)
- Null-safe доступ к Payment в GetSessionDetailsAsync (SCRUM-1268, Bohdan)
- Коллизия тестовой сессии Anna Pełnialska с Jan в 14:00 — исправлено в сидере
- Замедление дашборда — null-safe маппинг в GetTodaySessionsAsync и GetSessionDetailsAsync
- Автообновление после завершения записи с микрофона — работает
- Резервный batch-режим не перезаписывает текст из предыдущих записей и не блокирует интерфейс статусом Processing
- Язык транскрипции из настроек сессии — STT учитывает предпочтение пациента
- CSP — разрешены
*.clarity.ms,blob:в connect-src, аналитика в script-src - Цикл обновления авторизации — прерывание запросов после 401 и возврат на страницу входа
- CSP MediaPipe WASM — размытие фона работает
- Лента DEV/SANDBOX также на Azure FQDN, не только на кастомном домене
- Ложный тост “Ошибка транскрипции” при входе в сессию — удалён
- Тост вместо красного баннера при неудачной транскрипции + убрана кнопка “Resample”
- Реальное время с диаризацией в видеосессии — запускается корректно
- AI-стриминг — отдельный AbortController на каждый обработчик вместо общего (
BodyStreamBuffer was aborted) - Nginx non-root + Azure Container Apps — несколько итераций, чтобы это заработало
- Распределённая блокировка (sp_getapplock) — миграции при запуске больше не конфликтуют при параллельных деплоях
- DbUpdateConcurrencyException в пуллере batch-транскрипции (SCRUM-1313, Bohdan)
- BlobNotFound как ожидаемое состояние (SCRUM-1314, Bohdan)
- Не-JSON payload в вебхуке Stripe (сканеры / боты) — обрабатываются без ошибок (SCRUM-1315, Bohdan)
- Определение формата аудио по магическим байтам (SCRUM-1311, Bohdan)
- Устойчивая загрузка аудио + защитный Content-Type (SCRUM-1293, Bohdan)
- Миграция внешнего ключа ActiveEmbeddingModelId → ON DELETE NO ACTION
- Деплой dev-клиента — CACHE_BUST=
github.shaпринудительно пересобирает фронтенд
Это самый большой и насыщенный релиз этой весны. Если какая-то функция кажется знакомой — это потому, что это был ваш запрос или ваш тикет. Спасибо за каждый отчёт и каждый скриншот.
Статья подготовлена командой Therapy Support