Commit graph

439 commits

Author SHA1 Message Date
e8a1a80652 Valider fase 22: STDB-migrering fullført, ingen rester i aktiv kode
Validering av fase 22 (SpacetimeDB-migrering) bekrefter:

1. WebSocket-sanntid fungerer:
   - maskinrommet lytter på PG NOTIFY-kanaler (node_changed, edge_changed,
     access_changed, mixer_channel_changed)
   - Enrichment av events med fulle rader fra PG
   - Broadcast via tokio::broadcast til WebSocket-klienter
   - Tilgangskontroll filtrerer events per bruker
   - Frontend kobler til /ws med JWT, mottar initial_sync + inkrementelle events

2. PG LISTEN/NOTIFY-triggere verifisert i database:
   - 4 notify-funksjoner: notify_node_change, notify_edge_change,
     notify_access_change, notify_mixer_channel_change
   - 4 triggere: nodes_notify, edges_notify, node_access_notify,
     mixer_channels_notify

3. Ingen STDB-rester i aktiv kode/konfig:
   - maskinrommet/src/: rent
   - Cargo.toml: ingen spacetimedb-avhengigheter
   - docker-compose.yml: ingen spacetimedb-tjeneste
   - Caddyfile: ingen spacetimedb-proxy
   - Eneste funn: frontend/src/lib/spacetime/ katalognavn —
     omdøpt til frontend/src/lib/realtime/ (32 filer oppdatert)
   - Historiske referanser i docs/arkiv og scripts/synops.md er OK
2026-03-18 16:31:16 +00:00
0dc014f4ab Legg til fase 28: synops-ai med admin-rutingskontroll + manglende CLI
7 oppgaver:
- synops-ai: lettvekts LLM-kall via LiteLLM (ikke claude -p)
- AI-rutingskontroll i admin: modell per kontekst, endres uten redeploy
- Kostnadstak per bruker/samling med budsjett-sjekk
- synops-notify, synops-validate, synops-backup, synops-health

Nøkkelprinsipp: admin styrer hvilken modell som brukes til hva.
synops-ai uten --model bruker ai_job_routing-tabellen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 16:27:04 +00:00
7a7eba5264 Starter oppgave 23.11 2026-03-18 16:25:24 +00:00
f4cb834ad4 Valider fase 21: alle 15 CLI-verktøy bestått
Validering:
- Alle 15 synops-* verktøy kompilerer uten feil
- --help fungerer for alle verktøy med norske beskrivelser
- Feilhåndtering: exit(1) + stderr for alle feiltilfeller
- JSON-output validert (prune, render, node --format json)
- Markdown-output validert (search, context, node --format md)
- XML-output validert (rss)
- synops-common brukes av 14/15 verktøy (db, cas, logging)
- synops-tasks bruker ikke synops-common (som dokumentert)

Funn fikset:
- Installerte manglende binaries i /usr/local/bin: synops-tts,
  synops-audio, synops-render (maskinrommet dispatcher fant dem ikke)

Notat: --payload-json (generisk dispatch) er spesifisert i
docs/retninger/unix_filosofi.md men ikke implementert — verktøyene
bruker individuelle CLI-args, og maskinrommet mapper payload→args
i dedikerte dispatcher-moduler. Fungerer korrekt som det er.
2026-03-18 16:21:33 +00:00
5b3cc1c400 Legg til fase 27: tankekart — radial grafvisning
3 oppgaver: MindMap Svelte-komponent med radial layout,
BlockShell-panel, og mindmap-trait for samlinger.
Feature-spec i docs/features/tankekart.md.

Ren frontend-visning av eksisterende grafdata — ingen ny backend.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 16:19:34 +00:00
74ad7d7011 Legg til fase 26: epost — send/motta via synops.no
7 oppgaver: username i auth_identities, msmtp utgående,
MX-records, Postfix mottak, synops-mail CLI med "Kjære
vaktmester"-filter, domene-alias (alle domener → samme bruker),
utgående varsler.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 16:15:26 +00:00
0d1c79cd85 Starter oppgave 23.10 2026-03-18 16:10:53 +00:00
15dd23b873 Valider fase 19–20: arbeidsflaten + universell overføring bestått
Fikser funnet under validering:
- Gjør collection-prop valgfri i alle trait-komponenter slik at de
  fungerer i personlig arbeidsflate uten collection-kontekst
