synops/docs/features/kanban.md
vegard a1a1b8c460 Dokumentasjon: oppdater etter domene/ruting-refaktor
- CLAUDE.md: defensiv skriving-praksis, fikseliste i doc-treet
- docs/fikseliste.md: oppdatert med ferdig domene/ruting/auth + mottak fjernet
- Fjernet utdaterte mottak-referanser fra kalender, dagbok, kanban, arbeidsflaten

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 04:52:26 +00:00

4.8 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

Implementert med nodes+edges (mars 2026). Sanntid via PG LISTEN/NOTIFY + WebSocket.

Implementert

  • Board = samlings-node (node_kind: 'collection', metadata.board: true)
  • Kolonner definert i board-metadata: metadata.columns: ["todo", "in_progress", "done"]
  • Kort = content-noder med belongs_to-edge til board
  • Status via status-edge (kort → board) med metadata.value
  • Posisjon via belongs_to-edge metadata.position (REAL for midpoint-innsetting)
  • Backend: POST /intentions/update_edge for statusendring
  • Backend: GET /query/board?board_id=... for board-spørring
  • Frontend: /board/[id] route med HTML5 drag-and-drop
  • Sanntid via PG LISTEN/NOTIFY + WebSocket (ingen polling)
  • Opprett kort direkte i kolonne (tittel-input)
  • Oppretting av nye brett fra verktøymenyen i arbeidsflaten

KanbanTrait panel (oppgave 20.6, mars 2026)

  • Inline panel: KanbanTrait er nå et fullverdig BlockShell-panel som viser kolonner og kort direkte i panelet — ikke bare lenke til /board/[id].
  • Kolonner: Henter kolonner fra metadata.traits.kanban.columns, fallback til ['todo', 'in_progress', 'done'].
  • Intern drag-and-drop: Kort kan dras mellom kolonner for statusendring (bruker status-edge).
  • BlockReceiver: Aksepterer drops fra andre paneler (innholdstransfer-modus). Noder fra chat/editor opprettes som nye kort med source_material-edge.
  • Drag-out: Kort er draggable med setDragPayload — kan dras til andre paneler (chat, editor, kalender).
  • Opprett kort: Inline-knapp per kolonne for å opprette nye kort (tittel → content-node + belongs_to + status edges).
  • Responsivt: Kolonner stables vertikalt på smale paneler/mobil via @container og @media queries.
  • Fullskjerm-toggle: Via BlockShell-wrapperen (forelder-side wrapper KanbanTrait i BlockShell).
  • /board/[id]-ruten beholdes som frittstående fullside-visning for direktelenker.

Gjenstår

  • Reposisjonering ved dra innad i kolonne (sortert rekkefølge)
  • Redigeringsmodal for kort (tittel/beskrivelse)
  • Tildeling (assignee) UI
  • Fargekoder/labels på kort
  • AI-integrasjon: møtereferent → nye kort
  • Tilpassbare kolonnenavn

3. Datamodell

Ingen separate kanban-tabeller. Alt er noder og edges (kjerneprimitivene):

Board = collection-node (metadata.board: true, metadata.columns: [...])
Kort  = content-node
         + belongs_to-edge → board (metadata.position: REAL)
         + status-edge → board (metadata.value: "todo"|"in_progress"|"done")

Tilgang styres via node_access-matrisen. Brett er synlige for brukere med owner/admin/member_of-edge til board-noden.

4. API-endepunkter

Metode Sti Beskrivelse
GET /query/board?board_id=... Hent brett med kort, status og posisjon
POST /intentions/create_node Opprett kort (content-node)
POST /intentions/create_edge Koble kort til brett (belongs_to + status)
POST /intentions/update_edge Endre status ved drag-and-drop
POST /intentions/update_node Oppdater tittel/beskrivelse
POST /intentions/delete_node Slett kort (cascader edges)

5. Redaksjonell arbeidsflate (Editorial Board)

Kanban-mønsteret gjenbrukes for redaktørens arbeidsflate (/editorial/[id]), men med en viktig forskjell: den bruker submitted_to-edges i stedet for belongs_to + status-edges. Status lever direkte i submitted_to-edge-metadata.

Kolonner: Innkomne (pending), Under vurdering (in_review), Godkjent (approved), Planlagt (scheduled)

Planlagt-kolonnen: Når en artikkel dras til "Planlagt", åpnes en dialog for å sette publish_at i edge-metadata. Statusen i edge er fortsatt approved, men publish_at skiller planlagte fra godkjente.

Backend: GET /query/editorial_board?collection_id=... — henter alle noder med submitted_to-edge til samlingen, inkludert forfatterinfo.

Tilgang: Kun owner/admin av samlingen kan dra kort mellom kolonner (statusendring). Tilgang kontrollert i update_edge.

6. Brukes av

Konsept Bruk
Redaksjonen Episodeplanlegging — dra Temaer inn i Kjøreplanen
Redaksjonen Redaksjonell arbeidsflate — innsendinger gruppert på status
Møterommet AI-referenten foreslår nye kort basert på action points

6. Instruks for Claude Code

  • Alt er noder og edges — ingen separate kanban-tabeller.
  • Board er en collection-node med metadata.board: true.
  • Status er en status-edge (kort → board) med metadata.value.
  • Bruk native HTML5 Drag and Drop, unngå tunge biblioteker.
  • Sanntid via PG LISTEN/NOTIFY + WebSocket.
  • Tilgang styres via node_access-matrisen.