Commit graph

368 commits

Author SHA1 Message Date
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
8e80102f6b Fullfør oppgave 22.2: Frontend-migrering fra SpacetimeDB til portvokteren
Frontend bruker nå kun portvokterens WebSocket for sanntidsdata.
SpacetimeDB-klienten er erstattet med en enkel WebSocket-klient
som kobler til /ws-endepunktet og oppdaterer reactive stores direkte.

Frontend-endringer:
- Nye lokale typer (types.ts) erstatter STDB module_bindings
- connection.svelte.ts: WebSocket til portvokteren med auto-reconnect
- stores.svelte.ts: Prosesserer WS-meldinger (initial_sync + events)
- MixerTrait: STDB-reducers erstattet med HTTP API-kall
- api.ts: Nye mixer-endepunkter (create, gain, mute, effect, role)
- +layout.svelte: Fjernet dual-tilkobling, kun portvokterens WS
- pg-ws.svelte.ts: Slettet (erstattet av connection.svelte.ts)

Dokumentasjon:
- datalaget.md: Fase M1+M2 markert som fullført
- api_grensesnitt.md: Oppdatert arkitekturdiagram, nye mixer-endepunkter
2026-03-18 12:26:33 +00:00
652d2b8917 Presiser at ↑-bump erstatter svaret in-place, ikke forlenger samtalen
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 12:24:02 +00:00
b971347dc6 Spesifiser responskvalitet: intelligens/innsats-nivåer med ↑-knapp
Ny feature-spec for synlig kvalitetsstyring av bot-svar:
- Tre nivåer intelligens (Haiku/Sonnet/Opus) og innsats (low/med/high)
- Diskret indikator (🧠●●○ 💪●○○) i svar-header
- Én ↑-knapp for "gi bedre svar" — bumper begge nivåer
- Automatisk nivåvalg fra heuristikker, bruker overstyrer med ↑
- retry_of-edge mellom erstattet og nytt svar
- Default-nivå konfigurerbart per cli_tool-node i PG

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 12:23:13 +00:00
fcc9e671a5 Backend for SpacetimeDB-migrering: berikede WS-events + mixer-API
Fase M2 (oppgave 22.2): Portvokteren sender nå full raddata i
WebSocket-events (ikke bare ID), slik at frontend kan oppdatere
stores direkte uten ekstra API-kall.

Endringer:
- ws.rs: Berik node/edge/access-events med full PG-data etter NOTIFY
- ws.rs: Ny mixer_channel_changed event-type + initial_sync inkluderer mixer
- ws.rs: Resync ved lag (broadcast overflow)
- mixer.rs: Nye HTTP-endepunkter som erstatter STDB-reducers
  (create_mixer_channel, set_gain, set_mute, toggle_effect, set_mixer_role)
- 019_mixer_channels.sql: PG-tabell + NOTIFY-trigger for mixer-tilstand
2026-03-18 12:16:36 +00:00
ce1c06d794 Legg til fase 23: validering og kvalitetssikring per fase
Ny fase med 11 oppgaver som spinner opp friske sesjoner for å
teste og validere implementeringen fra hver fase. Ved funn:
fiks direkte (småting) eller opprett nye tasks med spesifikasjon
for dedikert sesjon. Dekker alle faser fra infra til STDB-migrering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 12:10:38 +00:00
b5611706f9 Starter oppgave 22.2 2026-03-18 12:05:21 +00:00
d7a9f3816d Fullfør oppgave 22.1: WebSocket-lag med PG LISTEN/NOTIFY og frontend dual-tilkobling
Backend:
- ws.rs: Fikset WS auth via query-param (browser kan ikke sende headers ved WS upgrade)
- auth.rs: Gjort decoding_key pub for gjenbruk i ws-modulen

Frontend:
- pg-ws.svelte.ts: Ny PG WebSocket-klient med auto-reconnect og event-logging
- index.ts: Eksporterer pgWsConnect/pgWsDisconnect/pgWsState
- +layout.svelte: Kobler til PG WS i parallell med STDB for verifisering

Docs:
- api_grensesnitt.md: Dokumentert /ws endepunkt og sanntidsarkitektur
- tasks.md: Merket 22.1 som ferdig

Deploy: Krever restart av maskinrommet + rebuild av frontend.
2026-03-18 12:01:10 +00:00
0ecb7104c0 WebSocket-lag i portvokteren: PG LISTEN/NOTIFY + WS-endepunkt (oppgave 22.1)
Implementerer Fase M1 av SpacetimeDB-migrasjonen:

