synops/docs/features/kanban.md
vegard 00bf5d27ce Arkitekturbeslutninger: noder er sentrum, edges definerer alt
Grunnleggende arkitekturbeslutninger tatt og dokumentert:

- Alt er noder (brukere, team, innhold, mediefiler, samlings-noder)
- Edges definerer hva en node er (freeform typer, metadata i JSONB)
- Materialisert tilgangsmatrise (node_access) erstatter workspace-RLS
- Visibility (hidden/discoverable/readable/open) på noder
- Aliaser via usynlige system-edges
- Maskinrommet eier all skriving (SpacetimeDB først, PG asynk)
- SpacetimeDB holder hele grafen, PG er persistent backup
- Node- og edge-skjema spesifisert (docs/primitiver/)

Fjernet workspace-konseptet fra hele dokumentasjonen (~40 filer).
Fem retninger besluttet, én åpen (rom, ikke forum).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 10:29:54 +01:00

2.7 KiB

Feature: Kanban (Planlegging)

Filsti: docs/features/kanban.md

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. Status

PG-adapter ferdig og deployet (mars 2025). SpacetimeDB-sync gjenstår.

Implementert

  • Migrering 0002_kanban.sql: kanban_boards, kanban_columns, kanban_cards
  • Kanban-kort er nodes i kunnskapsgrafen (tilgangsstyrt via node_access-matrise)
  • 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 — tilgang styres via node_access-matrisen.

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)

6. Instruks for Claude Code

  • Bruk native HTML5 Drag and Drop i SvelteKit, unngå tunge biblioteker.
  • PG-adapter er autoritativ inntil SpacetimeDB-sync er på plass.
  • Tilgang styres via node_access-matrisen.
  • Sjekk docs/erfaringer/adapter_moenster.md for hybrid-strategi.