# 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) ├── 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 → 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:. Start der. Bruk `synops-context --node-id ` 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 |