- SQL-migrasjon 018: Triggers for notify_node_change, notify_edge_change
  og notify_access_change på nodes, edges og node_access-tabellene
- Ny ws.rs-modul i maskinrommet med:
  - PG LISTEN bakgrunnsoppgave som lytter på tre kanaler
  - Broadcast-kanal for å videresende events til alle WS-klienter
  - WebSocket-endepunkt (/ws) med JWT-autentisering
  - Initiell snapshot (initial_sync) ved tilkobling
  - Tilgangskontrollfiltrering per klient via node_access-matrisen
- Oppdatert AppState med WsBroadcast og /ws-rute

Frontend dual-tilkobling (STDB + nytt WS) kommer i neste commit.
2026-03-18 11:54:34 +00:00
6ee50e937d Starter oppgave 22.1 2026-03-18 11:47:22 +00:00
7c99f1ef4f Legg til fase 22 i task runner avhengighetskart
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:47:17 +00:00
d20967f7e5 Legg til auth.synops.no og oppdater domene-dokumentasjon
- Caddy: auth.synops.no som alias for auth.sidelinja.org
- Authentik OIDC: synops.no lagt til som redirect URI
- CLAUDE.md: oppdatert domeneliste med auth.synops.no
- Landingsside: login peker til sidelinja.org (der appen kjører)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:46:39 +00:00
b31ee59868 Ytelse: profiler PG-spørringer, optimaliser node_access-oppdatering (oppgave 12.4)
Profilert alle kritiske PG-spørringer med EXPLAIN ANALYZE.
Identifiserte at recompute_access brukte single-column index
(idx_edges_type) med lav selektivitet, og RLS-policyer manglet
composite indexes for effektive oppslag.

Endringer:

Migrasjon 017_query_performance.sql:
- 6 nye composite indexes:
  - idx_edges_target_type (target_id, edge_type) — recompute_access + belongs_to
  - idx_edges_source_type (source_id, edge_type) — alias-oppslag
  - idx_edges_target_memberof (partial, member_of) — team-propagering
  - idx_nodes_created_at_desc — ORDER BY created_at DESC
  - idx_nodes_kind_created — filtrer på kind + sorter
  - idx_na_subject_covering INCLUDE (object_id) — RLS without heap lookup
- Optimalisert recompute_access(): steg 3 og 4 kjøres nå bare
  når det er relevant (EXISTS-sjekk først). For vanlige brukere
  (ikke team) unngår dette to fulle INSERT-SELECT-operasjoner.
- via_edge oppdateres nå korrekt ved access-nivå-endring.

Slow query logging (maskinrommet):
- Forespørsler >200ms logges som WARN med tag slow_request
- PG-spørringer >100ms logges som WARN med tag slow_query
- recompute_access-kall logges med varighet for overvåking
- Nytt pg_stats-felt i /metrics med tabell- og index-statistikk,
  cache hit ratio, og node_access-telling

Dokumentasjon oppdatert i docs/infra/observerbarhet.md.
2026-03-18 11:43:19 +00:00
7f8b749443 Starter oppgave 12.4 2026-03-18 11:30:21 +00:00
0fc559a207 Feilhåndtering: retry med backoff + dead letter queue for PG-skrivinger (oppgave 12.3)
Erstatter fire-and-forget tokio::spawn() i skrivestien med jobbkø-basert
persistering. Alle PG-skriveoperasjoner (insert/update/delete for noder
og edges) går nå gjennom den eksisterende jobbkøen som allerede har:

- Eksponentiell backoff (30s × 2^n) ved feil
- Dead letter queue (status='error' etter max_attempts=3)
- Admin-API for overvåking, manuell retry og avbryt
- Ressursstyring og prioritetsregler

Ny modul pg_writes.rs med:
- 5 enqueue-funksjoner (erstatter spawn_pg_*)
- 5 job-handlere for dispatch i worker-loopen
- Full paritet med gammel logikk: tilgangsgivende edges kjører
  recompute_access i transaksjon, synker til STDB, trigger rendering

Før: PG-skrivefeil logget og glemt → data kun i STDB, tapt fra PG.
Nå: automatisk retry → admin-synlig dead letter → manuell recovery.
2026-03-18 11:26:48 +00:00
9cd6c0ee5d Starter oppgave 12.3 2026-03-18 11:16:10 +00:00
81d2ece2f1 Revider datalaget: fas ut SpacetimeDB, PG LISTEN/NOTIFY + WebSocket
SpacetimeDB var et godt eksperiment, men gir synk-kompleksitet,
dobbelt vedlikehold og en ekstra SPOF for minimal latensgevinst
på denne skalaen. PG LISTEN/NOTIFY + WebSocket i portvokteren
erstatter sanntidslaget.

- datalaget.md: revidert med ny lagmodell, PG-triggers, migrasjonsplan
- retninger/README.md: oppdatert status til «Revidert»
- tasks.md: ny fase 22 (STDB-migrering) med 5 oppgaver (M1–M5)
- 12.4 oppdatert fra «profiler STDB» til «profiler PG»

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:15:46 +00:00
0f03886091 Backup: daglig PG-dump, STDB-krasj-recovery, helsesjekk (oppgave 12.2)
Tre ting implementert:

1. PG-dump rutine (scripts/backup-pg.sh):
   - Daglig cron kl. 03:00 UTC via /etc/cron.d/synops-backup
   - pg_dump -Fc (custom format, komprimert), konsistent uten nedetid
   - Rotasjon: beholder 30 dager, sletter eldre
   - Verifiserer at dump-filen er gyldig (ikke tom)

2. STDB → PG gjenoppbygging ved krasj (stdb_monitor.rs):
   - Bakgrunnsmonitor sjekker STDB hvert 30. sekund
   - Oppdager krasj (var oppe → nå nede)
   - Venter på at containeren restarter (maks 10 min)
   - Kjører warmup (PG → STDB) automatisk
   - Hele prosessen logges

3. Forbedret backup-helsesjekk (health.rs):
   - Sjekker /srv/synops/backup/pg/ for nyeste dump
   - Rapporterer ok/stale/missing i /admin/health
2026-03-18 11:11:32 +00:00
4d7852f466 Spesifiser robusthet: fallback-kjede, bot-nedetid, function calling
Nytt infra-dokument for robusthet og fallback:
- LLM fallback-kjede via LiteLLM (Claude → GPT-4 → lokal modell)
- Automatisk nedetid-melding til brukere ved bot-feil
- Function calling: ekstern API-bot dispatcher CLI-verktøy via
  portvokteren (structured output → generisk dispatch)
- Tilgangskontroll for bot-actions per brukerrolle
- Onboarding som statisk dispatch (null LLM-kostnad)
- PG som eneste reelle SPOF, mitigering via backup+snapshot

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 11:06:32 +00:00
b68b9683dd Starter oppgave 12.2 2026-03-18 11:05:23 +00:00
0012a10373 Observerbarhet: strukturert logging, metrikker, /metrics-endepunkt (oppgave 12.1)
Legger til observerbarhetslaget i maskinrommet:

- Strukturert JSON-logging via LOG_FORMAT=json (maskinlesbart for
  log-aggregering). Default er human-readable for utvikling.
- Ny metrics-modul med in-memory request latency tracking per rute
  (count, avg, min, max, p50/p95/p99 fra siste 1000 forespørsler).
- Custom axum-middleware erstatter tower_http::TraceLayer — logger
  method, path, status og duration_ms per request, og mater
  metrikk-samleren.
- GET /metrics-endepunkt som returnerer:
  - request_latency: per-rute statistikk
  - queue_depth: pending/running/error/retry fra job_queue
  - ai_cost: aggregert fra ai_usage_log (siste time/24h/30d)
- Default loggnivå endret fra debug til info for mindre støy.
2026-03-18 11:01:36 +00:00
c9f7b8ce17 Spesifiser selvdokumenterende system: Synops dokumenterer seg selv som noder
Nytt konseptdokument: systemdokumentasjon (arkitektur, features,
CLI-verktøy, retninger) lever som noder i grafen — ikke bare
markdown-filer. Én offentlig Synops-rotnode med undersamlinger.

- Claude traverserer via synops-context, ikke fillesing
- Nye utviklere navigerer fra én rotnode i webgrensesnittet
- CLAUDE.md krymper til bootstrap-peker + fallback
- docs/-filer migreres i faser: seed → dobbeltliv → noder er kilden
- synops-snapshot genererer docs fra noder (ikke omvendt)

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