diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 7a588ab..29fdc85 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -183,7 +183,7 @@ Chat (channels), Kanban, Whiteboard, Live transkripsjon, Live AI (faktoid + refe - [ ] Jobbkø-worker (Rust) - [ ] Kunnskapsgraf CRUD (SvelteKit server-side) - [~] Chat med channels (PG-adapter + SpacetimeDB hybrid-adapter ferdig, sync-worker gjenstår) -- [ ] Kanban (SpacetimeDB ↔ PG synk) +- [~] Kanban (PG-adapter ferdig med drag & drop, redigeringsmodal, CRUD API. SpacetimeDB-sync gjenstår) - [ ] Lydmeldinger & Diktering (opptak + Whisper + AI-opprydding) - [ ] Prompt-Laboratorium (prompt-testing mot egne data) - [ ] Promptfoo testsett for første jobbtyper (norsk testdata) @@ -241,6 +241,7 @@ Innhold per mars 2025: - `svelte5_reaktivitet.md` — $state-getters, SSR-feller, polling-mønster - `spacetimedb_integrasjon.md` — SDK-konvensjoner, BigInt, Rust borrow-feller - `adapter_moenster.md` — Hybrid PG+SpacetimeDB, anti-patterns, anbefaling for neste komponent +- `authentik_oidc.md` — Sub-claim er SHA256, @auth/sveltekit JWT-quirks, redirect URI ## 11. Testing og Utrulling diff --git a/docs/features/kanban.md b/docs/features/kanban.md index 052d1c8..93b8349 100644 --- a/docs/features/kanban.md +++ b/docs/features/kanban.md @@ -4,19 +4,56 @@ ## 1. Konsept Et drag-and-drop Kanban-brett for planlegging. Primært brukt til episodeplanlegging i Redaksjonen, men også mottaker av AI-genererte action points fra Møterommet. -## 2. Datamodell -* **Episode** er en container (node i Kunnskapsgrafen) som samler et utvalg Temaer. -* **Posisjon/rekkefølge** lagres i SpacetimeDB for sanntid, synkes til PostgreSQL. -* **Status** på et Tema innenfor en episode (f.eks. "Forslag", "Bekreftet", "Innspilt") håndteres som et felt i SpacetimeDB. +## 2. Status +**PG-adapter ferdig og deployet (mars 2025).** SpacetimeDB-sync gjenstår. -## 3. Brukes av +### Implementert +- Migrering `0002_kanban.sql`: `kanban_boards`, `kanban_columns`, `kanban_cards` +- Kanban-kort er nodes i kunnskapsgrafen (arver workspace-isolasjon) +- REAL-posisjon for midpoint-innsetting (`(1.0 + 2.0) / 2 = 1.5`) — ingen re-nummerering +- REST API: GET brett, POST kolonne/kort, PATCH kort/flytt, DELETE kort +- PG polling-adapter (`pg.svelte.ts`) med 5 sek intervall og optimistisk UI +- Adapter-factory (`create.svelte.ts`) — klar for SpacetimeDB-hybrid +- KanbanBlock.svelte: drag & drop, redigeringsmodal (tittel/beskrivelse/slett), enkelt kort-input som legger til i første kolonne + +### Gjenstår +- SpacetimeDB-modul + hybrid-adapter for sanntidsoppdatering +- Reposisjonering ved dra innad i kolonne (sortert rekkefølge) +- Tildeling (assignee) UI +- Fargekoder/labels på kort +- AI-integrasjon: møtereferent → nye kort + +## 3. Datamodell + +``` +kanban_boards (id FK→nodes, parent_id FK→nodes, name) +kanban_columns (id, board_id FK→kanban_boards, name, color, position REAL) +kanban_cards (id FK→nodes, column_id FK→kanban_columns, title, description, assignee_id, position REAL, created_by, created_at) +``` + +Kort og brett er nodes — all workspace-isolasjon arves automatisk via `nodes.workspace_id`. + +## 4. API-endepunkter + +| Metode | Sti | Beskrivelse | +|---|---|---| +| GET | `/api/kanban/[boardId]` | Hent brett med kolonner og kort | +| POST | `/api/kanban/[boardId]/columns` | Opprett kolonne | +| POST | `/api/kanban/[boardId]/cards` | Opprett kort (oppretter node + kort) | +| PATCH | `/api/kanban/[boardId]/cards/[cardId]` | Oppdater tittel/beskrivelse | +| PATCH | `/api/kanban/[boardId]/cards/[cardId]/move` | Flytt kort til kolonne/posisjon | +| DELETE | `/api/kanban/[boardId]/cards/[cardId]` | Slett kort (cascader fra node) | + +## 5. Brukes av | Konsept | Bruk | |---|---| | Redaksjonen | Episodeplanlegging — dra Temaer inn i Kjøreplanen | | Møterommet | AI-referenten foreslår nye kort basert på action points | +| Foreningen Liberalistene | Styreoppgaver (Å gjøre / Pågår / Ferdig) | -## 4. Instruks for Claude Code +## 6. Instruks for Claude Code * Bruk native HTML5 Drag and Drop i SvelteKit, unngå tunge biblioteker. -* SpacetimeDB er autoritativ for posisjon/rekkefølge — frontend speiler SpacetimeDB-state. -* Alt er workspace-scopet. +* PG-adapter er autoritativ inntil SpacetimeDB-sync er på plass. +* Alt er workspace-scopet via node-modellen. +* Sjekk `docs/erfaringer/adapter_moenster.md` for hybrid-strategi.