- Omorganiser docs/: konsepter, features, infra og proposals i egne mapper - Ny docs/erfaringer/ med lærdommer fra chat-implementering (Svelte 5, SpacetimeDB, adapter-mønster) - Oppdater ARCHITECTURE.md: Lag 1 status, ny §10 Erfaringslogg, SpacetimeDB i lokal dev - Oppdater synkronisering.md med implementeringsstatus og designvalg - Oppdater lokal.md med SpacetimeDB og AI Gateway - Utvid PG-skjema med channels, messages, media_files, message_revisions - Legg til seed_dev.sql, migration_safety.md, .env.example - Nye feature-specs: chat, kanban, whiteboard, live_ai, lydmeldinger m.fl. - Nye konsept-specs: studioet, møterommet, redaksjonen, den asynkrone gjesten m.fl. - SpacetimeDB og AI Gateway i docker-compose.dev.yml - collect-docs.sh inkluderer erfaringer/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
2.2 KiB
Markdown
66 lines
2.2 KiB
Markdown
# Migration Safety Checklist
|
|
|
|
Sjekkliste for alle som kjører PostgreSQL-migrasjoner — lokalt eller i prod.
|
|
|
|
## Før migrering
|
|
|
|
- [ ] Les migrasjonfilen og forstå hva den gjør
|
|
- [ ] Har migrasjonen en tilhørende **down-migrering**? (påkrevd for skjema-endringer)
|
|
- [ ] Tar migrasjonen backup-hensyn? (dropper den kolonner/tabeller med data?)
|
|
|
|
## Etter migrering
|
|
|
|
### RLS-verifisering (KRITISK)
|
|
Etter *enhver* migrering som oppretter eller endrer tabeller med `workspace_id`:
|
|
|
|
```sql
|
|
-- 1. Verifiser at RLS er aktivert på alle workspace-tabeller
|
|
SELECT tablename, rowsecurity
|
|
FROM pg_tables
|
|
WHERE schemaname = 'public'
|
|
AND tablename IN ('nodes', 'graph_edges', 'messages', 'channels',
|
|
'media_files', 'job_queue', 'message_attachments')
|
|
ORDER BY tablename;
|
|
-- Forventet: rowsecurity = true for alle
|
|
|
|
-- 2. Verifiser at policies eksisterer
|
|
SELECT tablename, policyname, cmd, qual
|
|
FROM pg_policies
|
|
WHERE schemaname = 'public'
|
|
ORDER BY tablename;
|
|
-- Forventet: workspace_isolation_* policy for hver tabell
|
|
|
|
-- 3. Test isolasjon: sett workspace A, forsøk å lese workspace B
|
|
SET app.current_workspace_id = '<workspace_a_uuid>';
|
|
SELECT count(*) FROM nodes WHERE workspace_id = '<workspace_b_uuid>';
|
|
-- Forventet: 0 rader (RLS blokkerer)
|
|
|
|
-- 4. Verifiser at superuser IKKE blokkeres (Rust workers trenger dette)
|
|
RESET app.current_workspace_id;
|
|
SET ROLE postgres;
|
|
SELECT count(*) FROM nodes;
|
|
-- Forventet: alle rader synlige
|
|
```
|
|
|
|
### Indeksverifisering
|
|
```sql
|
|
-- Sjekk at viktige indekser finnes
|
|
SELECT indexname, tablename
|
|
FROM pg_indexes
|
|
WHERE schemaname = 'public'
|
|
AND tablename IN ('nodes', 'graph_edges', 'messages')
|
|
ORDER BY tablename;
|
|
```
|
|
|
|
### Constraint-verifisering
|
|
```sql
|
|
-- Sjekk at foreign keys er intakte
|
|
SELECT tc.table_name, tc.constraint_name, tc.constraint_type
|
|
FROM information_schema.table_constraints tc
|
|
WHERE tc.table_schema = 'public'
|
|
AND tc.constraint_type IN ('FOREIGN KEY', 'CHECK', 'UNIQUE')
|
|
ORDER BY tc.table_name;
|
|
```
|
|
|
|
## Automatisering
|
|
Disse sjekkene kjøres automatisk i migrasjonstestene (se `ARCHITECTURE.md` §10.2). Manuell kjøring er kun nødvendig ved prod-migrasjoner til automatiserte tester er på plass.
|