From d532e048b14d4fd322d076ab12104a07e9774256 Mon Sep 17 00:00:00 2001 From: vegard Date: Wed, 18 Mar 2026 10:50:59 +0000 Subject: [PATCH] Spesifiser nodereferanser: n:-konvensjon, tilgangsprompt, privacy-signalering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ny feature-spec for universelle nodereferanser i Synops: - n: 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) --- docs/features/nodereferanser.md | 164 ++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 docs/features/nodereferanser.md diff --git a/docs/features/nodereferanser.md b/docs/features/nodereferanser.md new file mode 100644 index 0000000..7ac2d8b --- /dev/null +++ b/docs/features/nodereferanser.md @@ -0,0 +1,164 @@ +# Feature: Nodereferanser (`n:`-konvensjonen) + +## Konsept + +Enhver node i Synops kan refereres fra enhver annen node via +`n:`-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:` 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