From e0988711d8510c91de2010d2114f168305f9bacc Mon Sep 17 00:00:00 2001 From: vegard Date: Wed, 18 Mar 2026 13:41:06 +0000 Subject: [PATCH] Spesifiser interaksjonsmodell: drag-and-drop som universell grammatikk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ny retning som formaliserer Synops sin interaksjonsfilosofi: - Inn=transformer, ut=skap nytt (to retninger) - Body=engang, header=vedvarende (to mål) - Konsistent overalt: AI, orkestrering, tema, lyd, kalender - Visuell feedback med to drop-soner (grønn=engang, blå=vedvarende) - Fire prinsipper: reversibilitet, konsistens, synlighet, gradvis dybde Også: observes-edge i orkestrering og edges.md for eksplisitt kobling mellom orkestrering og observerte noder. Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/concepts/orkestrering.md | 22 +++ docs/primitiver/edges.md | 1 + docs/retninger/README.md | 1 + docs/retninger/interaksjonsmodell.md | 199 +++++++++++++++++++++++++++ 4 files changed, 223 insertions(+) create mode 100644 docs/retninger/interaksjonsmodell.md diff --git a/docs/concepts/orkestrering.md b/docs/concepts/orkestrering.md index e028059..c4aa660 100644 --- a/docs/concepts/orkestrering.md +++ b/docs/concepts/orkestrering.md @@ -210,10 +210,32 @@ med dry-run. Historikk synlig. | Edge | Source → Target | Betydning | |------|----------------|-----------| | `belongs_to` | orchestration → collection | Tilhører denne samlingen | +| `observes` | orchestration → any node | Overvåker denne noden for trigger-events | | `triggers` | orchestration → orchestration | Kaskade-kobling | | `uses` | orchestration → cli_tool | Bruker dette verktøyet | | `mentions` | orchestration → any | Refererer til denne noden | +### `observes`-edge: eksplisitt kobling + +Orkestreringen peker på det den observerer: + +``` +"Auto-clip URL-er" (orchestration) + ──observes──→ #Redaksjonen (communication) + ──observes──→ #Research (communication) +``` + +Legg til `observes`-edge → aktivert for den noden. +Fjern edge → deaktivert. Samme orkestrering kan observere mange noder. + +### Implisitt vs eksplisitt + +- **`observes`-edge:** Eksplisitt. "Denne orkestreringen overvåker + denne noden." Opprettet via drag-and-drop (se § interaksjonsmodell). +- **Trigger-betingelser:** Implisitt. "Overvåk alt som matcher." +- `observes` overtrumfer: fjernet `observes`-edge betyr "ikke her", + selv om betingelsene matcher. Brukeren har kontroll. + ## 10. Drømmemodus: brukeren skriver hva de vil Brukeren begrenses ikke til kjente verktøy. De skriver fritt diff --git a/docs/primitiver/edges.md b/docs/primitiver/edges.md index f524100..e4917df 100644 --- a/docs/primitiver/edges.md +++ b/docs/primitiver/edges.md @@ -75,6 +75,7 @@ valideres i maskinrommet. | `chapter` | Kapittelmarkør for episode | `{ "at": "00:05:23" }` | | `source_material` | Kildemateriale (avledet node → kilde) | `{ "context": "quoted", "excerpt": "..." }` | | `assigned_to` | Tildelt (work_item → person/agent) | — | +| `observes` | Overvåker (orchestration → target node) | — | | `derived_from` | Prosessert versjon av (f.eks. lydstudio-output → original) | — | | `has_studio` | Studio-sesjon (sesjon → medienode) | — | diff --git a/docs/retninger/README.md b/docs/retninger/README.md index c04be1a..334cdd9 100644 --- a/docs/retninger/README.md +++ b/docs/retninger/README.md @@ -29,6 +29,7 @@ andre dokumenter. En retning kan også forkastes eller parkeres. | [Datalaget](datalaget.md) | **Revidert** | PG er eneste datakilde. Sanntid via LISTEN/NOTIFY + WebSocket. CAS for binærdata, AGE ved behov. | | [Arbeidsflaten](arbeidsflaten.md) | **Besluttet** | Spatial canvas med verktøy-paneler. Drag-and-drop skaper nye noder med edges. | | [Unix-filosofi](unix_filosofi.md) | **Besluttet** | Maskinrommet orkestrerer, CLI-verktøy gjør jobben. Claude deler verktøykasse. | +| [Interaksjonsmodell](interaksjonsmodell.md) | **Besluttet** | Drag-and-drop som grammatikk. Inn=transformer, ut=skap nytt. Body=engang, header=vedvarende. | ### Relaterte spesifikasjoner diff --git a/docs/retninger/interaksjonsmodell.md b/docs/retninger/interaksjonsmodell.md new file mode 100644 index 0000000..a5b86f0 --- /dev/null +++ b/docs/retninger/interaksjonsmodell.md @@ -0,0 +1,199 @@ +# Interaksjonsmodell — drag-and-drop som grammatikk + +**Status: Besluttet.** + +> Drag-and-drop er Synops sitt universelle verb. Hva som skjer +> bestemmes av hva du drar, hva du slipper på, og hvor du slipper. +> To retninger, to mål. Konsistent overalt. + +## Observasjon + +Synops har mange verktøy: AI-presets, orkestreringer, editorer, +lydstudio, kanban. De interagerer alle med noder. Men interaksjonen +følger alltid samme mønster — og det mønsteret bør være så +intuitivt at det ikke trenger forklaring. + +## Grammatikken + +Drag-and-drop er en setning: + +- **Subjekt:** det du drar +- **Objekt:** det du slipper på +- **Verb:** bestemt av *hvor* du slipper + +### To retninger + +| Retning | Hva skjer | +|---------|-----------| +| **Inn** (verktøy → node) | Verktøyet virker *på* noden | +| **Ut** (node → verktøy) | Noden sendes *gjennom* verktøyet | + +**Inn** = transformer. **Ut** = skap noe nytt. + +### To mål + +| Mål | Hva endres | +|-----|-----------| +| **Innhold** (body) | Denne ene tingen | +| **Container** (header) | Alle ting i denne containeren | + +**Body** = engangsakjson. **Header** = vedvarende oppførsel. + +### Matrisen + +``` + Mål: innhold (body) Mål: container (header) + ───────────────── ────────────────────── +Inn (verktøy→node) Transformer denne Transformer oppførselen +Ut (node→verktøy) Skap noe nytt — +``` + +## Eksempler + +### AI-preset + +| Handling | Resultat | Edge | +|----------|---------|------| +| AI-preset → chatboble | Prosesser den meldingen | `derived_from` | +| AI-preset → chat-header | Prosesser alle meldinger heretter | `observes` | +| Chatboble → AI-preset | Ny node med AI-output | `source_material` | + +### Orkestrering + +| Handling | Resultat | Edge | +|----------|---------|------| +| Orkestrering → chatboble | Kjør på den meldingen | `derived_from` | +| Orkestrering → chat-header | Aktiver automatisering for chatten | `observes` | +| Chatboble → orkestrering | Ny kjøring med boblen som input | `source_material` | + +### Tema (publisering) + +| Handling | Resultat | Edge | +|----------|---------|------| +| Tema → artikkel | Style denne artikkelen | oppdater metadata | +| Tema → samling-header | Style alle artikler i samlingen | `uses` | + +### Lydfil + +| Handling | Resultat | Edge | +|----------|---------|------| +| Lydfil → lydstudio | Åpne filen i studio | — (navigasjon) | +| Lydfil → chat | Del lydfilen i samtalen | `has_media` | +| Chat-melding → lydstudio | Ny studio-sesjon med meldingen som kilde | `source_material` | + +### Kalender + +| Handling | Resultat | Edge | +|----------|---------|------| +| Node → kalender-slot | Planlegg noden | `scheduled` | +| Kalender-event → kanban | Oppgave fra kalenderhendelse | `source_material` | + +## Visuell feedback + +Brukeren må se hva som skjer *før* de slipper. To distinkte +drop-soner med ulik visuell respons: + +``` +Drar orkestrering mot chat: + + ┌─ #Redaksjonen ────── [header lyser opp: blå] ──┐ + │ "Slipp her for å aktivere automatisering" │ + │ │ + │ Melding 1 │ + │ Melding 2 [body lyser opp: grønn] │ + │ Melding 3 "Slipp her for å kjøre én gang"│ + └─────────────────────────────────────────────────┘ +``` + +### Fargekoder + +| Drop-sone | Farge | Betydning | +|-----------|-------|-----------| +| Body (innhold) | Grønn | Engangsaksjoner, trygt | +| Header (container) | Blå | Vedvarende endring, mer permanent | +| Inkompatibel | Rød/dimmet | Kan ikke slippe her | + +### Inkompatibilitet + +Ikke alt kan dras overalt. Kompatibilitetsmatrisen +(se `docs/features/universell_overfoering.md`) bestemmer +hva som er lovlig. Ved inkompatibilitet: + +- Drop-sonen dimmes +- Kort forklaring vises: "Lydfiler kan ikke dras til kalender" +- Ingen aksjon ved slipp + +## Edge-typer fra interaksjon + +| Interaksjon | Edge | Varighet | +|-------------|------|---------| +| Verktøy → innhold | `derived_from` | Permanent (transformasjon logges) | +| Innhold → verktøy | `source_material` | Permanent (proveniens) | +| Verktøy → header | `observes` / `uses` | Vedvarende (fjernbar) | +| Innhold → container | `belongs_to` | Vedvarende (flyttbar) | +| Innhold → tidslinje | `scheduled` | Vedvarende (fjernbar) | + +Alle edges er synlige i grafen og kan fjernes. Ingen skjulte +koblinger. + +## Prinsippet om reversibilitet + +Enhver drag-and-drop-handling er reverserbar: + +- **Engangstransformasjon:** Original bevart som revisjon. + "Vis forrige versjon" tilgjengelig. +- **Vedvarende kobling:** Fjern edgen. Høyreklikk → "Fjern + automatisering" / "Fjern kobling". +- **Ny node:** Slett noden. Source_material-edge forsvinner. + +Brukeren skal aldri føle at de kan gjøre noe uopprettelig +ved å dra feil. + +## Prinsippet om konsistens + +Samme handling gir alltid samme type resultat, uavhengig av +hvilke verktøy som er involvert: + +- **Inn + body = transformer** — alltid, overalt +- **Inn + header = endre oppførsel** — alltid, overalt +- **Ut = ny node** — alltid, overalt + +Ingen spesialtilfeller. Ingen "dette verktøyet fungerer +annerledes". Brukeren lærer mønsteret én gang. + +## Prinsippet om synlighet + +Brukeren ser alltid: +- **Hva som er koblet:** `observes`- og `uses`-edges vises + diskret i headeren (små ikoner for aktive automatiseringer) +- **Hva som skjedde:** Transformasjoner logges med + `derived_from`-edge, synlig i node-historikk +- **Hva som er mulig:** Drop-soner lyser opp med forklaring + +Ingen usynlig magi. Systemet er transparent. + +## Prinsippet om gradvis dybde + +Overflaten er enkel: +- Dra ting rundt. Slipp dem på andre ting. Se hva som skjer. + +Dybden er tilgjengelig: +- Se edges i grafvisning +- Konfigurer orkestreringer med fritekst +- Bygg kaskader mellom automatiseringer + +Men du trenger aldri dybden for å bruke systemet. Det bare +*fungerer* når du drar og slipper. + +## Forhold til andre retninger + +- [Arbeidsflaten](arbeidsflaten.md) — spatial canvas der + drag-and-drop skjer +- [Universell input og mottak](universell_input.md) — nodene + som dras og slippes +- [Unix-filosofi](unix_filosofi.md) — verktøyene som utfører + transformasjonene +- `docs/features/universell_overfoering.md` — kompatibilitets- + matrise og transfer-service +- `docs/concepts/orkestrering.md` — `observes`-edge fra + header-drop