Ny feature-spec for universelle nodereferanser i Synops: - n:<id> syntaks for å linke til enhver node fra enhver kontekst - 🔗-knapp på alle noder for kopier-lim, n:-autocomplete i editor - Tilgangsprompt ved linking av privat node i delt kontekst (del som lesbar / behold privat / del utdrag) - Privacy-signalering: privat=🔒, delt=ren, delt+lenket=👁 - Inversert markering: privathet signaliseres, fravær=trygt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.6 KiB
Feature: Nodereferanser (n:-konvensjonen)
Konsept
Enhver node i Synops kan refereres fra enhver annen node via
n:<id>-syntaksen. Det er systemets interne lenkeformat — som
URL-er for webben, men for grafen. Referanser oppretter
mentions-edges og er traverserbare for bot og brukere med
tilgang.
Syntaks
n:d3eebc99 → UUID-prefix (8 tegn, unikt nok)
n:synops-transcribe → slug/title-match
#Skolepolitikk → eksisterende mention (topic-noder)
n: er den universelle varianten. # forblir en snarvei for
topics. Begge oppretter mentions-edges.
To veier inn
1. Kopier-lim (🔗-knappen)
Hver node har en lenke-knapp (🔗) i header/hover — universelt, overalt (kanban-kort, chat, kalender, work items, dagbok, alt).
Klikk 🔗 → clipboard: "n:d3eebc99"
→ Lim inn i chat/editor/anywhere
→ Systemet gjenkjenner, oppretter mentions-edge
2. Autocomplete
Skriv "n:" i editor/chat
→ Dropdown med nylige/relevante noder
→ Søkbart (som #-mentions, bare for alle noder)
→ Velg → settes inn som n:d3eebc99
Rendering
Raw: "Se n:d3eebc99 for detaljer"
Rendered: "Se [Forbedre lydkvalitet] for detaljer"
↑ klikkbar, hover viser node-kort
Hvis brukeren ikke har tilgang til noden:
Rendered: "Se [Privat node 🔒] for detaljer"
Edge-opprettelse
Ved parsing av n:<id> i content:
- Slå opp noden i PG
- Opprett
mentions-edge fra denne noden → referert node - Edge er ikke
system— synlig i grafvisning
Tilgangskontroll ved linking
Når en bruker limer inn en referanse til en privat node i en delt kontekst, må systemet håndtere tilgangsgapet.
Prompt ved privat node i delt kontekst
A limer inn n:d3eebc99 (sin private dagboknotis) i en samtale
→ Systemet sjekker: synlig for alle i konteksten?
→ Nei — noden er privat
→ A ser prompt:
┌──────────────────────────────────────────┐
│ Denne noden er privat. │
│ │
│ [Del som lesbar] │
│ → Deltakerne får lesetilgang │
│ │
│ [Behold privat] │
│ → Andre ser "Privat node 🔒" │
│ │
│ [Del utdrag] │
│ → Velg tekst som siteres inline │
│ → Originalen forblir privat │
└──────────────────────────────────────────┘
Tre valg
| Valg | Hva skjer | Edge |
|---|---|---|
| Del som lesbar | Deltakerne får reader-edge til noden |
reader per deltaker |
| Behold privat | Lenken vises, andre ser "Privat node 🔒" | Ingen ny edge |
| Del utdrag | Sitat inline, originalen privat | source_material med excerpt |
"Del utdrag" er universell overføring — innhold dras ut av en privat node som et sitat, ikke som originalen.
Trekk tilbake
Deling kan alltid angres: fjern reader-edges, noden går tilbake
til privat. Lenker i andres kontekst viser igjen "Privat node 🔒".
Privacy-signalering
Private noder markeres visuelt. Delte noder er rene — fravær av markering betyr "dette er ikke privat."
Visuell konvensjon
| Tilstand | Signal | Betydning |
|---|---|---|
| Privat (ingen delte edges) | 🔒 + subtil bakgrunnsfarge | "Bare du ser dette" |
| Delt (har reader/member-edges) | Ren, ingen markering | Normal tilstand |
| Delt + lenket (aktivt referert fra annen kontekst) | 👁 + "Delt med: ..." | "Andre ser dette via en lenke" |
Eksempel i dagbok
┌─────────────────────────────────┐
│ 🔒 Tanker om episoden i dag │ ← privat
├─────────────────────────────────┤
│ Notater fra møtet med Trond │ ← delt
├─────────────────────────────────┤
│ 🔒 Personlig refleksjon │ ← privat
├─────────────────────────────────┤
│ 👁 Lydkvalitet-problemet │ ← delt + lenket
│ "Delt med: #Redaksjonen" │
└─────────────────────────────────┘
Designprinsipp
De fleste systemer markerer det delte ("denne er offentlig!"). Synops markerer det private — slik at fravær av markering er den normale, trygge tilstanden. Du ser umiddelbart hva som er bare ditt, og du glemmer ikke at noe er delt.
Teknisk
Ingen ny datamodell. Ren frontend-logikk basert på eksisterende data:
visibility: hidden+ ingen delte edges → 🔒- Har
reader/member_of-edges fra andre → ren - Har edges + er
source_material-target fra annen node → 👁
Bot-oppførsel
Boten følger samme tilgangsregler:
- Kan bare se noder den har tilgang til
- Kan traversere
mentions-edges fran:-referanser - Hvis noen linker en node boten ikke kan se: "Jeg har ikke tilgang til den noden"
Bygger på
docs/primitiver/edges.md—mentions-edgedocs/retninger/bruker_ikke_workspace.md— visibility + tilgangsmatrisedocs/features/universell_overfoering.md— "del utdrag" er innholdstransferdocs/proposals/editor.md—#-mentions og autocomplete