Skip to content

Audyt podstron, endpointów i testów

Nieaktualne od 2026-08-21. Bieżący stan aplikacji opisuje APP_STATUS_2026-08-21.md. Największe usterki z tego audytu zostały naprawione: proxy dla /judge-fingerprint i /reasoning-lines istnieją, /blog pobiera prawdziwe dane, npm run typecheck przechodzi, a testy jednostkowe backendu i frontendu są zielone. /accessibility jest już publiczna (frontend/lib/supabase/public-route-policy.ts:22), wbrew wierszowi w tabeli. Tabela poniżej pozostaje przydatna jako szczegółowy spis per-trasa — traktuj jej werdykty jako historyczne.

Stan repozytorium: 2026-08-05. Audyt obejmuje wszystkie 63 pliki frontend/app/**/page.tsx, ich zależności od 99 handlerów tras Next.js (96 pod /api i 3 poza nim), 38 routerów oraz 3 grupy LangServe rejestrowane w backend/app/server.py (290 unikalnych endpointów FastAPI w introspekcji runtime), a także testy Jest, Playwright i pytest.

Wniosek: nie wszystkie podstrony są gotowe produkcyjnie. Najpoważniejsze problemy to niedziałające wywołania chronionego backendu z /judge-fingerprint i /reasoning-lines*, makiety zamiast integracji na /blog* oraz /use-cases/uk-judgments, pięć endpointów FastAPI zasłoniętych przez wcześniej zarejestrowane trasy dynamiczne, co najmniej pięć proxy kierujących do nieistniejącego upstreamu, brak publicznego dostępu do wielu stron informacyjnych i prawnych oraz nierówne pokrycie testami. next typegen poprawnie wygenerował typy routingu, ale pełny npm run typecheck nie przechodzi z powodu błędu TypeScript w components/blog/admin/tiptap-editor.tsx:518. Wszystkie 117 zestawów Jest (1629 testów) zaliczyły asercje, lecz proces nie zakończył się sam z powodu otwartych uchwytów. poetry run pytest -q -m unit zakończył się wynikiem 2621 zaliczonych, 24 pominiętych i 27 niezaliczonych testów; awarie obejmują kontrakty auth 401/403, tworzenie ekstrakcji zwracające 422, autocomplete/topic-click zwracające 422 i jeden test zgodności schematu. Testy Playwright nie zostały uruchomione, ponieważ wymagają działających usług i poświadczeń; pełny zestaw E2E jest w CI uruchamiany ręcznie.

Legenda stanu: ✅ gotowe lub adekwatne; ⚠️ działa częściowo albo ma istotne ryzyko; ❌ niedziałające lub makieta; ➖ endpoint nie jest potrzebny dla strony statycznej.

