Phase A.1 — UI port (v1 → v2)¶
Stav: ✅ Dokončeno 28.4.2026 Trvání: 1 den (27.4 → 28.4)
Cíl¶
Portovat klíčové v1 frontend komponenty na v2 schema (JWT auth, nové DB shape).
Kroky¶
1. /reports list page¶
Client component, search by title/filename, sort newest first, source badge (v1-import / user-upload / Nette), empty state s CTA na /migrate. Karty linkují na /chat/{id}.
2. /chat/[reportId] standalone rewrite¶
Server component s auth gate (getClaims) + UUID validace + render client wrapper. ChatPageClient s ChatWindow + ZoomBar + ThreadTabs + MultiReportPicker.
Lib refactor: conversations.ts, feedback.ts, reports.ts všechno přes apiFetch (JWT). user_id field/prop dropped napříč (RLS + JWT pokrývá).
End-to-end ověřeno chat call → Gemini 3 Flash Preview odpověděl s daty z reportu.
3. /admin dashboard port¶
Refaktor lib/admin.ts + admin/page.tsx na v2 shapes:
ratingint 1/-1 (v1 měl boolean)FeedbackStats {total, up, down}LLMProvider.display_namena top levelconfig.models[]= objekty s vlastnímreasoning_capable+reasoning_levels
Sloupce "Tester" a "Odpověď AI" odstraněné (v2 shape nemá). ProviderCard přepracovaný pro nový model shape.
4. /demo cleanup¶
Smazán (page.tsx + report-fixture.json). Page byla v1 mock-handle Nette parent simulator s broken iframe. Phase E má vlastní detailní plán; recreate při potřebě je trivka.
5. Frontend tests (Vitest scaffold)¶
vitest+jsdom+ path alias@/*matching tsconfigtests/setup.tsinjektujeNEXT_PUBLIC_*envtests/lib/api.test.ts(5 testů) +tests/lib/feedback.test.ts(2 testy) = 7/7 ✓- npm scripts
test+test:watch - Playwright e2e odložen (minimum-viable scope)
6. typescript.ignoreBuildErrors: false¶
Sundán flag, build pass strict TS check za 7.5s.
Fix: explicit CookieSetEntry type v supabase/server.ts.
Deploy size dropped 8.5 → 6.3 MB / 2.0 → 1.3 MB gzip (po /demo delete + chat duplicate state cleanup).
Bonus bugs nalezené během e2e testu¶
Bug A.1.1 — Migrace 0012 (messages_id_seq USAGE)¶
authenticated neměl USAGE na messages_id_seq. Při INSERTu do messages backend hodil 500 db_error (permission denied for sequence messages_id_seq).
Fix: migrace 0012 — GRANT USAGE, SELECT ON SEQUENCE messages_id_seq TO authenticated. Admin sequences zůstávají service_role-only.
Lesson learned: pgTAP grants suite rozšířen o sequence USAGE checks aby budoucí migrace nezapomenula.
Bug A.1.2 — Wrong Gemini model name¶
CLAUDE.md plán říkal gemini-3.1-flash, ale ten ještě neexistuje na v1beta API. Aktuální dostupný model = gemini-3-flash-preview.
Fix: opraveno v Sliplane env + app/config.py default.
Co Phase A.1 zanechala pro Phase B¶
- Stable v2 chat flow (přes parsed_markdown / clean_text fallback)
- Admin dashboard funkční na v2 shape
- TS strict build pipeline
- Vitest scaffold pro budoucí FE testy
- 6.3 MB / 1.3 MB gzip deploy size baseline