synops/docs/features/notater.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.6 KiB

Feature: Notater (Scratchpad)

Filsti: docs/features/notater.md

1. Konsept

Et enkelt notatverktøy med automatisk lagring. Brukes som scratchpad i ulike kontekster — show notes, møtenotater, research-notater. Notater er nodes i kunnskapsgrafen og kan kobles til andre noder.

2. Status

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

Implementert

  • Migrering 0004_notes.sql: notes-tabell (FK→nodes)
  • Notater er nodes — tilgangsstyrt via node_access-matrise
  • Auto-save med 500ms debounce (visuell feedback: "Lagrer..."/"Lagret")
  • REST API: GET og PATCH (tittel + innhold)
  • PG polling-adapter med 10 sek intervall (tregere enn chat/kanban — notater endres sjeldnere)
  • NotesBlock.svelte: tittel-input + fritekst-textarea med auto-save
  • Polling pauses mens brukeren skriver (unngår overskriving av egne endringer)

Gjenstår — Fase 2

  • Markdown-editor (rich text med forhåndsvisning)
  • Versjonering / undo-historikk
  • Kobling til andre noder (temaer, episoder, aktører)
  • Flerbruker-redigering (conflict resolution)
  • SpacetimeDB-modul + hybrid-adapter
  • Eksport (Markdown, PDF)

3. Datamodell (implementert)

CREATE TABLE notes (
    id          UUID PRIMARY KEY REFERENCES nodes(id) ON DELETE CASCADE,
    parent_id   UUID NOT NULL REFERENCES nodes(id),
    title       TEXT NOT NULL DEFAULT '',
    content     TEXT NOT NULL DEFAULT '',
    created_by  TEXT REFERENCES users(authentik_id),
    created_at  TIMESTAMPTZ NOT NULL DEFAULT now(),
    updated_at  TIMESTAMPTZ NOT NULL DEFAULT now()
);

updated_at oppdateres automatisk ved PATCH og brukes til "Lagret [tidspunkt]"-visning.

4. API-endepunkter

Metode Sti Beskrivelse
GET /api/notes/[noteId] Hent notat
PATCH /api/notes/[noteId] Oppdater tittel og/eller innhold

5. Brukes av

Konsept Bruk
Redaksjonen (Sidelinja) Show notes for episoder
Foreningen Liberalistene Møtenotater
Møterommet (fremtidig) Scratchpad under møter

6. Auto-save-mønster

  • Bruker skriver → 500ms debounce → PATCH til server
  • Under lagring vises "Lagrer..." (gul)
  • Etter vellykket lagring vises "Lagret [dato]" (grå)
  • Polling (10 sek) henter siste versjon, men hopper over overskriving mens saving-flagget er satt

7. Instruks for Claude Code

  • Tilgang til notater styres via node_access-matrisen
  • Auto-save bruker debounce — ikke send PATCH ved hvert tastetrykk
  • updated_at brukes til UI-feedback, ikke til conflict resolution (ennå)
  • Sjekk docs/erfaringer/adapter_moenster.md for hybrid-strategi