Fjern gjenværende v2-referanser, dokumenter editor og tekstlagring
Rydder opp siste «v2»-referanser i docs (status_quo, migration_safety, personlig_workspace, spacetimedb_integrasjon). Legger til editor-seksjon i universell_input.md (TipTap, presets, tekstlagring) og oppdaterer nodes.md med content/metadata.document-modellen. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
00bf5d27ce
commit
c1d3ad66a5
7 changed files with 8947 additions and 12 deletions
|
|
@ -150,7 +150,7 @@ PG-polling adapter (`pg.svelte.ts`) brukes kun når SpacetimeDB ikke er konfigur
|
||||||
## 8. Reducer-parameternavn — unngå underscore-prefix
|
## 8. Reducer-parameternavn — unngå underscore-prefix
|
||||||
|
|
||||||
> *Kodeeksemplene i denne seksjonen er fra v1 og bruker `workspace_id`-parametere.
|
> *Kodeeksemplene i denne seksjonen er fra v1 og bruker `workspace_id`-parametere.
|
||||||
> I v2 er workspace-modellen erstattet av noder og edges (se `docs/retninger/bruker_ikke_workspace.md`),
|
> Workspace-modellen er erstattet av noder og edges (se `docs/retninger/bruker_ikke_workspace.md`),
|
||||||
> men lærdommen om underscore-prefix gjelder generelt for alle SpacetimeDB-reducere.*
|
> men lærdommen om underscore-prefix gjelder generelt for alle SpacetimeDB-reducere.*
|
||||||
|
|
||||||
SpacetimeDB eksponerer Rust-parameternavn direkte i HTTP JSON API-et. Underscore-prefix (`_workspace_id`) blir til `_workspace_id` i JSON, ikke `workspace_id`:
|
SpacetimeDB eksponerer Rust-parameternavn direkte i HTTP JSON API-et. Underscore-prefix (`_workspace_id`) blir til `_workspace_id` i JSON, ikke `workspace_id`:
|
||||||
|
|
|
||||||
|
|
@ -62,27 +62,37 @@ navnet på en podcast.
|
||||||
- Chatmelding: `NULL` (har sjelden tittel)
|
- Chatmelding: `NULL` (har sjelden tittel)
|
||||||
|
|
||||||
### `content`
|
### `content`
|
||||||
Primært tekstinnhold. Det du leser, søker i, viser i detalj.
|
Ren tekst uten formatering. Brukes til fulltekstsøk og enkel
|
||||||
Blogginnhold, chatmeldinger, transkripsjoner.
|
visning. For rike dokumenter (formatert tekst med bilder) genereres
|
||||||
|
`content` automatisk fra `metadata.document` ved lagring.
|
||||||
|
|
||||||
- Bloggpost: hele artikkelen
|
- Bloggpost: teksten uten markup (generert fra `metadata.document`)
|
||||||
- Chatmelding: `'Hei, er du klar?'`
|
- Chatmelding: `'Hei, er du klar?'`
|
||||||
- Voice memo: `NULL` ved opprettelse, fylles etter transkribering
|
- Voice memo: `NULL` ved opprettelse, fylles etter transkribering
|
||||||
- Brukernode: `NULL`
|
- Brukernode: `NULL`
|
||||||
- CAS-node: `NULL` (binærdata lever på disk)
|
- CAS-node: `NULL` (binærdata lever på disk)
|
||||||
|
|
||||||
|
For formatert innhold: se `metadata.document` under metadata.
|
||||||
|
|
||||||
### `visibility`
|
### `visibility`
|
||||||
Default synlighet for alle uten eksplisitt edge.
|
Default synlighet for alle uten eksplisitt edge.
|
||||||
Se [noder er sentrum](../retninger/bruker_ikke_workspace.md)
|
Se [noder er sentrum](../retninger/bruker_ikke_workspace.md)
|
||||||
for full spesifikasjon av visibility-nivåer og traverseringsregelen.
|
for full spesifikasjon av visibility-nivåer og traverseringsregelen.
|
||||||
|
|
||||||
### `metadata`
|
### `metadata`
|
||||||
JSONB for alt typespesifikt som ikke er tittel eller tekstinnhold:
|
JSONB for alt typespesifikt som ikke er tittel eller ren tekst:
|
||||||
|
|
||||||
- Person: `{ "display_name": "Vegard", "preferences": { ... } }`
|
- Person: `{ "display_name": "Vegard", "preferences": { ... } }`
|
||||||
- CAS-node: `{ "cas_hash": "abc123", "mime": "audio/mp3", "size_bytes": 84000000 }`
|
- CAS-node: `{ "cas_hash": "abc123", "mime": "audio/mp3", "size_bytes": 84000000 }`
|
||||||
- Kommunikasjonsnode: `{ "started_at": "...", "ended_at": "..." }`
|
- Kommunikasjonsnode: `{ "started_at": "...", "ended_at": "..." }`
|
||||||
- Samlings-node: `{ "pruning_profile": "conservative", "theme": "dark" }`
|
- Samlings-node: `{ "pruning_profile": "conservative", "theme": "dark" }`
|
||||||
|
- Rikt dokument: `{ "document": { "type": "doc", "content": [...] } }`
|
||||||
|
|
||||||
|
`metadata.document` inneholder TipTap/ProseMirror JSON for formatert
|
||||||
|
innhold (overskrifter, bilder, blockquotes, etc.). Bilder refererer
|
||||||
|
til CAS-noder via `node_id`. For enkle meldinger (ren tekst) er
|
||||||
|
`document` null — `content` er alt som trengs. Se
|
||||||
|
[universell input](../retninger/universell_input.md) for detaljer.
|
||||||
|
|
||||||
### `created_at`
|
### `created_at`
|
||||||
Tidsstempel, automatisk.
|
Tidsstempel, automatisk.
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
# Forslag: Personlig workspace
|
# Forslag: Personlig workspace
|
||||||
|
|
||||||
> **Superseded (v2):** Dette forslaget er erstattet av retningen
|
> **Superseded:** Dette forslaget er erstattet av retningen
|
||||||
> "noder er sentrum" (se `docs/retninger/bruker_ikke_workspace.md`).
|
> "noder er sentrum" (se `docs/retninger/bruker_ikke_workspace.md`).
|
||||||
> I v2 finnes det ingen workspaces. Privat rom oppstår naturlig:
|
> Det finnes ingen workspaces. Privat rom oppstår naturlig:
|
||||||
> noder uten edges til andre brukere er ditt private rom. Personlig
|
> noder uten edges til andre brukere er ditt private rom. Personlig
|
||||||
> kanban, kalender og notater er bare noder du eier uten delte edges.
|
> kanban, kalender og notater er bare noder du eier uten delte edges.
|
||||||
> Dokumentet er bevart som historisk referanse.
|
> Dokumentet er bevart som historisk referanse.
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
> **Historisk dokument (v1).** Denne teksten beskriver tilstanden i v1 —
|
> **Historisk dokument (v1).** Denne teksten beskriver tilstanden i v1 —
|
||||||
> workspace-basert arkitektur, CRUD-mønster, fragmentert navigasjon.
|
> workspace-basert arkitektur, CRUD-mønster, fragmentert navigasjon.
|
||||||
> Den er bevart som referanse for å forstå utgangspunktet for v2-retningene
|
> Den er bevart som referanse for å forstå utgangspunktet for de vedtatte
|
||||||
> i `docs/retninger/`.
|
> retningene i `docs/retninger/`.
|
||||||
|
|
||||||
> En redaksjonell webapp med ambisiøse primitiver og tradisjonell overflate.
|
> En redaksjonell webapp med ambisiøse primitiver og tradisjonell overflate.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,80 @@ All UX-investering konsentreres ett sted. Én perfekt input-opplevelse
|
||||||
— responsiv, multimodal, med god AI-støtte — i stedet for ti
|
— responsiv, multimodal, med god AI-støtte — i stedet for ti
|
||||||
middelmådige spesialgrensesnitt.
|
middelmådige spesialgrensesnitt.
|
||||||
|
|
||||||
|
## Editoren
|
||||||
|
|
||||||
|
Input-komponenten er en TipTap-editor (ProseMirror-basert) som
|
||||||
|
konfigureres med ulike extensions basert på kontekst.
|
||||||
|
|
||||||
|
### Kontekst setter default, brukeren bestemmer
|
||||||
|
|
||||||
|
Konteksten (kommunikasjonsnoden du er i, visningen du bruker)
|
||||||
|
setter en *default* editor-konfigurasjon. Men brukeren kan alltid
|
||||||
|
overstyre — utvide til full editor eller forenkle. Ingen kunstig
|
||||||
|
grense mellom "chatmelding" og "artikkel."
|
||||||
|
|
||||||
|
Du *kan* skrive en gjennomformatert tekst med overskrifter, bilder
|
||||||
|
og blockquotes i chatten. Om du vil publisere den etterpå er det
|
||||||
|
bare å legge til en publiserings-edge. Innholdet er det samme.
|
||||||
|
|
||||||
|
Editoren husker brukerens valg per kontekst via preferanser på
|
||||||
|
brukernoden.
|
||||||
|
|
||||||
|
### Presets
|
||||||
|
|
||||||
|
| Kontekst | Default extensions | Eksempel |
|
||||||
|
|----------|-------------------|----------|
|
||||||
|
| Chat | Tekst, markdown, kodeblokker, lenker | Enkel melding |
|
||||||
|
| Artikkel/blogg | + overskrifter, bilder, embeds, blockquotes, tabeller | Publisert tekst |
|
||||||
|
| Show notes | + lister, tidskoder, lenker | Episodenotater |
|
||||||
|
| Kanban-kort | Tekst, sjekklister | Oppgavebeskrivelse |
|
||||||
|
|
||||||
|
Presets er bare default — brukeren kan utvide eller forenkle med
|
||||||
|
en knapp eller tastatursnarvei. Ikke en modebytte, bare at flere
|
||||||
|
verktøy blir tilgjengelig.
|
||||||
|
|
||||||
|
### Tekstlagring
|
||||||
|
|
||||||
|
Noden lagrer to representasjoner:
|
||||||
|
|
||||||
|
- `content TEXT` — ren tekst uten formatering, for fulltekstsøk
|
||||||
|
og enkel visning
|
||||||
|
- `metadata.document JSONB` — strukturert TipTap/ProseMirror-
|
||||||
|
dokument for rendering
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "doc",
|
||||||
|
"content": [
|
||||||
|
{ "type": "paragraph", "content": [
|
||||||
|
{ "type": "text", "text": "Her er en intro." }
|
||||||
|
]},
|
||||||
|
{ "type": "image", "attrs": {
|
||||||
|
"node_id": "uuid-av-cas-node", "alt": "Diagram"
|
||||||
|
}},
|
||||||
|
{ "type": "paragraph", "content": [
|
||||||
|
{ "type": "text", "text": "Teksten fortsetter." }
|
||||||
|
]}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`content` genereres automatisk fra dokumentet ved lagring — bare
|
||||||
|
teksten, uten markup. Editoren produserer begge.
|
||||||
|
|
||||||
|
For enkle meldinger (ren tekst uten formatering) er
|
||||||
|
`metadata.document` null — `content` er alt som trengs.
|
||||||
|
|
||||||
|
### Bilder og media i tekst
|
||||||
|
|
||||||
|
Bilder i dokumentet refererer til CAS-noder via `node_id`.
|
||||||
|
CAS-noden er en egen node med `has_media`-edge til innholdsnoden.
|
||||||
|
Dokumentstrukturen bestemmer *hvor* bildet plasseres i teksten.
|
||||||
|
|
||||||
|
Tekst er *på* noden. Binærfiler er *andre* noder koblet med edges.
|
||||||
|
Ren separasjon: tekst er innhold, binærfiler er vedlegg som kan
|
||||||
|
plasseres inline.
|
||||||
|
|
||||||
## Edges definerer alt
|
## Edges definerer alt
|
||||||
|
|
||||||
Hva en node "er" bestemmes utelukkende av edges:
|
Hva en node "er" bestemmes utelukkende av edges:
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
# Migration Safety Checklist
|
# Migration Safety Checklist
|
||||||
|
|
||||||
> **Merk (v2):** Denne sjekklisten er skrevet for v1-arkitekturen der RLS var
|
> **Merk:** Denne sjekklisten er skrevet for v1-arkitekturen der RLS var
|
||||||
> basert på `workspace_id`-kolonner og `SET app.current_workspace_id`. I v2 er
|
> basert på `workspace_id`-kolonner og `SET app.current_workspace_id`.
|
||||||
> workspace-modellen erstattet av en node-basert tilgangsmatrise (se
|
> Workspace-modellen er erstattet av en node-basert tilgangsmatrise (se
|
||||||
> `docs/retninger/bruker_ikke_workspace.md`). Sjekklisten må skrives om for
|
> `docs/retninger/bruker_ikke_workspace.md`). Sjekklisten må skrives om for
|
||||||
> det nye mønsteret: `node_access`-matrise, edge-basert tilgang, og
|
> det nye mønsteret: `node_access`-matrise, edge-basert tilgang, og
|
||||||
> RLS-policies som opererer på bruker→node-edges i stedet for workspace-scope.
|
> RLS-policies som opererer på bruker→node-edges i stedet for workspace-scope.
|
||||||
|
|
|
||||||
8851
scripts/synops.md
Normal file
8851
scripts/synops.md
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue