2bc2e6525c
`PublicTaskOfferController` szukal tokenu wylacznie w `registrations`, a prelegent tam nie istnieje: nie przechodzi przez formularz zapisu i ma wlasny token w `webinar_speakers`. Kazdy endpoint sali odpowiadal mu 404. Objawialo sie to tym, ze prowadzacy **nie widzial wlasnych zadan**: panel pokazywal "Nie znaleziono zapisu" przy zadaniu ogloszonym minute wczesniej i widocznym w panelu prowadzenia. Tak samo znikaly banery i nie liczyly sie ich wyswietlenia. Zdarzylo sie to na zywo, w trakcie spotkania. Nowa metoda `TaskService.viewer` obsluguje oba rodzaje tokenu, wzorowana na `PublicInteractionController`, ktory robil to juz przy historii czatu. Przelaczone sa WYLACZNIE odczyty: lista zadan, banery i ich zdarzenia. Zapisy (zgloszenie do zadania, wyslanie oferty) zostaja przy `participant`, bo prelegent nie zapisuje sie na wlasne zadanie. `registrationId` rowne null jest tu poprawna wartoscia, nie brakiem danych: `listViews` przewidywalo to od poczatku, a `banner_events.registration_id` jest nullowalne wlasnie dla zdarzen od osob bez zapisu. Front: `TasksTab` dostaje tryb `readOnly`, wiec prowadzacy widzi zadania i liczbe zapisanych, ale bez przycisku zgloszenia. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>