- Legger til null-guards for collection.id i alle derived-blokker
  og funksjoner som oppretter edges
- Fjerner microsSinceUnixEpoch-rester fra STDB-migrasjonen —
  createdAt er nå et tall (Unix µs), ikke et objekt
- Retter saveTimeout-lekkasje i collection-sida: timer ryddes nå
  ved navigasjon mellom samlinger
- Fikser TypeScript-feil i editorial (number vs string, uoppnåelig
  'scheduled'-sammenligning), studio (bigint vs number),
  RecordingTrait ($state-generics)
- Typefeil redusert fra 55 → 4 (gjenværende er pre-eksisterende
  i mixer.ts/livekit.ts, ikke fase 19-20)

Validert: Canvas pan/zoom, BlockShell, layout-persistering,
snarveier, transfer service, alle panelreworks. Frontend bygger OK.
2026-03-18 16:03:17 +00:00
7b601ead1f Orkestrering: målet er alltid script — AI er overgang, ikke driftsmodus
Nytt prinsipp: enhver orkestrering skal bli et deklarativt script.
Hvis det ikke er mulig, lag bedre verktøy eller stram opp spec.
AI som permanent feilhåndtering er et tegn på at noe er galt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 16:00:37 +00:00
fd0b75ee13 Orkestrering: tre nivåer (script/fritekst/drøm) + rename portvokter→vaktmester
Orkestrering restrukturert med deklarativt script som primærnivå:
- Nivå 1: eksakte CLI-kall med {event.*}-variabler, ingen AI
- Nivå 2: fritekst tolket av bot med function calling
- Nivå 3: drømmemodus — bruker skriver fritt, mangler→work_items
- Auto-eskalering: script→bot ved uventet feil

Rename portvokter→vaktmester i alle docs — bedre navn for en
tjeneste som gjør ting, ikke bare sjekker legitimasjon.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:59:29 +00:00
68f7b10e9b Starter oppgave 23.9 2026-03-18 15:50:29 +00:00
c09f8dbdff Valider fase 17–18: lydstudio + AI-verktøy bestått
Validert alle aspekter av fase 17 (lydstudio-utbedring) og fase 18 (AI-verktøy):

Fase 17 — Audio Studio:
- FFmpeg-parametervalidering: alle numeriske verdier begrenset med sikre grenser
- Fade/silence-logikk: negativ fade-out start clamped til 0, margin ≤ halv regionvarighet
- Filter-interpolering: format!() macro, ingen shell-injeksjon mulig
- 12/12 enhetstester bestått
- Frontend: responsivt layout, min/max på alle tallfelter
- Job-polling: ryddes opp ved navigering, 5 forsøk maks, 5 min timeout
- JSON.parse wrapped i try/catch overalt

Fase 18 — AI-verktøy:
- Direction-logikk korrekt: tool_to_node lagrer revisjon + oppdaterer, node_to_tool lager ny node + derived_from + processed_by edges
- Modellprofil-mapping: flash → sidelinja/rutine, standard → sidelinja/resonering
- AI-preset validering: 6 påkrevde felter, custom presets låst til flash/custom
- 8 standard-presets seedet korrekt
- Brukslogging: dual logging til ai_usage_log + resource_usage_log
- Drag-and-drop: komplett kompatibilitetsmatrise, visuell feedback

Ingen endringer nødvendig — implementeringen er solid.
2026-03-18 15:49:31 +00:00
3be27e454e Starter oppgave 23.8 2026-03-18 15:45:34 +00:00
b5f419486a Valider fase 15–16: fiks minnelekkasje, skrivefeil + marker ferdig
- SoundPadGrid: spor setTimeout-IDer og rydd opp ved komponent-destroy
  (unngår oppdatering av tilstand etter unmount)
