Commit graph

484 commits

Author SHA1 Message Date
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
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