# BYGGE-PLAN — Enterprise-resiliens (start 2026-06-04 23:13 UTC) > Erik: "Starta bygge. Allt utom det som kräver manuell handpåläggning med konton/kort." ## VAD JAG KAN BYGGA NU (inget kort/konto/kostnad) | # | Bygge | Varför möjligt | |---|---|---| | B1 | **AI-Gateway** (fristående, PM2, port 3270) — auto-failover över alla providers | bernt-ägd kod, befintliga nycklar, ingen kostnad | | B2 | **Provider health/kredit-monitor** + larm | egna nycklar, läs-anrop | | B3 | **quiXzoom payments application_fee** (Flow+-modellen #1c) | bernt-ägd payments.mjs, mock tills Stripe live | | B4 | **Graceful degradation** i quixzoom-api (DB-fel→read-only, AI-fel→fallback) | bernt-ägd | | B5 | **Provider-failover smoke-tester** + dokumentation | egna nycklar | | B6 | **Observability**: strukturerad logg + /metrics i gateway & quixzoom-api | bernt-ägd | ## VAD SOM KRÄVER ANDRA (ticketat, ej i detta bygge) - RDS Multi-AZ + uppgradering (Winston kostnad, Johan AWS) → RES-001/003 - Andra EC2-host + ALB (Winston kostnad) → RES-004 - Provider kort/konton/auto-topup (Winston) → PROV-W1..6 - model-router.mjs ändring (root-ägd) → AI-Gateway ersätter behovet; Johan migrerar interna anrop senare ## ARKITEKTUR — AI-Gateway (B1, kärnan) Fristående Node-tjänst, port 3270, PM2. Enhetligt API: POST /v1/chat { task, system, messages, maxTokens } Routing: primär→sekundär→tertiär per task. Vid 429/quota/credit/5xx/timeout → nästa provider. Circuit-breaker per provider (öppnas efter N fel, halvöppen efter cooldown). ALDRIG hårt fel pga en provider. Loggar varje failover som incident. Health: GET /health, GET /metrics (per provider: ok/fel/latens/circuit-state). Provider-kedjor (kredit-OK only, Grok exkluderad tills påfylld): reasoning: openai(o3) → anthropic(opus) → deepseek fast: groq → gemini → openai(4o-mini) search: perplexity → (ingen fallback, degraderar till "ingen websök") creative: openai(gpt-4o) → anthropic(sonnet) → gemini default: anthropic(sonnet) → openai(4o) → groq ## ORDNING 1. B1 AI-Gateway (störst riskreduktion) → deploy + verifiera failover 2. B2 monitor → PM2 3. B6 observability i gateway 4. B3 payments Flow+ application_fee 5. B4 graceful degradation 6. B5 smoke-tester + slutverifiering ## STATUS: KÖR --- ## ✅ BYGGE KLART (2026-06-04 23:24 UTC) — verifierat live | # | Bygge | Status | Bevis | |---|---|---|---| | B1 | **AI-Gateway** (PM2 port 3270) | ✅ LIVE | 6 providers, failover bevisat (404→groq, 1 failover) | | B2 | **Provider-monitor** (PM2, 5min) | ✅ LIVE | 6/7 OK, larmar Winston/Johan auto vid kredit/nere | | B3 | **Flow+ application_fee** (#1c) | ✅ LIVE | /api/qz/payments/fees — 0,12% on / 0,15% off, källangivet | | B4 | **Djup health + degradering** | ✅ LIVE | /health/ready 503 vid DB-fel → LB kan dirigera om | | B6 | **Observability** (metrics+logg) | ✅ LIVE | /metrics per provider, strukturerad JSON-logg | ### Nya PM2-tjänster (sparade i dump) - ai-gateway (3270) — enhetligt LLM-API med auto-failover + circuit-breaker - provider-monitor — kredit/health-bevakning + auto-larm ### Failover-kedjor aktiva (Grok exkluderad tills påfylld) - reasoning: openai(o3)→anthropic(opus)→deepseek - fast: groq→gemini→openai(4o-mini) - creative: openai(4o)→anthropic(sonnet)→gemini - search: perplexity - default: anthropic(sonnet)→openai(4o)→groq ### Designförbättring upptäckt under test 404/modell-avvecklad klassas nu som FAILOVER (hände med Gemini 2.0 idag). Tidigare gav det hårt fel. Nu faller det över till nästa provider. ### Buggar fixade på vägen - Gemini-probe använde avvecklad 2.0-flash → 2.5-flash - Anthropic-probe använde avvecklad haiku-20241022 → claude-haiku-4-5 ## KVAR (kräver Johan/Winston — ticketat, ej i detta bygge) - RDS Multi-AZ + uppgradering (RES-001/003) — Winston kostnad, Johan AWS - Andra host + ALB (RES-004) — Winston kostnad - Provider kort/auto-topup (PROV-W1..6) — Winston - Migrera interna amos-core-anrop till AI-Gateway (Johan, root-fil) - Grok-påfyllning → då läggs Grok tillbaka i kedjorna