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>
52 lines
3.2 KiB
Markdown
52 lines
3.2 KiB
Markdown
# 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`.
|