Release Notes — 26 kwietnia 2026
19 dni temu wydaliśmy duży release z modułem diagnostycznym i analizą prozodii. Od tamtej pory zespół wypchnął kolejne 295 zmian — i to nie są drobiazgi. W tym wydaniu sesje ad-hoc nagrasz zanim pacjent w ogóle przyjdzie, twoje notatki łączą się z pracą AI i transkrypcją w trzech kolumnach, profil publiczny terapeuty wraca w pełnej formie, a aplikacja mobilna dostała dark theme. Pod maską przeszliśmy hardening pod SOC 2 / HIPAA, audit DDD i pełną pseudonimizację danych pacjentów po stronie modeli AI.
💚 Podziękowania dla zespołu, który napędził ten release — zgłoszeniami, testami, kodem i cierpliwością:
- Bohdan — sesje ad-hoc, limity pakietu i karencja, audit DDD, faktury KSeF, dziesiątki bugfixów (SCRUM-756, 815, 1267, 1268, 1276, 1280-1290, 1293, 1309-1316, 1353-1357, 1366, 1388, 1391, 1392)
- Bartek — 3-way merge, 9 osobnych analiz CBT, zniekształcenia poznawcze, limit sesji w pakiecie (SCRUM-1266, 1320, 1338, 1368-1375, 1385, 1386)
- Ewa Cylwik / Ewa — PDF konceptualizacji, druga sesja AITS dla tego samego pacjenta, dark theme i pusty stan w mobile, mailing wielojęzyczny, kolory w UI, unikalność emaila pacjenta (SCRUM-883, 898, 902, 1089, 1094, 1297, 1304, 1307, 1319)
- Joanna — kalendarz cykliczny, ukrycie Zoom, sesja odwołana na czas, autorefleksja zamiast oceny jakości (SCRUM-789, 874, 918, 919, 1005)
- Plus Bartłomiej za zniekształcenia poznawcze i licznik sesji, który stał się fundamentem nowego modelu subskrypcji
1. ⚡ Sesje ad-hoc — nagraj zanim przyjdzie pacjent
Jeśli kiedyś musiałeś szybko włączyć dyktafon — bo pacjent przyszedł nieumówiony, bo to konsultacja jednorazowa, bo to spotkanie z pacjentem, którego nie ma jeszcze w kartotece — nowy moduł sesji ad-hoc rozwiązuje cały ten ból.
- Quick Record Button w pulpicie web, w PWA na telefonie i w aplikacji MAUI — jedno kliknięcie startuje nagrywanie zanim w ogóle uzupełnisz dane pacjenta
- AdHoc Inbox — osobna skrzynka, w której lądują nagrania nieprzypisane do nikogo, dopóki nie zdecydujesz czemu
- AssignPatientModal — przypisz nagranie do istniejącego pacjenta lub utwórz nowego z poziomu skrzynki
- Wznów / Wejdź ponownie do pokoju — możesz dokończyć nagrywanie sesji, którą zaczęłaś wcześniej
- Retencja orphan + auto-complete — sesje nieprzypisane przez X dni automatycznie się zamykają, żeby skrzynka nie puchła
- Wideo “Start bez pacjenta” — w pokoju LiveKit możesz rozpocząć sesję bez kolizji z istniejącym pacjentem, AdHoc trafia do inboxa po zakończeniu
Sekcja jest schowana za kodem PromptyAI w Settings — domyślnie wyłączona, dla osób, które chcą najpierw zobaczyć resztę. Cały moduł zaprojektował i dowiózł Bohdan.
2. 📊 Limity pakietu i karencja — przejrzysta subskrypcja
Subskrypcje przeszły pełną przebudowę. Stare plany Starter/Standard zostały dezaktywowane, a w ich miejsce weszły Start / Praktyka / Pro — dopasowane do faktycznej liczby sesji w miesiącu.
- Licznik sesji w pulpicie — widzisz, ile sesji wykorzystałaś w bieżącym miesiącu i ile jeszcze masz w pakiecie
- Maile o limicie — automatyczne powiadomienia przy 80% i 100% wykorzystania
- Upgrade prompt — jeśli osiągniesz limit, dostaniesz delikatne podpowiedź zmiany planu zamiast twardej blokady
- Cena ze Stripe + rabaty — cena, którą widzisz w aplikacji, idzie wprost ze Stripe wraz z aktywnymi rabatami (kod betatestera nie wygasa)
- Natywny anuluj subskrypcji — możesz anulować subskrypcję bezpośrednio w aplikacji, bez kontaktu z supportem
- 14-dniowy okres karencji — jeśli płatność się nie uda, dostajesz 14 dni z dostępem tylko do swojego konta (bez podglądu pacjentów), z mailami T+0 i T+13. Pełna utrata danych grozi dopiero po dwóch tygodniach
- Banner subskrypcji — czysty komunikat na górze aplikacji bez pustego paska między menu a alertem
- Symulator limitu sesji — w panelu PromptyAI jest tryb testowy, w którym możesz zobaczyć, jak zachowuje się aplikacja przy pełnym pakiecie
To wspólna praca Bartłomieja (licznik i limity, SCRUM-1266) i Bohdana (subskrypcja, karencja, upgrade prompt, SCRUM-756, SCRUM-1366, SCRUM-1391, SCRUM-1392).
3. 📝 3-way merge notatek — terapeuta, AI i transkrypcja w jednym widoku
To jedna z największych zmian architektonicznych pod maską, ale efekt jest bardzo widoczny w pracy: każde pole notatek (Notes, SessionSummary, sekcje konceptualizacji) pamięta osobno, co wpisał terapeuta, co wygenerowało AI i co przyszło z dyktafonu / transkrypcji.
- Notes 3-way — w widoku notatek widzisz trzy źródła obok siebie: twój zapis, sugestie AI i automatyczną transkrypcję, możesz wybrać, co bierzesz a co odrzucasz
- SessionSummary 2-way + JSON merge — w podsumowaniu sesji łączysz pracę swoją z analizą AI w jeden spójny dokument
- Separator z timestampem — gdy edytujesz pole AI ręcznie, system zostawia widoczny ślad, kiedy i czyj to fragment
- Marker [AI] od pierwszej generacji — twoje pola się nie mieszają z generowanymi
- SourceBadge — kolorowa pigułka z ikonką pokazująca, skąd pochodzi dany fragment, zamiast UPPERCASE tekstów
- Wymiana sekcji AI zamiast dopisywania — gdy poprosisz o ponowne wygenerowanie podsumowania, AI podmienia sekcję, nie dokleja kolejnej kopii pod spodem
Zaprojektował i dowiózł Bartek (SCRUM-1320, SCRUM-1368-1375). Pod tym jest też pełna i18n na 8 języków i nowe konteksty DDD.
4. 🔍 Analizy CBT — 9 osobnych raportów na żądanie
Stary monolit “wygeneruj analizę CBT” rozbiliśmy na 9 osobnych itemów, które terapeuta uruchamia, kiedy faktycznie ich potrzebuje. Mniej czekania, więcej kontroli.
- 9 niezależnych analiz — każda generowana osobno, na żądanie
- Zębatka edycji promptu — przy każdej analizie kliknij ikonkę i podejrzyj/zmodyfikuj prompt, którego użyje AI
- Sekcja ANALIZY CBT za kodem PromptyAI — sekcja dostępna po wpisaniu kodu w Settings, dla osób testujących nowości
Zniekształcenia poznawcze dostały osobny widok (na zgłoszenie Bartłomieja, SCRUM-1385):
- Widok danych zamiast AI raportu — patrzysz na konkretne cytaty z transkrypcji oznaczone przez AI, nie na narrację wygenerowaną z nich
- Wszystkie cytaty po expand — bez filtra zakresu dat, expanda widzisz wszystko
- Dostępne z menu głównego — pod Konceptualizacją v2
Stary prompt COGNITIVE_DISTORTIONS_INVENTORY został usunięty (SCRUM-1386).
5. 🌐 Profil publiczny terapeuty — pełny revamp z drawerami edycji
Profil publiczny pod brand aitherapy.support przeszedł pełną przebudowę.
- 3 nowe drawery edycji — bio, specjalizacje, dane kontaktowe edytujesz w eleganckich panelach bocznych
- Tryb edycji właściciela — gdy oglądasz swój profil będąc zalogowanym, widzisz przyciski edycji od razu pod ręką
- Lata doświadczenia — nowe pole
YearsOfExperiencewidoczne na profilu publicznym - Rebrand kolorystyczny — paleta sage/lavender pod brand aitherapy.support
- Sekcja “Twoja prywatność” usunięta — była zbędna, RODO mamy w stopce
- Ikony lucide — nowoczesna, czysta typografia ikon
Pod spodem powstał też publiczny endpoint GET /api/public/therapists zwracający listę terapeutów z aktywnym profilem — fundament pod katalog terapeutów.
6. 🎥 Sesje wideo — PiP, swap kamer i naprawiony blur tła
Wideo dostało zestaw poprawek, które zauważy każda terapeutka prowadząca sesje przez aplikację.
- PiP / minimalizacja — możesz zminimalizować pokój wideo do floating mini-playera i sprawdzić notatki w innej zakładce bez zrywania połączenia. Mikrofon i kamera dalej działają
- Swap kamer — przełączysz, kto jest w głównym widoku, kto w mini, jednym kliknięciem
- Resume z PiP — gdy wracasz z minimalizacji, pomijasz ekran lobby (PreJoinLobby) i wskakujesz prosto do rozmowy
- Per-participant audio dla diaryzacji — transkrypcja oddziela mówców nawet w PiP
- Background blur naprawiony — CSP blokował MediaPipe WASM, teraz blur działa po jednym kliknięciu
- Czystszy UI sesji AITS — zniknął asystent AI z toolbar’a, mniej wizualnego szumu
- PiP overlay klikalne — usunięcie
pointerEvents:noneioverflow:hidden, przyciski w PiP odpowiadają na kliknięcia - Przycisk “Dołącz do sesji” — był ukryty przez CSS override, teraz widoczny
- Stale closure w handleMaximize — naprawione, maksymalizacja PiP nie krzyczy już błędem
7. 📐 Konceptualizacja Beck v2 i ABC — PDF, toggle wersji, edycja promptów
- PDF konceptualizacji Becka i ABC v2 — naprawione formatowanie i automatyczne zamieszczanie w materiałach sesji (na zgłoszenie Ewy, SCRUM-1297)
- Beck PDF — border-only sections, kolorowe specjalizacje, czyste inicjały, SVG strzałka między sekcjami
- Toggle ABC v1/v2 w Konceptualizacji v2 — wybierasz, którą wersję ABC widzieć w widoku konceptualizacji
- Zębatka edycji promptu w ABC v2 — modyfikujesz prompt AI w zakładce ABC v2
- PDF export dla analiz AI i ABC per-sesja — pojedyncze analizy eksportujesz osobno
- Pluralizacja etykiet ABC w 8 językach — tabelka konceptualizacji ma poprawne formy mnogie
- Puste kolumny ABC fix — backend zwraca poprawne plural property names
8. 🧾 Faktury i KSeF — wybór płatności + state machine
System fakturowy przeszedł refactor pod kątem zgodności z KSeF (Krajowy System e-Faktur).
- Faktura z wybranych płatności — zaznaczasz płatności i system tworzy z nich pojedynczą fakturę (snapshot + Payment FK)
- Entry point “Wystaw fakturę” w widoku finansów terapeuty — szybki dostęp z dashboardu
- Usuwanie pozycji w modalu wystawiania faktury — pomyłki naprawiasz w locie
- KSeF dev/prod separation — sandbox i produkcja pracują na osobnych poświadczeniach
- Invoice state machine (SCRUM-1357 Bohdan) — Draft → Issued → Sent → Cancelled, z DB constraintem na nielegalne przejścia
- AE KsefToken — token KSeF szyfrowany Always Encrypted
To wspólna praca Bohdana (SCRUM-1357, SCRUM-1388).
9. 📅 Kalendarz, sesje cykliczne i lokalizacje
Kalendarz tygodniowy i cykliczny dostały dziesiątki drobnych, ale zauważalnych poprawek — większość zgłoszona przez Joannę i Ewę.
- Sesje od 22:00 — były niewidoczne na siatce tygodniowej, teraz widać je do końca dnia
- Wszystkie godziny w siatce stałych terminów (SCRUM-874, Joanna)
- Sesja odwołana na czas — nie pokazuje się jako “Nieopłacona” (SCRUM-918, Joanna)
- Etykieta częstotliwości obok stałego terminu (SCRUM-919, Joanna) — widzisz “co tydzień”, “co dwa tygodnie” przy każdej powtarzającej się sesji
- Ukrycie integracji Zoom z UI (SCRUM-789, Joanna) — Zoom nie jest już wspierany jako kanał wideo
- Session popover w kalendarzu — nie chowa się już poza ekran
- TherapistAvailability — auto-save po każdej zmianie (debounce 800 ms), nie musisz klikać “zapisz”
- AddSessionModal — opcja “utwórz sesję poza godzinami dostępności” — w wyjątkach możesz wymusić termin
- Status “Nie odbyta” (NoShow=5) — nowy status, możesz go ustawić nawet z sesji już zakończonej lub odwołanej
- RecurringSessionsCalendar — kafelki podsumowania nad legendą i siatką
Lokalizacje terapeuty dostały kanały spotkania online per lokalizacja:
- Tryb Onsite — pola adresu i miasta dla lokalizacji stacjonarnej
- Switch onsite/online zamiast checkboxa — czytelniejszy wybór trybu
- Kanał online per lokalizacja — różne lokalizacje mogą mieć różne kanały (AITS, Google Meet, link zewnętrzny), które auto-propagują się do sesji
- Per-patient permanent meeting rooms — każdy pacjent ma stały link do pokoju AITS i osobny link zewnętrzny widoczne w ustawieniach pacjenta
- Usuwanie lokalizacji — naprawione (znikało z bazy, ale zostawało na liście w UI)
I na koniec typ spotkania w sesjach cyklicznych — naprawione propagowanie MeetingType i MeetingLink z konfiguracji serii cyklicznej do każdej generowanej sesji oraz do maili z przypomnieniami (SCRUM-902, Ewa).
10. 📱 Aplikacja mobilna — dark theme, AdHoc Inbox, dopracowanie
Mobile przeszło do wersji 1.5.0 (build 18) z masą zmian widocznych dla użytkownika i kilkoma podpisaniami pod kątem App Store / Play Store.
- Dark theme — pełen ciemny motyw z czytelnymi nagłówkami grup (SCRUM-1089, Ewa + SCRUM-815)
- Konfigurowalne przypomnienia — wybierasz, kiedy chcesz dostać powiadomienie o sesji
- Mobile reminder 15 min — przypomnienie 15 minut przed sesją + warning gdy notyfikacje systemowe są wyłączone (SCRUM-815, Bohdan)
- Pusty stan listy sesji — zamiast pustego ekranu rozbudowany onboarding (SCRUM-1094, Ewa)
- Auto-refresh banner — gdy aplikacja wykryje aktualizację, pokazuje banner z zapraszającym refreshem
- AdHoc Inbox + AssignPatient + quick-start w MAUI (SCRUM-1289, Bohdan)
- PWA mobile quick-start dla sesji ad-hoc (SCRUM-1286, Bohdan)
- Responsywny widok web dla telefonu — desktop bez zmian, na telefonie układ dopasowany do wąskiego ekranu
- Deep-link handler w iOS — używa BindingContext, rejestracja URL scheme
- iOS NSLocation purpose strings — naprawienie ITMS-90683 (App Store odrzucał build bez tego)
- Android AAB — explicit jarsigner step
- Materiały do App Store Connect i Google Play — pełen pakiet plus audyt WCAG 2.2
11. 🔐 Bezpieczeństwo: SOC 2 / HIPAA, MFA, pełna pseudonimizacja AI
Pod warstwą produktu zrobiliśmy pełen hardening pod SOC 2 i HIPAA plus audit DDD z pięcioma konkretnymi wdrożeniami.
- MFA re-verification dla operacji krytycznych — przy wrażliwych akcjach (zmiana hasła, eksport danych) potwierdzasz tożsamość MFA
- Backup codes dla MFA — kody awaryjne na wypadek utraty telefonu
- IAnonymizedLlmGateway (SCRUM-1353, Bohdan) — wszystkie wywołania modeli AI idą przez bramkę pseudonimizującą dane pacjenta. Imiona, daty, miejsca są podmieniane na pseudonimy zanim opuszczą aplikację, AI dostaje tylko anonimową wersję
- Pseudonimizacja powiadomień email/SMS (SCRUM-1354) — szablony wiadomości też nie wynoszą danych pacjenta przed wysyłką
- OAuth tokens Google/Zoom szyfrowane Always Encrypted (SCRUM-1355) — tokeny dostępowe do integracji są szyfrowane na poziomie kolumny
- Patient.PendingConsent flag (SCRUM-1356) — pacjent bez aktywnej zgody dostaje wymuszenie i frontend badge
- Invoice state machine (SCRUM-1357) — niezmienność statusów faktury z DB constraintem
- Audit immutability + user snapshot w 3 tabelach audytowych — log działań nie da się zmodyfikować po fakcie
- DeanonymizationAuditLog — każde użycie danych pacjenta po deanonimizacji jest logowane wraz ze snapshotem email + displayName użytkownika, który tej deanonimizacji dokonał
- Hardcoded secrets removed — wszystkie klucze i hasła z appsettings.json przeniesione do Azure Key Vault
- Always Encrypted dla wszystkich danych tekstowych użytkownika (ADR-0018) — kierunek architektoniczny zatwierdzony, dalsze tabele migrują w kolejnym release
- ISO/IEC compliance gap analysis — 95 luk w 9 standardach zmapowanych, z planem naprawy
W tle jest pełen DDD audit (Sesje 1-8, fazy 1-6) — przebudowa kontekstów dziedzinowych, dokumentacja architektury, ADRs, mermaid + testy, playbooki, integracja z Confluence.
12. 👤 Portal pacjenta — analizy w Celach, materiały, lepszy podgląd
- Konceptualizacja Becka w zakładce “Cele” pacjenta — gdy opublikujesz konceptualizację, pacjent widzi ją w swoim portalu
- Publikacja analiz na portal pacjenta + preferencje powiadomień (SCRUM-1338, Bartłomiej) — kontrolujesz, co i kiedy pacjent dostaje
- Podgląd PDF w portalu —
iframezamiastembed, CSP zezwala nablob:(PDFy się ładują) - Preview portalu pacjenta z perspektywy terapeuty — widzisz, co widzi pacjent (chrome w wrapper, dashboard 1:1)
- Materiały sesji w Azure Blob Storage — SessionMaterial jako blob, bez lokalnego filesystem
- Sekcja zgód/dokumentów + źródła rejestracji w ustawieniach pacjenta
- Globalna unikalność emaila pacjenta (SCRUM-898) — drugi pacjent z tym samym emailem dostaje 409 + zamknięty modal (SCRUM-898, Ewa)
- Seeder szablonów powiadomień dla SK, CA, RU, UK, LT (SCRUM-883, Joanna) — pełen mailing wielojęzyczny
- Resolver fallback do platform default — gdy terapeuta nie nadpisał szablonu, leci domyślny wielojęzyczny (SCRUM-883)
13. 🎙️ Transkrypcja — niezawodne nagrywanie, dogrywanie i real-time z diaryzacją
- Dogrywaj do istniejącej transkrypcji — możesz kontynuować nagrywanie do tej samej sesji, segmenty się dopisują (intent przeżywa reload strony)
- Per-participant audio dla diaryzacji — transkrypcja video oddziela mówców osobno, nie zlewa wszystkich w jeden tor audio
- Transkrypcja przeżywa PiP — minimalizacja pokoju nie zrywa nagrywania
- Język transkrypcji z ustawień sesji — STT używa języka, który ustawiłeś dla pacjenta
- Auto-refresh transkrypcji po focus / visibilitychange / powrocie z video
- Confirm przy stop nagrywania < 2s — zabezpieczenie przed pustym WAV-em z pomyłki
- Badge “Wysyłanie” na liście sesji — widzisz, że nagranie jest w trakcie uploadu
- Real-time z diaryzacją w sesji video — wcześniej nie startowała, teraz działa
- OPFS backup + 48 kbps Opus — nagranie zapisuje się lokalnie do OPFS jako fallback, parametry audio ujednolicone
- SAS direct upload audio (SCRUM-1276, Bohdan) — audio leci bezpośrednio do Azure z SAS URL, bez przechodzenia przez backend
- m4a native do Azure Speech — m4a obsługiwane natywnie, nie konwertujemy
- Detekcja formatu po magic bytes (SCRUM-1311, Bohdan) — gdy Content-Type=
application/octet-stream, wykrywamy format z zawartości pliku - Hub bez DB text — SignalR realtime hub nie persystuje już tekstu w bazie, finishPending na multipart POST jak MAUI
- SignalR 1006 fix — zdjęcie skipNegotiation żeby Azure SignalR działał + tuning keep-alive
- Marker [AI] od pierwszej generacji + niezawodne wyszukiwanie markera
14. 💬 Powiadomienia, ustawienia pacjenta i drobne UX
- NotificationTemplatesAdmin — przełącznik HTML/Tekst w edytorze emaila
- NotificationSettings — podgląd email renderuje HTML z fallbackiem
- PromptEditModal — przebudowa: zakładki, model selector, wymagane nazwy wersji
- Hide_dev_ui flag reset on logout — flagi developerskie nie pamiętają się między sesjami
- Test patient Ann Fauler — angielski 1:1 polskiej Anny Pełnialskiej do prezentacji EN-only
- Dev UI presentation mode toggle — szybkie przełączanie do trybu prezentacji
- Bug report — załączniki w Jirze + etykieta ze zgłaszającym + wyśrodkowany przycisk “Zgłoś”
- Auth-refresh loop naprawiony — przerywamy requesty i wracamy do loginu po 401
- Banner “Serwer się uruchamia” — przy zimnym starcie (scale-to-zero) pokazujemy informację zamiast pustej strony
- Skala oceny sesji — autorefleksja zamiast oceny jakości + disclaimer (SCRUM-1005, Joanna)
- Kolor buttona “Minimalizuj” zmieniony na kobaltowy fiolet (SCRUM-1307, Ewa)
- Kolor napisu “Transkrypcja” z czerwonego na zielony (SCRUM-1304, Ewa)
- “Nagraj teraz” → “Nagraj sesję AdHoc” — dokładniejsza nazwa przycisku
- Sandbox z zieloną wstążką w lewym górnym rogu + prefix
[SANDBOX]w title — żeby nie pomylić środowiska, plus powtarzalny klon PROD → Sandbox (Azure IaC + skrypty)
✅ QA Checklist — co warto sprawdzić po deploy
| Funkcja | Sprawdź |
|---|---|
| Sesja ad-hoc — Quick Record | Kliknij Quick Record na pulpicie lub w PWA — nagrywanie startuje od razu, sesja ląduje w AdHoc Inbox |
| AssignPatient w AdHoc Inbox | Otwórz nagranie ad-hoc — możesz przypisać do istniejącego pacjenta lub utworzyć nowego |
| Limit pakietu | Pulpit pokazuje licznik sesji w bieżącym miesiącu i ile zostało do limitu pakietu |
| Karencja po nieudanej płatności | Symulator subskrypcji w PromptyAI — wymuś nieudaną płatność, dostajesz dostęp tylko do swojego konta przez 14 dni |
| 3-way merge notatek | W szczegółach sesji pole Notes ma trzy źródła obok siebie (terapeuta / AI / transkrypcja), możesz wybrać co bierzesz |
| 9 analiz CBT | W zakładce analiz CBT widzisz 9 osobnych itemów, każdy generujesz na żądanie, każdy ma zębatkę edycji promptu |
| Profil publiczny — drawery | Otwórz swój profil publiczny będąc zalogowanym — widzisz drawery edycji bio, specjalizacji, kontaktu |
| Wideo PiP | W trakcie sesji video kliknij minimalizuj — okno chowa się do mini-playera, mikrofon dalej działa, wracasz bez ekranu lobby |
| Background blur | W lobby video włącz blur tła — działa od razu, bez błędów CSP |
| Konceptualizacja Becka PDF | Wygeneruj PDF konceptualizacji — pojawia się też w materiałach sesji |
| Toggle ABC v1/v2 | W konceptualizacji v2 możesz przełączyć źródło ABC między wersją 1 a 2 |
| Faktura z wybranych płatności | Zaznacz kilka płatności i kliknij “Wystaw fakturę” — powstaje pojedyncza faktura ze snapshotem |
| Sesja cykliczna z Google Meet | Druga i trzecia sesja z serii ma poprawnie ustawiony Google Meet i email zawiera właściwy link |
| Sesje od 22:00 | W kalendarzu tygodniowym widzisz sesje umówione na 22:00 i później |
| Status “Nie odbyta” | W zakończonej / odwołanej sesji możesz zmienić status na “Nie odbyta” |
| Mobile dark theme | W aplikacji mobilnej przełącz motyw na ciemny — nagłówki grup są czytelne |
| AdHoc Inbox w mobile | Mobile pokazuje skrzynkę nagrań ad-hoc i pozwala przypisać pacjenta |
| MFA re-verification | Przy zmianie hasła aplikacja prosi o ponowne MFA |
| Pseudonimizacja AI | W logach widzisz, że dane pacjenta idą do AI w postaci pseudonimów |
| Materiały sesji jako blob | Wgraj plik do materiałów sesji — ląduje w Azure Blob Storage, nie na lokalnym dysku |
| Globalna unikalność emaila pacjenta | Dodaj drugiego pacjenta z tym samym emailem — dostajesz 409 i modal się zamyka |
| Banner “Serwer się uruchamia” | Po dłuższej nieaktywności wejście do aplikacji pokazuje banner zamiast pustej strony |
🛠️ Co naprawiliśmy — drobnym drukiem
Oprócz dużych funkcji wyszło ~80 zgłoszeń od testerów i użytkowników. Najważniejsze:
- PiP overlay był nieklikalny — naprawione
- Stale closure w handleMaximize — maksymalizacja PiP nie krzyczy już błędem
- PiP utrzymuje połączenie — wcześniej
room.disconnect()wywalał się przy przejściu fullscreen↔PiP - Przycisk “Dołącz do sesji” był ukryty przez CSS override — odkryty
- Druga sesja AITS dla tego samego pacjenta (SCRUM-1319, Ewa) — drop UNIQUE INDEX na
Session.VideoInviteToken - Numeracja sesji w konceptualizacji pomija odwołane (SCRUM-1267, Bohdan)
- Null-safe Payment access w GetSessionDetailsAsync (SCRUM-1268, Bohdan)
- Kolizja sesji testowych Anny Pełnialskiej z Janem o 14:00 — naprawione w seederze
- Dashboard slowdown — null-safe mapping w GetTodaySessionsAsync i GetSessionDetailsAsync
- Auto-refresh po zakończeniu nagrywania z mikrofonu — działa
- Batch fallback nie nadpisuje tekstu z poprzednich nagrań ani nie blokuje UI statusem Processing
- Język transkrypcji z ustawień sesji — STT respektuje preferencję pacjenta
- CSP — zezwolenie na
*.clarity.ms,blob:w connect-src, analytics w script-src - Auth-refresh loop — przerywanie requestów po 401 i powrót do loginu
- CSP MediaPipe WASM — background blur działa
- DEV/SANDBOX wstążka też na Azure FQDN, nie tylko custom domain
- Fałszywy toast “Transkrypcja nie powiodła się” przy wejściu na sesję — usunięty
- Toast zamiast czerwonego banera przy failed transkrypcji + usunięcie przycisku “Ponów próbkowanie”
- Realtime z diaryzacją w sesji video — startuje poprawnie
- AI streaming — per-handler AbortController zamiast wspólnego (
BodyStreamBuffer was aborted) - Nginx non-root + Azure Container Apps — kilka iteracji żeby działało
- Distributed lock (sp_getapplock) — startup migracje nie konfliktują przy równoległych deployach
- DbUpdateConcurrencyException w batch transcription pollerze (SCRUM-1313, Bohdan)
- BlobNotFound jako spodziewany stan (SCRUM-1314, Bohdan)
- Stripe webhook nie-JSON payloads (skanery / boty) — cicha obsługa (SCRUM-1315, Bohdan)
- Detekcja formatu audio po magic bytes (SCRUM-1311, Bohdan)
- Resilient audio upload + defensive Content-Type (SCRUM-1293, Bohdan)
- Migracja FK ActiveEmbeddingModelId → ON DELETE NO ACTION
- Dev client deploy — CACHE_BUST=
github.shawymusza rebuild frontendu
To największy, najgęstszy release tej wiosny. Jeśli któraś z funkcji wydaje ci się znajoma — to dlatego, że to była twoja prośba albo twój ticket. Dziękujemy za każde zgłoszenie i każdy screen.
Artykuł przygotowany przez zespół Therapy Support