Impulse AI Docs
Intern dokumentasjon
skipLink.label

Incident Response

Hva gjoer du kl 02:00 naar noe er nede? Denne guiden er skrevet for ett-persons drift.

Generell respons-prosedyre

heading.anchorLabel
1. PUST — Ikke panikk. Brukerne overlever 10 minutter.
2. DIAGNOSE — Hvilken komponent? (Railway/Supabase/Anthropic/Redis/iOS)
3. SJEKK STATUS — Er det leverandoeren? (statussider)
4. TILTAK — Foelg scenariet under
5. VERIFISER — Test at fix fungerer (curl, app-test)
6. KOMMUNISER — Hvis >30 min nedetid: post i support-kanal

Alvorlighetsnivaaer

heading.anchorLabel
NivaaBeskrivelseEksemplerResponstid
P1 — KritiskHele appen er nede eller data tapesAPI nede, Supabase nede, alle brukere krasjerUmiddelbart
P2 — HoeyKjernefunksjonalitet er bruttAI stopper, sessions feiler, IAP feil< 1 time
P3 — MediumDegradert ytelse eller delfunksjon nedeRedis nede (treg, men fungerer), insights feiler< 4 timer
P4 — LavKosmetisk eller ikke-kritisk feilUI-bug for faa brukere, logging-feilNeste arbeidsdag

Oppdagelseskanaler

heading.anchorLabel
KanalHva den fangerResponstid
Sentry e-postApp-crash, 5xx errors, queue failuresMinutter
BrukerklageAlt Sentry ikke fanger (UX-bugs, tomme skjermer)Timer/dager
Railway dashboardDeploy failures, OOM, container restartSjekk manuelt
Supabase dashboardDB-nedetid, connection pool fullSjekk manuelt

Scenario 1: API nede (Railway)

heading.anchorLabel

Symptomer: iOS-app viser nettverksfeil. Ingen data laster.

Diagnose:

Terminal window
# Test health endpoint
curl https://api.impulseai.app/api/v1/health
# Sjekk Railway dashboard
# https://railway.app → im-api → Deployments → Logs

Tiltak:

AarsakHandling
Siste deploy feiletRollback til forrige deploy i Railway (1 klikk)
OOM (out of memory)Skaler opp RAM midlertidig i Railway settings
Henger (ingen respons)Restart service i Railway dashboard
Railway selv nedeVent. Sjekk status.railway.app

Bruker-impact: Appen viser “Noe gikk galt”. Ingen datatap — alt er i Supabase.

Scenario 2: Supabase nede

heading.anchorLabel

Symptomer: API returnerer 500. iOS-app viser feil. Auth fungerer ikke.

Diagnose:

Terminal window
# Sjekk Supabase status
# https://status.supabase.com
# Sjekk dashboard
# https://supabase.com/dashboard → Project → Health

Tiltak:

AarsakHandling
Supabase har nedetidVent. Sjekk statusside. De har 99.9% SLA.
Connection pool fullRestart API i Railway (frigjor connections)
Migrering feiletpnpm db:reset lokalt for aa verifisere. Fiks SQL, deploy ny migrering.

Bruker-impact: Alt stopper — auth, data, AI. Appen er ubrukelig til Supabase er tilbake.

Scenario 3: Anthropic API nede

heading.anchorLabel

Symptomer: Impulser fanges OK, men klassifisering henger. Sessions faar ikke guidance. Check-ins har ingen assessment.

Diagnose:

Terminal window
# Sjekk Anthropic status
# https://status.anthropic.com
# Sjekk Sentry for 529/503 errors
# sentry.io → im-api → Issues → tag: queue
# Sjekk Railway logs for retries
# Railway dashboard → Logs → soek "retryable"

Tiltak:

AarsakHandling
Anthropic har nedetidVent. BullMQ retrier automatisk (3 forsoek, 30s/60s/120s backoff)
Rate limited (429)Vent. Retries haandterer det. Vedvarende: reduser concurrency i queue-config
API key ugyldigSjekk ANTHROPIC_API_KEY i Doppler (prd config)

Bruker-impact: Graceful degradation innebygd. Brukere ser “AI midlertidig utilgjengelig”. Impulser lagres, klassifiseres naar AI er tilbake.

