Spesifiser interaksjonsmodell: drag-and-drop som universell grammatikk
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) <noreply@anthropic.com>
This commit is contained in:
parent
b5aa5bb243
commit
e0988711d8
4 changed files with 223 additions and 0 deletions
|
|
@ -210,10 +210,32 @@ med dry-run. Historikk synlig.
|
||||||
| Edge | Source → Target | Betydning |
|
| Edge | Source → Target | Betydning |
|
||||||
|------|----------------|-----------|
|
|------|----------------|-----------|
|
||||||
| `belongs_to` | orchestration → collection | Tilhører denne samlingen |
|
| `belongs_to` | orchestration → collection | Tilhører denne samlingen |
|
||||||
|
| `observes` | orchestration → any node | Overvåker denne noden for trigger-events |
|
||||||
| `triggers` | orchestration → orchestration | Kaskade-kobling |
|
| `triggers` | orchestration → orchestration | Kaskade-kobling |
|
||||||
| `uses` | orchestration → cli_tool | Bruker dette verktøyet |
|
| `uses` | orchestration → cli_tool | Bruker dette verktøyet |
|
||||||
| `mentions` | orchestration → any | Refererer til denne noden |
|
| `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
|
## 10. Drømmemodus: brukeren skriver hva de vil
|
||||||
|
|
||||||
Brukeren begrenses ikke til kjente verktøy. De skriver fritt
|
Brukeren begrenses ikke til kjente verktøy. De skriver fritt
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ valideres i maskinrommet.
|
||||||
| `chapter` | Kapittelmarkør for episode | `{ "at": "00:05:23" }` |
|
| `chapter` | Kapittelmarkør for episode | `{ "at": "00:05:23" }` |
|
||||||
| `source_material` | Kildemateriale (avledet node → kilde) | `{ "context": "quoted", "excerpt": "..." }` |
|
| `source_material` | Kildemateriale (avledet node → kilde) | `{ "context": "quoted", "excerpt": "..." }` |
|
||||||
| `assigned_to` | Tildelt (work_item → person/agent) | — |
|
| `assigned_to` | Tildelt (work_item → person/agent) | — |
|
||||||
|
| `observes` | Overvåker (orchestration → target node) | — |
|
||||||
| `derived_from` | Prosessert versjon av (f.eks. lydstudio-output → original) | — |
|
| `derived_from` | Prosessert versjon av (f.eks. lydstudio-output → original) | — |
|
||||||
| `has_studio` | Studio-sesjon (sesjon → medienode) | — |
|
| `has_studio` | Studio-sesjon (sesjon → medienode) | — |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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. |
|
| [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. |
|
| [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. |
|
| [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
|
### Relaterte spesifikasjoner
|
||||||
|
|
||||||
|
|
|
||||||
199
docs/retninger/interaksjonsmodell.md
Normal file
199
docs/retninger/interaksjonsmodell.md
Normal file
|
|
@ -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
|
||||||
Loading…
Add table
Reference in a new issue