synops/docs/features/notater.md
vegard b5aa5bb243 Fjern SpacetimeDB komplett (oppgave 22.4)
SpacetimeDB er nå helt fjernet fra Synops. Sanntid håndteres av
PG LISTEN/NOTIFY + WebSocket i portvokteren (maskinrommet).

Kode fjernet:
- spacetimedb/ Rust-modul og spacetime.json
- maskinrommet/src/stdb.rs (HTTP-klient for STDB-reducers)
- frontend module_bindings/ (23 auto-genererte filer)
- spacetimedb npm-avhengighet fra package.json
- scripts/test-sanntid.sh (testet STDB-flyt)

Infrastruktur:
- Docker-container stoppet og fjernet fra docker-compose.yml
- Caddy: fjernet /spacetime/* reverse proxy
- maskinrommet-env.sh: fjernet STDB_IP og SPACETIMEDB_*-variabler
- .env.example: fjernet SpacetimeDB-seksjoner

Dokumentasjon oppdatert:
- CLAUDE.md: stack, lagmodell, kjerneprinsipper, driftsmodell
- docs/arkitektur.md: skrivestien, lesestien, datalag, teknologivalg
- docs/retninger/datalaget.md: migrasjonshistorikk, status "fjernet"
- 37 andre docs oppdatert (features, concepts, infra, ops, retninger)
- Alle kode-kommentarer med STDB-referanser oppdatert

Verifisert: maskinrommet bygger og starter OK, frontend bygger OK,
helsesjekk returnerer 200. Caddy reloadet.
2026-03-18 13:39:09 +00:00

2.5 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 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)
  • 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