Snapshot z konkretnej daty. Tabela opisuje stan z 2026-08-05 i nie jest aktualizowana automatycznie. Część pozycji została już naprawiona: /schemas/[id] zwraca prawdziwe statusy HTTP (#428, doprecyzowane w #433), /documents/[id] również (#423), a kontrakty odpowiedzi i własności publikacji poprawiono w #413 i #424. Pozostałych wpisów nie weryfikowano ponownie przy dodawaniu tej notki — przed działaniem na pojedynczym wierszu sprawdź bieżący kod.

Podstrona Plik i dostęp Dane / endpointy Stan routingu i endpointów Testy
/ frontend/app/page.tsx:193; publiczna /api/dashboard/stats, /api/dashboard/trending-topics, /api/collections ⚠️ Statystyki są publiczne, ale anonimowy render uruchamia też dwa hooki blokowane przez middleware; proxy statystyk maskuje awarię backendu odpowiedzią 200 z zerami. ⚠️ LandingPage unit, smoke /, dashboard E2E i backend dashboard; brak direct testów proxy dashboard.
/about frontend/app/about/page.tsx:21; publiczna Brak, strona statyczna ✅ Endpoint niepotrzebny. ⚠️ Tylko smoke i matrix middleware.
/accessibility frontend/app/accessibility/page.tsx:6; wymaga sesji Brak, strona statyczna ⚠️ Technicznie poprawna, ale strona informacyjna jest nieoczekiwanie za logowaniem. ❌ Brak testu strony.
/admin frontend/app/admin/page.tsx:49; AdminGuard Bezpośrednio /api/admin/stats, /api/admin/activity, /api/admin/system/health; dodatkowo /api/dashboard/stats ⚠️ Backend i JWT są spięte, ale klient używa NEXT_PUBLIC_BACKEND_URL, którego nie przekazują pliki Compose/Docker (przekazują NEXT_PUBLIC_API_BASE_URL); domyślny URL działa lokalnie, jest ryzykowny w produkcji. ⚠️ Backend admin ma unit/integration; brak testu strony i ścieżki produkcyjnej klienta.
/admin/content frontend/app/admin/content/page.tsx:16; AdminGuard Backend /api/admin/content/stats ⚠️ Ten sam problem konfiguracji URL co /admin. ⚠️ Backend testowany; UI nie.
/admin/documents frontend/app/admin/documents/page.tsx:88; AdminGuard Backend /api/admin/documents/stats ⚠️ Ten sam problem konfiguracji URL co /admin. ⚠️ Backend testowany; UI nie.
/admin/system frontend/app/admin/system/page.tsx:83; AdminGuard Backend /api/admin/system/health ⚠️ Ten sam problem konfiguracji URL co /admin. ⚠️ Backend testowany; UI nie.
/admin/users frontend/app/admin/users/page.tsx:18; AdminGuard Backend /api/admin/users ⚠️ Ten sam problem konfiguracji URL co /admin. ⚠️ Backend testowany; UI nie.
/argumentation-analysis frontend/app/argumentation-analysis/page.tsx:285; wymaga sesji /api/argumentation/argumentation/analyze ✅ Proxy dodaje klucz API i pasuje metodą oraz ścieżką do FastAPI. ⚠️ Klient API oraz backend unit/integration; brak testu strony i proxy.
/auth/error frontend/app/auth/error/page.tsx:8; publiczna Brak, prezentacja błędu ✅ Endpoint niepotrzebny. ⚠️ Pokryta tylko rodziną auth E2E/middleware.
/auth/forgot-password frontend/app/auth/forgot-password/page.tsx:3; publiczna Supabase Auth reset password ✅ Integracja adekwatna, powrót do /auth/update-password. ⚠️ Auth E2E, brak direct unit strony.
/auth/login frontend/app/auth/login/page.tsx:16; publiczna Supabase Auth ✅ Sanitizuje next i przekierowuje zalogowanego użytkownika. ✅ Smoke oraz rozbudowane auth E2E, choć część starszych scenariuszy używa nieistniejących nazw tras.
/auth/sign-up-success frontend/app/auth/sign-up-success/page.tsx:9; publiczna Brak, strona statyczna ✅ Endpoint niepotrzebny. ⚠️ Tylko pokrycie rodziny auth.
/auth/sign-up frontend/app/auth/sign-up/page.tsx:4; publiczna Supabase Auth + /auth/confirm ✅ Routing jest przygotowany. ⚠️ Auth E2E; brak direct testu strony i handlera confirm.
/auth/update-password frontend/app/auth/update-password/page.tsx:3; publiczna Supabase Auth update user ✅ Routing jest przygotowany. ⚠️ Auth E2E; brak direct unit strony.
/blog frontend/app/blog/page.tsx:147; wymaga sesji Lokalny mockPosts; backend /blog/posts nie jest używany ❌ Makieta: brak realnego pobierania danych i publicznego proxy; dodatkowo „publiczny” blog wymaga logowania. ❌ Brak testu strony/publicznego API.
/blog/[slug] frontend/app/blog/[slug]/page.tsx:307; wymaga sesji Jeden lokalny mockPost ❌ Slug jest ignorowany, każdy URL pokazuje ten sam wpis, brak notFound(). ❌ Brak testu strony.
/blog/admin frontend/app/blog/admin/page.tsx:48; wymaga tylko sesji /api/blog/admin/posts, /api/blog/admin/stats → backend admin ⚠️ Endpointy i backend wymagają admina, ale UI nie ma AdminGuard; zwykły użytkownik dochodzi do ekranu i dostaje 403. ⚠️ Next admin routes i backend CRUD testowane; strona/guard nie.
/blog/admin/new frontend/app/blog/admin/new/page.tsx:17; wymaga tylko sesji POST /api/blog/admin/posts ⚠️ Endpoint poprawny, brak guardu admina w UI. ⚠️ Handler/backend testowane; strona nie.
/blog/admin/[id] frontend/app/blog/admin/[id]/page.tsx:13; wymaga tylko sesji GET/PUT /api/blog/admin/posts/[id] ⚠️ Endpoint poprawny, brak guardu admina w UI. ⚠️ Handler/backend testowane; strona nie.
/changelog frontend/app/changelog/page.tsx:13; wymaga sesji Lokalne release-notes/*.md ✅ Bez API; pliki są uwzględnione w standalone build. ⚠️ Parser changelogu ma unit test; brak testu strony.
/changelog/[version] frontend/app/changelog/[version]/page.tsx:27; wymaga sesji Lokalny plik wersji ✅ Jedyna dynamiczna strona jawnie używająca notFound() dla braku rekordu. ⚠️ Parser unit; brak testu routingu strony.
/chat frontend/app/chat/page.tsx:78; wymaga sesji /api/chat, /api/chats, /api/example_questions, Supabase messages ✅ BFF i backend są spięte; chat stream/historia mają właściwe trasy. ✅ Liczne component/unit i E2E; direct handler test ma tylko root /api/chats, nie cała rodzina.
/chat/[id] frontend/app/chat/[id]/page.tsx:11; wymaga sesji /api/chats/[id]/messages, /fork, /export, /api/chats ⚠️ Funkcjonalnie spięte; brak chatu daje client-side empty state z HTTP 200 zamiast 404. ✅ Liczne E2E chat; proxy potomne bez pełnego direct coverage.
/collections frontend/app/collections/page.tsx:105; wymaga sesji CRUD /api/collections/collections ✅ Metody i ścieżki odpowiadają backendowi. ⚠️ Pełny flow E2E i direct test root; bieżący backend test auth nie przechodzi, bo oczekuje 401, a endpoint zwraca 403.
/collections/[id] frontend/app/collections/[id]/page.tsx:6; wymaga sesji /api/collections/[id], /documents, /api/documents/[id] ⚠️ CRUD działa; brak kolekcji jest komunikatem z HTTP 200, nie 404. ✅ E2E oraz direct testy większości proxy; brak direct testu documents/[documentId].
/contact frontend/app/contact/page.tsx:36; wymaga sesji /api/contact → Supabase + Resend ⚠️ Handler jest przygotowany, lecz kontakt nie jest dostępny anonimowo. ⚠️ Direct unit handlera; brak testu strony.
/cookies frontend/app/cookies/page.tsx:8; wymaga sesji Brak, strona statyczna ⚠️ Polityka cookies jest nieoczekiwanie niepubliczna. ❌ Brak testu strony.
/dataset-comparison frontend/app/dataset-comparison/page.tsx:80; wymaga sesji Lokalny JSON i wykresy ✅ Endpoint niepotrzebny dla statycznego zestawu danych. ❌ Brak testu tej strony.
/documents/[id] frontend/app/documents/[id]/page.tsx:19; wymaga sesji /api/documents/[id]/{metadata,html,similar}, /api/documents/{summarize,key-points}, versions ⚠️ Główne endpointy są poprawnie spięte; brak dokumentu daje ErrorCard z HTTP 200. ✅/⚠️ Najlepsze pokrycie: direct page unit, liczne E2E i 6 handlerów; bieżący backend test auth nie przechodzi przez różnicę 401/403.
/ecosystem frontend/app/ecosystem/page.tsx:143; publiczna Brak, strona statyczna ✅ Endpoint niepotrzebny. ⚠️ Tylko matrix middleware.
/extract frontend/app/extract/page.tsx:161; wymaga sesji /api/collections, /api/schemas, /api/jobs, /api/extractions*, schema generator ⚠️ Główny przepływ ma proxy, ale statyczne /extractions/prompts i /extractions/schemas są zasłonięte przez wcześniej zarejestrowane /{job_id}; część API jest nieosiągalna. ⚠️ E2E extraction/schema istnieją, lecz bieżące unit testy tworzenia ekstrakcji dostają 422 zamiast oczekiwanych 202/400; brak direct unit strony i wielu proxy.
/extractions frontend/app/extractions/page.tsx:810; wymaga sesji /api/jobs, /api/extractions, /api/extractions/delete ✅ Routing jest zgodny z backendem. ✅/⚠️ E2E i backend router tests; direct testy tylko części handlerów.
/extractions/[id] frontend/app/extractions/[id]/page.tsx:686; wymaga sesji /api/extractions?job_id=..., export ⚠️ Dane są spięte; brak wyniku jest stanem klienta z HTTP 200. ✅/⚠️ E2E list/detail i backend tests; bez direct testu strony.
/help frontend/app/help/page.tsx:28; wymaga sesji Lokalny tour store ✅ Endpoint niepotrzebny. ❌ Brak testu strony.
/judge-fingerprint frontend/app/judge-fingerprint/page.tsx:22; wymaga sesji Bezpośrednio ${NEXT_PUBLIC_API_BASE_URL}/judge-fingerprint/* ❌ Backend istnieje, ale jest globalnie chroniony X-API-Key; przeglądarka nie wysyła klucza, a proxy Next nie istnieje. ❌ Tylko test i18n komponentów; brak testu HTTP backendu/proxy/E2E.
/legal/disclaimer frontend/app/legal/disclaimer/page.tsx:14; wymaga sesji Brak, strona statyczna ⚠️ Dokument prawny jest nieoczekiwanie niepubliczny. ❌ Brak testu strony.
/legal/terms frontend/app/legal/terms/page.tsx:13; wymaga sesji Brak, strona statyczna ⚠️ Dokument prawny jest nieoczekiwanie niepubliczny. ❌ Brak testu strony.
/onboarding frontend/app/onboarding/page.tsx:81; publiczna Brak, strona statyczna ✅ Endpoint niepotrzebny. ⚠️ Testowany modal welcome, nie sama strona.
/precedents frontend/app/precedents/page.tsx:160; wymaga sesji /api/precedents/find/precedents/find ✅ Proxy sprawdza użytkownika i dodaje klucz API. ⚠️ Klient API i backend unit/integration; brak testu strony i proxy.
/privacy frontend/app/privacy/page.tsx:11; wymaga sesji Brak, strona statyczna ⚠️ Polityka prywatności jest nieoczekiwanie niepubliczna. ❌ Brak testu strony.
/publications frontend/app/publications/page.tsx:18; wymaga sesji /api/publications/publications ⚠️ Endpoint działa, ale błąd lub pusta baza są maskowane statycznym fallbackiem; strona opisana jako publiczna jest za auth middleware. ⚠️ Backend integration; brak testu strony i wszystkich proxy publikacji.
/publications/admin frontend/app/publications/admin/page.tsx:33; AdminGuard CRUD /api/publications* ✅ Auth, BFF i backend są logicznie spięte. ⚠️ Backend integration; brak direct testów proxy i UI.
/publications/admin/new frontend/app/publications/admin/new/page.tsx:11; AdminGuard POST /api/publications + schemas/collections/jobs ✅ Główna ścieżka jest przygotowana. ⚠️ Backend integration; brak direct testów proxy i strony.
/publications/admin/[id] frontend/app/publications/admin/[id]/page.tsx:17; AdminGuard /api/publications/[id]/{schemas,collections,extraction-jobs} ⚠️ Endpointy istnieją; lokalny redirect używa redirect=, podczas gdy login czyta next=. ⚠️ Backend integration; brak direct testów proxy/UI.
/reasoning-lines frontend/app/reasoning-lines/page.tsx:106; wymaga sesji Bezpośrednio ${NEXT_PUBLIC_API_BASE_URL}/reasoning-lines/* ❌ Backend wymaga X-API-Key, klient go nie wysyła, brak proxy Next; dodatkowo /reasoning-lines/dag jest zasłonięte przez wcześniejsze /{line_id}. ❌ Tylko testy helperów backendu; komentarz testu wskazuje brak integration tests tras.
/reasoning-lines/[id] frontend/app/reasoning-lines/[id]/page.tsx:55; wymaga sesji Bezpośrednio /reasoning-lines/* ❌ Ten sam brak klucza/proxy; brak rekordu dodatkowo daje HTTP 200 z EmptyState. ❌ Brak testu strony, proxy i endpointów HTTP.
/saved-searches frontend/app/saved-searches/page.tsx:187; wymaga sesji CRUD /api/saved-searches → Supabase ✅ Handler i store są zgodne. ✅/⚠️ Direct route i store unit; brak direct testu strony, przepływy E2E używają mocków.
/schema-chat frontend/app/schema-chat/page.tsx:47; wymaga sesji /api/schemas*, /api/schema-generator/{chat,simple}, /api/collections, versions ⚠️ Routing jest szeroki, ale /schemas/db/{id}/versions/compare jest zasłonięte przez wcześniejsze /{version_number}; aktualny backend schemas integration suite jest wyłączony z powodu nieaktualnych mocków. ⚠️ Dużo unitów edytora i E2E, ale tylko root /api/schemas ma direct test; backend integration nie daje obecnie pełnej gwarancji.
/schemas frontend/app/schemas/page.tsx:59; wymaga sesji /api/schemas, /api/schemas/stats ⚠️ Endpointy istnieją; ograniczona gwarancja integracyjna jak wyżej. ⚠️ Root handler i edytor testowane; stats/proxy i aktywna integracja backendu niepełne.
/schemas/base frontend/app/schemas/base/page.tsx:31; wymaga sesji /api/extractions/base-schema/definition ✅ Endpoint istnieje i jest spięty. ✅/⚠️ Direct route i backend regression tests; brak testu strony.
/schemas/[id] frontend/app/schemas/[id]/page.tsx:31; wymaga sesji /api/schemas/[id], DELETE /api/schemas?id=... ⚠️ Endpointy istnieją; brak schematu jest stanem klienta, nie 404 strony. ⚠️ Root schemas handler i unit edytora; brak direct testu [id] oraz aktywnej pełnej integracji.
/search frontend/app/search/page.tsx:682; wymaga sesji /api/search/{documents,autocomplete,suggest,topic-click} + document/chunk fallbacki ⚠️ Główna ścieżka /api/search/documents działa, ale /documents/facets jest zasłonięte przez /{document_id}; proxy enhance_query, documents/search/direct, dwa proxy chunks i similarity-graph celują w upstreamy nieobecne w runtime FastAPI. ⚠️ Direct page integration, hook/component unit i liczne E2E istnieją, lecz bieżące backend testy autocomplete/topic-click zwracają 422, a mockowane proxy nie wykrywają brakujących upstreamów.
/search/extractions frontend/app/search/extractions/page.tsx:416; wymaga sesji /api/extractions/base-schema/{filter,facets,histogram,nl-filter} ✅ Endpointy odpowiadają backendowi. ✅ E2E strony, hook unit oraz backend tests; część proxy bez direct testu.
/settings frontend/app/settings/page.tsx:623; wymaga sesji /api/embeddings, /api/email-alerts ⚠️ Używane ścieżki istnieją; store zawiera martwe wywołanie nieistniejącego /api/email-alerts/log, którego strona obecnie nie uruchamia. ❌ Brak testu strony i handlerów settings; backend embeddings ma testy.
/statistics frontend/app/statistics/page.tsx:165; wymaga sesji /api/dashboard/stats/dashboard/stats ⚠️ Proxy zwraca HTTP 200 z zerami przy awarii, więc UI nie odróżnia błędu od pustych danych. ⚠️ Helpery i backend dashboard testowane; brak testu strony/proxy.
/status frontend/app/status/page.tsx:13; publiczna Polling /api/health/status/health/status ✅ Proxy dodaje klucz API i ścieżka jest publicznie dozwolona przez middleware. ⚠️ Matrix middleware i backend health tests; brak direct testu proxy/strony.
/team frontend/app/team/page.tsx:116; wymaga sesji Brak, strona statyczna ⚠️ Strona informacyjna jest nieoczekiwanie niepubliczna. ❌ Brak testu strony.
/terms frontend/app/terms/page.tsx:11; wymaga sesji Brak, strona statyczna ⚠️ Drugi dokument warunków jest nieoczekiwanie niepubliczny. ❌ Brak testu strony.
/topic-modeling frontend/app/topic-modeling/page.tsx:268; wymaga sesji /api/topic-modeling/analyze/topic-modeling/analyze ✅ Proxy dodaje klucz API i metody są zgodne. ⚠️ Klient/helper i proxy unit; backend integration akceptuje też HTTP 500, więc happy path nie jest mocno dowiedziony.
/topics frontend/app/topics/page.tsx:88; wymaga sesji /api/search/topics/{meta,trending,my-clicks}, /api/search/topic-click ⚠️ Ścieżki mają proxy, ale bieżące testy backendu topic-click kończą się 422 dla poprawnych według testów danych. ❌/⚠️ Direct test tylko topic-click; wiele testów backend topic-click/meta nie przechodzi, brak testu strony i pozostałych proxy.
/use-cases frontend/app/use-cases/page.tsx:8; wymaga sesji Brak, strona statyczna ✅ Endpoint niepotrzebny. ❌ Brak testu strony.
/use-cases/uk-judgments frontend/app/use-cases/uk-judgments/page.tsx:25; wymaga sesji Jeden lokalny mockData, placeholdery wykresów ❌ Jawne TODO „Replace with actual API call”; brak endpointu i realnych danych. ❌ Brak realnego testu strony/API/E2E.

Pokrycie zbiorcze: tylko 2 z 63 stron są bezpośrednio importowane przez testy stron (/search i /documents/[id]); tylko 26 z 99 handlerów Next ma direct test importujący handler. Największe luki testowe dotyczą /judge-fingerprint, /reasoning-lines*, publikacji po stronie frontendu, proxy dashboard/health, settings, publicznego bloga oraz większości stron statycznych. Matrix middleware obejmuje jedynie wybrane trasy, a jego test publicznego API uznaje nawet 404 za dopuszczalny wynik, więc nie potwierdza istnienia endpointu.