synops/docs/concepts/selvdokumenterende_system.md
vegard b5aa5bb243 Fjern SpacetimeDB komplett (oppgave 22.4)
SpacetimeDB er nå helt fjernet fra Synops. Sanntid håndteres av
PG LISTEN/NOTIFY + WebSocket i portvokteren (maskinrommet).

Kode fjernet:
- spacetimedb/ Rust-modul og spacetime.json
- maskinrommet/src/stdb.rs (HTTP-klient for STDB-reducers)
- frontend module_bindings/ (23 auto-genererte filer)
- spacetimedb npm-avhengighet fra package.json
- scripts/test-sanntid.sh (testet STDB-flyt)

Infrastruktur:
- Docker-container stoppet og fjernet fra docker-compose.yml
- Caddy: fjernet /spacetime/* reverse proxy
- maskinrommet-env.sh: fjernet STDB_IP og SPACETIMEDB_*-variabler
- .env.example: fjernet SpacetimeDB-seksjoner

Dokumentasjon oppdatert:
- CLAUDE.md: stack, lagmodell, kjerneprinsipper, driftsmodell
- docs/arkitektur.md: skrivestien, lesestien, datalag, teknologivalg
- docs/retninger/datalaget.md: migrasjonshistorikk, status "fjernet"
- 37 andre docs oppdatert (features, concepts, infra, ops, retninger)
- Alle kode-kommentarer med STDB-referanser oppdatert

Verifisert: maskinrommet bygger og starter OK, frontend bygger OK,
helsesjekk returnerer 200. Caddy reloadet.
2026-03-18 13:39:09 +00:00

175 lines
6 KiB
Markdown

# Konsept: Selvdokumenterende system
**Filsti:** `docs/concepts/selvdokumenterende_system.md`
## 1. Konsept
Synops dokumenterer seg selv som noder i seg selv. Arkitektur,
features, CLI-verktøy, retninger og erfaringer er noder i grafen
— ikke bare markdown-filer i et repo. En offentlig synlig
Synops-node er roten, og alt systemrelevant henger under den
via edges.
## 2. Hvorfor
Markdown-filer i `docs/` har tre problemer:
1. **Rotner.** Koden endres, docs oppdateres ikke. Ingen kobling
mellom spec og implementasjon.
2. **Frakoblet.** Docs kan ikke lenkes fra chat, work items eller
andre noder via `n:`-referanser.
3. **Dobbeltvedlikehold.** Samme informasjon lever i docs-filer
OG i kode/database. Endring ett sted glemmes det andre.
Løsningen: docs er noder. De deltar i grafen, lenkes med
`n:`-referanser, traverseres av bot og brukere, og oppdateres
der de lever.
## 3. Synops-noden
Én rot-node som er inngangspunkt til alt systemrelevant:
```
Synops (collection, visibility: readable)
├── Synops CLI (collection)
│ ├── synops-transcribe (cli_tool)
│ ├── synops-render (cli_tool)
│ ├── synops-audio (cli_tool)
│ ├── synops-tasks (cli_tool)
│ ├── synops-snapshot (cli_tool)
│ └── ...
├── Synops Arkitektur (collection)
│ ├── Portvokteren (content)
│ ├── Datalaget (content)
│ ├── Noder og edges (content)
│ ├── Trait-systemet (content)
│ └── ...
├── Synops Features (collection)
│ ├── Nodereferanser (content)
│ ├── Kanban (content)
│ ├── Lydstudio (content)
│ ├── Universell overføring (content)
│ └── ...
├── Synops Retninger (collection)
│ ├── Unix-filosofi (content)
│ ├── Arbeidsflaten (content)
│ ├── Noder er sentrum (content)
│ └── ...
├── Arbeidstavlen (collection, kanban-trait)
│ └── (work_items)
└── Synops Erfaringer (collection)
├── SpacetimeDB-integrasjon (content, historisk)
├── Authentik OIDC (content)
└── ...
```
`visibility: readable` — alle autentiserte brukere kan se
systemdokumentasjonen. Skrivetilgang via `admin`-edge.
## 4. Hva dette gir
### For Claude
```bash
synops-context --node-id <synops-uuid>
→ Hele systemdokumentasjonen via grafen
→ Traverserer edges til CLI-verktøy, arkitektur, features
→ Alltid oppdatert — leser fra PG, ikke stale filer
```
### For ny utvikler
Åpner Synops-noden i web → navigerer alt via klikkbare
`n:`-referanser. Ingen "les CLAUDE.md, deretter docs/arkitektur.md,
deretter docs/retninger/README.md" — bare én node som rot.
### For CLAUDE.md
Krymper til:
```markdown
## Systemkontekst
Synops-noden er n:<uuid>. Start der.
Bruk `synops-context --node-id <uuid>` for full oversikt.
Resten av denne filen er fallback ved PG-nedetid.
```
CLAUDE.md beholder arkitektur-oversikten som fallback (jf.
`synops-snapshot`), men den autoritative kilden er grafen.
### For oppdateringer
Endre en feature-spec → oppdater noden. Alle `n:`-referanser
til den fra chat, work items og andre docs peker til oppdatert
versjon. Ingen stale lenker.
## 5. Innholdsformat
Dokumentasjonsnoder bruker `content` for ren tekst (søkbar)
og `metadata.document` for strukturert innhold (TipTap JSON).
Samme format som artikler og notater — redigerbart i editoren
på web, lesbart via CLI.
For lange spesifikasjoner: noden *er* dokumentet. Ingen separat
fil å vedlikeholde.
## 6. Edge-modell
| Edge | Source → Target | Betydning |
|------|----------------|-----------|
| `belongs_to` | child → Synops | Del av systemdokumentasjonen |
| `belongs_to` | cli_tool → Synops CLI | Verktøy i verktøykassen |
| `belongs_to` | feature → Synops Features | Feature-spec |
| `mentions` | work_item → feature | Arbeid relatert til feature |
| `mentions` | chat-melding → cli_tool | Diskusjon om verktøy |
| `source_material` | feature → retning | Feature bygger på retning |
## 7. Migrering fra docs/
### Fase 1: Seed fra markdown
Script leser `docs/`-filene, oppretter noder med innholdet,
bygger edge-strukturen. Deterministiske UUID-er (uuid5 fra
filsti) for idempotent kjøring.
### Fase 2: Dobbeltliv
Markdown-filer og noder lever parallelt. `synops-snapshot`
genererer markdown fra noder — docs-filene blir *output*, ikke
*input*.
### Fase 3: Noder er kilden
Docs-filer fjernes eller erstattes med genererte snapshots.
Redigering skjer i grafen. CLAUDE.md beholder kun
bootstrap-info og fallback.
## 8. Avgrensning
- **CLAUDE.md forsvinner ikke.** Den er bootstrap-loader for
Claude Code — lastes automatisk og må være en fil i repo.
Men den krymper til en peker + fallback.
- **Git-historikk bevares.** Markdown-filer i docs/ har verdifull
git-historikk. De slettes ikke — de fryses og erstattes av
genererte snapshots.
- **Ikke alt er noder.** Kode er kode (Rust, Svelte, SQL).
Bare dokumentasjon, spesifikasjoner og prosjektstyring
migreres til noder.
## 9. Utviklingsfaser
1. Opprett Synops rot-node og undersamlinger (CLI, Arkitektur,
Features, Retninger, Erfaringer).
2. Seed `cli_tool`-noder fra eksisterende verktøy.
3. Seed dokumentasjonsnoder fra `docs/`-filene.
4. Oppdater `synops-context` til å traversere Synops-noden.
5. Oppdater `synops-snapshot` til å generere docs/ fra noder.
6. Oppdater CLAUDE.md til minimal bootstrap + fallback.
## 10. Komponenter
| Feature | Rolle |
|---------|-------|
| Synops-noden | Rot for all systemdokumentasjon |
| `n:`-referanser | Lenking mellom docs, verktøy, work items |
| `synops-context` | CLI-traversering av dokumentasjonsgrafen |
| `synops-snapshot` | Genererer fallback-filer fra noder |
| Editoren (web) | Redigering av docs-noder i nettleseren |
| KanbanTrait | Arbeidstavlen som del av Synops-treet |