synops/docs/concepts/kunnskapsgrafen.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

3.2 KiB

Konsept: Kunnskapsgrafen (Utforsking og redigering)

Filsti: docs/concepts/kunnskapsgrafen.md

1. Konsept

Kunnskapsgrafen er Sidelinjas kjerne — et levende nettverk av Temaer, Aktører, Faktoider, Episoder og Segmenter. Inspirert av Logseq og Obsidian bygger den seg opp organisk gjennom daglig bruk og skaper "serendipity" (lykketreff) i research-fasen ved å synliggjøre uventede forbindelser.

2. Brukeropplevelse

2.1 Organisk vekst

Grafen vokser gjennom daglig bruk av Sidelinja:

  1. Chat-meldinger med #-tags oppretter automatisk MENTIONS-relasjoner i grafen.
  2. AI-behandling i editoren trekker ut aktører og faktoider fra innlimt tekst (se docs/proposals/editor.md).
  3. Podcastfabrikken kobler episode-segmenter til temaer og aktører.
  4. Møtereferater trådes automatisk mot temaer og aktører av AI-referenten.

2.2 Visuell utforsking

En interaktiv graf-visning (se docs/features/visuell_graf.md) lar redaksjonen:

  • Navigere nettverket rundt en Aktør eller et Tema (2-3 ledd ut)
  • Dra streker mellom noder for å opprette nye relasjoner
  • Filtrere etter nodetype, relasjonstype, tidsperiode eller fritekst
  • Bruke PART_OF-hierarkier for fleksibel prosjektorganisering uten stive mappestrukturer

2.3 Søk

Full-text search på norsk (to_tsvector('norwegian', ...)) gjør det mulig å søke på tvers av alle episoder, segmenter og faktoider.

3. Komponenter

Feature Rolle i Kunnskapsgrafen
Kunnskapsgraf datamodell Nodes/edges i PostgreSQL (se docs/features/kunnskapsgraf_og_relasjoner.md)
Visuell graf Interaktiv D3.js/Vis.js-visning (se docs/features/visuell_graf.md)
Chat Mentions (#/@) oppretter edges automatisk (se docs/features/chat.md)
Editor (AI-knapp) Trekker ut aktører/faktoider til grafen (se docs/proposals/editor.md)

4. Entity Resolution (Merge Entities)

Grafen vokser organisk via #-mentions, men dette skaper uunngåelig fragmentering: #Jonas, #Støre og #Jonas Gahr Støre ender som tre separate noder. Uten en strategi for sammenslåing dør serendipity-effekten — faktoidene spres over duplikater som AI-en tror er ulike konsepter.

Løsning: Merge Entities admin-verktøy (Lag 2)

  1. Velg autoritativ node (Node A) og duplikat(er) (Node B, C, ...)
  2. Flytt alle graph_edges som peker på Node B → Node A (UPDATE graph_edges SET source_id/target_id = A WHERE ... = B)
  3. Flytt alle messages-mentions som refererer til Node B → Node A
  4. Legg til name fra Node B som alias i entities.aliases på Node A
  5. Slett Node B (DELETE FROM nodes → cascader)

aliases-arrayet i entities-tabellen finnes allerede og er indeksert med GIN — autocomplete søker i både name og aliases, noe som forebygger fremtidige duplikater.

Forebygging: Autocomplete bør vise eksisterende entiteter med matchende aliases før brukeren oppretter nye. "Mente du #Jonas Gahr Støre?" ved skriving av #Støre.

5. Datamodell

Den tekniske datamodellen (nodes-supertabell, graph_edges, detailtabeller, deterministiske UUIDs, tilgangsstyring via node_access) er dokumentert i docs/features/kunnskapsgraf_og_relasjoner.md.