# Task 1 — Report: migrazioni DB (ruoli, guid, author_id) Nota: questo file conteneva un report di un run precedente (task diverso, "content_blocks + role") — sovrascritto con il report corretto del Task 1 corrente ("migrazioni ruoli, guid contenuti, posts.author_id"). ## Cosa è stato fatto Seguito TDD come da brief `task-1-brief.md`, codice usato verbatim. 1. **Test scritti** in `tests/content-db.test.ts`: aggiunto import `createUser` da `../src/lib/auth` e il blocco `describe('migrazioni ruoli/guid/autore', ...)` con le 3 it: guid non vuoto/univoco, invariante SQL editor→superuser, colonna `posts.author_id`. 2. **Verificato fallimento atteso**: `npm test -- tests/content-db.test.ts` → 2 test falliti (`no such column: guid`, `author_id` assente), 6 preesistenti passati. Comportamento pre-migrazione confermato. 3. **Migrazioni implementate** in `src/lib/db.ts`: - import `randomUUID` da `node:crypto`. - dopo il blocco che aggiunge `users.role`, inserita: unificazione `role='editor' → 'superuser'` (UPDATE idempotente), aggiunta colonna additiva `content_blocks.guid TEXT` (con check `PRAGMA table_info`), aggiunta colonna additiva `posts.author_id INTEGER` (stesso check). - blocco seed finale sostituito: insert ora include `guid` generato con `randomUUID()`; aggiunto backfill per righe pre-esistenti con guid nullo/vuoto; creato indice univoco `idx_content_guid` DOPO il backfill (per non fallire su righe nulle transitorie). 4. **`syncSeed` in `src/lib/content.ts`** aggiornata allo stesso schema: import `randomUUID`, insert con guid generato per ogni riga. 5. **Verificato successo**: `npm test -- tests/content-db.test.ts` e poi `npm test` completo (tutta la suite) → **tutti verdi**. 6. **Build**: `npm run build` → completata senza errori. 7. **Commit**: `5cea895 feat(db): migrazioni ruoli editor->superuser, guid contenuti, posts.author_id` (3 file: `src/lib/db.ts`, `src/lib/content.ts`, `tests/content-db.test.ts`). ## File toccati - `src/lib/db.ts` — migrazioni additive/idempotenti + seed con guid + backfill + indice univoco. - `src/lib/content.ts` — `syncSeed` allineata (guid su ogni insert). - `tests/content-db.test.ts` — nuovo describe block per le 3 verifiche del task. ## Output test (finale, suite completa) ``` Test Files 11 passed (11) Tests 51 passed (51) Start at 21:40:18 Duration 2.62s ``` ## Output build ``` [build] Server built in 434ms [build] Complete! ``` ## Dubbi / note - Nessun dubbio bloccante. Rispettato il vincolo "migrazioni SOLO additive e idempotenti, PRIMA del seed, con verifica PRAGMA table_info prima di ogni ALTER" — verificato a mano leggendo `db.ts` dopo l'edit. - Il test importa `createUser` da `../src/lib/auth` ma non lo invoca in nessuna `it` (fedele al brief verbatim); nessun errore di lint/build osservato per l'import inutilizzato. Se in futuro un linter con regola `no-unused-vars` stretta viene attivato su questo file, andrà rivisto (fuori scope Task 1). - La migrazione `editor→superuser` end-to-end su DB persistente non è testata qui (per design, `:memory:` non persiste tra due `createDb`) — demandata allo smoke di produzione previsto in un task successivo del piano (Task 14/15), come indicato nel brief stesso.