Scenario 4: Redis nede

heading.anchorLabel

Symptomer: API fungerer men er treg (ingen cache). Nye impulser klassifiseres ikke (queue ned).

Diagnose:

Terminal window
# Sjekk Railway logs for Redis-feil
# Railway dashboard → Logs → soek "Redis" eller "ECONNREFUSED"

Tiltak:

AarsakHandling
Redis container krasjetRestart i Railway dashboard
Redis full (memory)redis-cli FLUSHALL (toemmer cache + queues). Eller skaler opp.
API logger “Redis cache: UNAVAILABLE”API degraderer til no-cache modus automatisk. Queues stopper.

Bruker-impact: App fungerer men tregere. Nye AI-operasjoner henger til Redis er tilbake. Ingen datatap.

Scenario 5: iOS-app krasjer

heading.anchorLabel

Symptomer: Sentry-alert med crash report.

Diagnose:

  1. Sentry: sentry.io → im-ios → Issues → nyeste crash
  2. Les stack trace, breadcrumbs (siste tab-navigasjon), user context

Tiltak:

  1. Identifiser crash-type fra stack trace (fil + linje)
  2. Reproduser lokalt med samme bruker-kontekst (tier, datamengde)
  3. Fiks → TestFlight → verifiser
  4. Hasteoppdatering? → App Store “Expedited Review” (1-2 dager vs 1 uke)

Bruker-impact: Appen krasjer for beroerte brukere. Andre brukere er upavirket (med mindre universell crash).

Scenario 6: Subscription/IAP-feil

heading.anchorLabel

Symptomer: Brukere betaler men faar ikke tilgang. Eller: gratisbrukere har Mastery-tilgang.

Diagnose:

Terminal window
# Sjekk App Store Connect → Subscriptions
# Sjekk Supabase → profiles-tabell → subscription_tier for beroert bruker
# Railway logs → soek "webhook" eller "subscription"

Tiltak:

AarsakHandling
Webhook ikke mottattSjekk App Store Server Notifications URL i App Store Connect
Feil tier i DBManuell fix: UPDATE profiles SET subscription_tier = 'foundation' WHERE id = 'user-id'
StoreKit-feilSjekk Sentry for purchase.failed events

Kommunikasjonsplan

heading.anchorLabel
NedetidHandling
< 10 minIngen ekstern kommunikasjon noedvendig
10-30 minForbered melding, men vent
30 min - 2 timerPost oppdatering i support-kanal
> 2 timerE-post til aktive brukere med status + forventet loesning

Post-mortem prosess

heading.anchorLabel

Etter enhver P1 eller P2 hendelse:

# Post-mortem: [Kort beskrivelse]
**Dato:** YYYY-MM-DD
**Varighet:** HH:MM - HH:MM (X minutter)
**Alvorlighet:** P1/P2
**Beroerte brukere:** Antall / alle
## Tidslinje
- HH:MM — Foerste symptom oppdaget
- HH:MM — Diagnose startet
- HH:MM — Rotaarsak identifisert
- HH:MM — Fix deployet
- HH:MM — Verifisert OK
## Rotaarsak
[Hva gikk galt og hvorfor]
## Tiltak
- [ ] Kortsiktig fix (det du gjorde)
- [ ] Langsiktig fix (forhindre gjentakelse)
- [ ] Monitorering-forbedring (fange det raskere)
## Laerdom
[Hva laerte vi?]
  1. Ingen skyld — fokuser paa systemer, ikke personer
  2. Skriv innen 48 timer mens detaljene er ferske
  3. Lagre i repodocs/post-mortems/YYYY-MM-DD-kort-beskrivelse.md
  4. Implementer tiltak — post-mortem uten tiltak er bortkastet tid

Nyttige lenker

heading.anchorLabel
TjenesteDashboardStatusside
Railwayrailway.appstatus.railway.app
Supabasesupabase.com/dashboardstatus.supabase.com
Anthropicconsole.anthropic.comstatus.anthropic.com
Sentrysentry.iostatus.sentry.io
App Store Connectappstoreconnect.apple.comdeveloper.apple.com/system-status
TelemetryDeckdashboard.telemetrydeck.com