Spesifiser nodereferanser: n:-konvensjon, tilgangsprompt, privacy-signalering
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>
This commit is contained in:
parent
cee97c105f
commit
d532e048b1
1 changed files with 164 additions and 0 deletions
164
docs/features/nodereferanser.md
Normal file
164
docs/features/nodereferanser.md
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
# 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 fra `n:`-referanser
|
||||
- Hvis noen linker en node boten ikke kan se: "Jeg har ikke
|
||||
tilgang til den noden"
|
||||
|
||||
## Bygger på
|
||||
- `docs/primitiver/edges.md` — `mentions`-edge
|
||||
- `docs/retninger/bruker_ikke_workspace.md` — visibility + tilgangsmatrise
|
||||
- `docs/features/universell_overfoering.md` — "del utdrag" er innholdstransfer
|
||||
- `docs/proposals/editor.md` — `#`-mentions og autocomplete
|
||||
Loading…
Add table
Reference in a new issue