- Admin usage: fiks skrivefeil "1 ar" → "1 år"
- tasks.md: marker 23.7 som fullført
2026-03-18 15:42:34 +00:00
1e34c3c67a Valider fase 15–16: sikkerhet, konsistens og atomisk toggle
Tre fikser funnet under validering:

1. SIKKERHET: Admin-endepunkter manglet autorisasjonssjekk.
   Alle /admin/*-endepunkter brukte kun AuthUser (autentisert),
   ikke admin-rolle. Ny AdminUser-extractor sjekker owner/admin-edge
   til samling — returnerer 403 Forbidden for ikke-admins.
   Berører: maintenance, jobs, resources, health, ai, usage.

2. Race condition i toggle_effect: les-modifiser-skriv uten transaksjon
   på active_effects JSON. Erstattet med atomisk PG jsonb-operasjon.

3. Manglende updated_by i set_gain, set_mute, set_mixer_role, toggle_effect.
   Nå spores hvem som endret mixer-tilstanden.
2026-03-18 15:39:30 +00:00
b7e7fbf45b Starter oppgave 23.7 2026-03-18 15:30:47 +00:00
e25b5a11ef Valider fase 13–14: fiks size-inkonsistens, sikkerhet og konsistens i traits + publisering
Feil funnet og fikset:

1. truncate() UTF-8-panikkfeil: Brukte byte-indeksering s[..max] som
   panikker på flerbyte-tegn (æ, ø, å). Byttet til char_indices().

2. VALID_TRAITS manglet 'mixer' og 'ai_tool': Dokumentert i
   docs/primitiver/traits.md men avvist av backend-validering.

3. Planlagte artikler synlige før publish_at: serve_article og alle
   listevisninger (forside, arkiv, kategori, søk) eksponerte artikler
   med fremtidig publish_at. Lagt til tidsfiltere i alle spørringer.

4. A/B klikk-attribusjon logget alle varianter: serve_article logget
   klikk for ALLE aktive varianter ved direkte artikkelbesøk, ikke
   bare den viste. Fjernet feilaktig attribusjon — klikk logges kun
   via track_click-endepunktet med spesifikk variant-parameter.

5. JSON-LD XSS via </script>: serde_json escaper ikke </script>-
   sekvenser, så brukertitler kunne bryte ut av <script>-blokken.
   Lagt til .replace("</", "<\\/") etter serialisering.

6. Hardkodet farge i search.html: Brukte rgba(233,69,96,0.1) i stedet
   for tema-variabel. Byttet til color-mix() med --color-accent.

Nye tester: truncate med UTF-8, truncate kort streng, JSON-LD XSS-escape.
2026-03-18 15:27:38 +00:00
cebda9f3e8 Starter oppgave 23.6 2026-03-18 15:16:00 +00:00
67bc564f92 Benchmark: lås til git-ref, advar ved dirty tree
Alle modeller testes mot nøyaktig samme kildekode.
Ref og tidsstempel logges i CSV-header.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:15:36 +00:00
a836be6992 Valider fase 11: fiks size-inkonsistens og UTF-8-trunkering i RSS
Fase 11 (produksjon) validert — LiveKit, pruning og podcast-RSS:

- rss.rs + synops-rss: Les filstørrelse fra både 'size_bytes' (intentions)
  og 'size' (publishing) med COALESCE — forhindrer manglende enclosure-
  størrelse i podcast-feeds avhengig av opplastingsmetode.
- pruning.rs + synops-prune: Samme COALESCE-fix for konsistent size-tracking.
- rss.rs + synops-rss: Fiks truncate_description til å bruke char-indeksering
  istedenfor byte-indeksering — forhindrer panic på norsk tekst (å, ø, æ).

LiveKit kjører i Docker (healthy), token-generering via join_communication,
pruning-loop aktiv, RSS-endepunkt returnerer korrekt 404 for ukjent slug.
Alle 61 maskinrommet-tester bestått.
2026-03-18 15:15:08 +00:00
2ccbebe222 Starter oppgave 23.5 2026-03-18 15:10:25 +00:00
382f93132f Valider fase 9–10: fiks typefeil, konsistens og feilhåndtering
Fase 9 (visninger):
- graph: fiks TypeScript-feil (string|undefined → string|null)
- kanban board: les kolonner fra metadata.traits.kanban.columns
  (konsistent med KanbanTrait), behold fallback til metadata.columns
- dagbok: fiks createdAt-type (number, ikke BigInt med microsSinceUnixEpoch)

Fase 10 (AI):
- summarize.rs: refaktorer til cli_dispatch helper (DRY, konsistent
  med ai_edges.rs og tts.rs)
- ai_process.rs: feil tidlig hvis LITELLM_MASTER_KEY mangler
  (var unwrap_or_default → tom streng → forvirrende 401)

Alle 61 maskinrommet-tester bestått, alle CLI-verktøy kompilerer.
LiteLLM kjører med riktig modellruting (rutine/resonering).
2026-03-18 15:09:03 +00:00
3ae46a05eb Starter oppgave 23.4 2026-03-18 15:00:28 +00:00
43f3976a30 Valider fase 5–8: alle tester bestått, ingen feil funnet
Fase 5 (kommunikasjon): chat-loop fungerer, belongs_to-edges
opprettes automatisk ved context_id, resolve_context_identity
håndterer aliaser, propagate_belongs_to_access gir deltakere
tilgang til meldinger. WebSocket-sanntid verifisert.

Fase 6 (CAS): SHA-256 hashing korrekt, deduplisering fungerer,
filnavn = hash i disk-struktur ({root}/{h[0:2]}/{h[2:4]}/{hash}).
Serving med riktige cache-headers (immutable). 2 filer verifisert.

Fase 7 (lyd): Whisper-tjeneste aktiv, transcription_segments-tabell
med 8 kolonner og 4 indekser. SRT-parsing/eksport testet (5+3 tester).
synops-transcribe CLI bygger og kjører. 61 maskinrommet-tester bestått.

Fase 8 (aliaser): current_node_alias_ids() og RLS-policies er
alias-aware. create_alias-handler oppretter person-node (hidden)
med system=true alias-edge. Ingen aliaser i bruk ennå (korrekt).
2026-03-18 14:55:39 +00:00
dce044b36d Starter oppgave 23.3 2026-03-18 14:45:25 +00:00
5dfaeff53c Valider fase 3–4: fiks belongs_to-tilgangspropagering og mottakssortering
Validering av fase 3 (frontend) og fase 4 (tilgangskontroll) avdekket to bugs:

1. belongs_to-access-gap: Når en belongs_to-edge opprettes ETTER at
   noen allerede har tilgang til foreldrenoden, fikk ikke barnenoden
   tilgangsoppføringer i node_access-matrisen. F.eks. kunne Vegard (eier
   av en kommunikasjonsnode) ikke se innhold opprettet av Claude med
   belongs_to-edge til den noden.

   Løsning: Ny PG-funksjon propagate_belongs_to_access() som kopierer
   forelderens tilgangsrader til barnet. Kalles fra maskinrommet ved
   opprettelse av belongs_to-edges (create_node m/context, create_edge,
   create_communication m/context). Retroaktiv fiks for eksisterende data.

2. Mottaksflate-sortering: Brukte .microsSinceUnixEpoch (SpacetimeDB-
   BigInt-arv) på vanlig number-felt, ga alltid 0n → ingen sortering.
   Fikset til direkte number-sammenligning.

Verifisert: SvelteKit + maskinrommet bygger og kjører. PG-skjema, OIDC,
WebSocket/NOTIFY, RLS-policies, team-transitivitet og visibility fungerer.
2026-03-18 14:41:20 +00:00
773569759c Fiks benchmark: legg til --output-format text for piped output
Uten dette flagget gir claude -p tom output når stdout er piped.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:33:01 +00:00
f6f2897026 Starter oppgave 23.2 2026-03-18 14:30:46 +00:00
fd6a52960a Reset 23.2 etter krasj 2026-03-18 14:30:40 +00:00
381c0da70f Starter oppgave 23.2 2026-03-18 14:29:20 +00:00
fbb647b454 Oppdater benchmark-rapport: parallelle tester feilet, sekvensielt er nødvendig
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:28:52 +00:00
4be36857e3 Legg til modell-benchmark: script + foreløpig rapport
benchmark-models.sh: sekvensielt 3×3×2 matrise (model × effort × fil)
Foreløpig rapport med Haiku/Sonnet/Opus medium-effort resultater.
Full matrise kjøres kl 04 når serveren er rolig.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:28:03 +00:00
6bb1665b30 Validering 23.1: fase 1–2 (infra + maskinrommet) verifisert
Systematisk gjennomgang av PG-skjema, auth-middleware, intensjoner,
skrivestien og WebSocket-laget. Alle kjernetabeller matcher docs.
Auth fungerer korrekt (401 for ugyldig/manglende token). Skrivestien
er konsistent: direkte PG-skriving → NOTIFY → WebSocket.

Fikser:
- Fjern død kode: pg_writes enqueue-funksjoner (aldri kalt etter STDB-migrering)
- Fjern ubrukt truncate() i tts.rs
- Legg til #[allow(dead_code)] for sqlx-structs med ubrukte felt
- Rett feilaktig doc-påstand i api_grensesnitt.md om jobbkø
- Fjern utdatert STDB-referanse i agent_api.md
- Kompilerer uten warnings

Se logs/validering-23.1.md for fullstendig rapport.
2026-03-18 13:58:50 +00:00
e0d06ddff4 Task runner: bruk Opus for fase 23 (validering)
Validering krever grundig gjennomgang — bruker Opus i stedet
for default-modell. Case-basert modellvalg klar for utvidelse
til andre faser.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:56:07 +00:00
c9900c1d4e Starter oppgave 23.1 2026-03-18 13:50:24 +00:00
c0b89949e3 Opprydding: arkiver STDB-docs, fjern Caddy-konfig, rydd referanser (oppgave 22.5)
SpacetimeDB ble fjernet i 22.4. Denne oppryddingen:
- Arkiverer spacetimedb_integrasjon.md og adapter_moenster.md til docs/erfaringer/arkiv/
- Fjerner SpacetimeDB reverse proxy-blokk fra Caddyfile
- Fjerner SpacetimeDB-loven fra Claude feedback-memories (ikke lenger relevant)
- Oppdaterer docs-referanser i CLAUDE.md, erfaringer/README.md,
  selvdokumenterende_system.md og tasks.md
- Markerer fase 22 som fullført i avhengighetsgrafen
2026-03-18 13:45:30 +00:00
618a6763fd Starter oppgave 22.5 2026-03-18 13:41:42 +00:00
e0988711d8 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>
2026-03-18 13:41:06 +00:00
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
f418aec33b Web clipper: paywall-deteksjon og brukervarsel ved betalingsmur
synops-clip returnerer paywall: true ved avkuttet innhold.
@bot varsler brukeren og ber om manuell innliming.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:27:46 +00:00
e853023b8d Legg til fase 25: Web Clipper (synops-clip)
4 oppgaver: Readability-parser CLI, node-opprettelse med
AI-beriking, @bot-integrasjon (URL i chat → oppsummering),
og orkestrering-støtte.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:27:02 +00:00
118a6741ce Legg til drømmemodus i orkestrering: brukeren skriver fritt, mangler blir feature requests
Brukeren begrenses ikke til kjente verktøy. Boten prøver,
og manglende funksjonalitet fanges opp som work_items med
source_material-edge tilbake til orkestreringen. Systemet
lærer hva brukerne vil ha fra det som ikke lykkes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:22:04 +00:00
514922213a Legg til fase 24: orkestrering med fritekst, auto-eskalering og kompilering
8 oppgaver: node-type, trigger-evaluering, bot-utførelse,
auto-eskalering (Flash→Sonnet→Opus), UI, kaskade, kompilering
av velprøvde mønstre, og seed av standard-orkestreringer.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:20:22 +00:00
79acf0bb0a Spesifiser orkestrering: trigger-drevne noder som utfører seg selv
Nytt konseptdokument for orchestration-noder ():
- Fritekst-instruksjoner som boten tolker og utfører
- Strukturerte triggere (portvokteren evaluerer uten LLM)
- Naturlig progresjon: fritekst → observér → kompilér → DSL
- Kompilerte pipelines med bot-fallback ved feil
- Kaskade mellom orkestreringer via triggers-edges
- Visuell editor med tekstbokser per steg og test-kjøring

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:17:53 +00:00
b1ba06cd21 Starter oppgave 22.4 2026-03-18 13:15:23 +00:00
aee6adc425 Fjern STDB-skrivestien: all skriving går kun til PG (oppgave 22.3)
SpacetimeDB var brukt som «instant feedback»-lag mellom portvokteren
og frontend. Nå som PG NOTIFY-triggere og WebSocket er på plass
(oppgave 22.1–22.2), er STDB-skrivestien overflødig.

Endringer:
- intentions.rs: Alle CRUD-operasjoner (create/update/delete node/edge)
  skriver nå synkront til PG i stedet for STDB-først + async PG-jobbkø.
  PG NOTIFY-triggere gir umiddelbar sanntidsoppdatering til klienter.
  Tilgangsgivende edges (owner/admin/member_of/reader) bruker transaksjon
  med recompute_access direkte i handleren.
- maintenance.rs: Fjernet StdbClient fra alle funksjoner. Varsler
  opprettes/oppdateres/slettes direkte i PG.
- agent.rs, audio.rs, tts.rs, ai_process.rs: Fjernet STDB-synk etter
  CLI-verktøy-kjøring. PG NOTIFY dekker sanntidsvisning.
- pg_writes.rs: Fjernet sync_node_access_to_stdb. access_changed
  NOTIFY-trigger håndterer dette.
- workspace.rs: Synkrone PG-skrivinger med recompute_access.
- summarize.rs, ai_edges.rs: Fjernet StdbClient fra signaturer.
- jobs.rs: Fjernet StdbClient fra dispatch og start_worker.
- main.rs: Fjernet STDB-initialisering, warmup, stdb_monitor.
  StdbClient fjernet fra AppState. stdb.rs beholdt som død kode
  (fjernes i oppgave 22.4).
- health.rs: Fjernet STDB-helsesjekk fra dashboard.
- Slettet warmup.rs og stdb_monitor.rs (PG→STDB-synk ikke lenger
  relevant).
- docs/retninger/datalaget.md: Markert fase M3 som fullført.
2026-03-18 13:11:33 +00:00
24122c9354 Starter oppgave 22.3 2026-03-18 12:36:11 +00:00
193a1b5c58 Reset 22.3 etter krasjet sesjon 2026-03-18 12:36:05 +00:00
a4f896fb2b Starter oppgave 22.3 2026-03-18 12:30:23 +00:00
71d9bbf25f Spesifiser synops-manual: komplett teknisk instruksjonsmanual fra faktisk tilstand
Ny feature-spec for selvgenererende systemmanual:
- Genereres fra faktisk tilstand (PG-skjema, systemd, Docker, CLI)
- 9 seksjoner: infra, DB, tjenester, CLI, Caddy, app-logikk,
  konvensjoner, arkitekturprinsipper, gjenoppbyggingssteg
- Selvforsynt: gitt ren server + manual = kjørende system
- Diff-modus for å se hva som har endret seg
- Secrets redacted, brukerdata ekskludert
- Daglig regenerering + ved deploy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 12:29:22 +00:00