- 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>
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) medmetadata.value - Posisjon via
belongs_to-edgemetadata.position(REAL for midpoint-innsetting) - Backend:
POST /intentions/update_edgefor 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 medsource_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
@containerog@mediaqueries. - 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) medmetadata.value. - Bruk native HTML5 Drag and Drop, unngå tunge biblioteker.
- Sanntid via PG LISTEN/NOTIFY + WebSocket.
- Tilgang styres via
node_access-matrisen.