Summary
The backend uses better-sqlite3 with raw SQL schema setup. There is a migrations/ directory in db/ and a events.sql file, but no formal, versioned migration framework. Schema changes are applied ad-hoc, risking data loss or schema drift between environments.
Priority
P1 — Schema changes cannot currently be applied safely to existing databases.
Files to work on
backend/src/db/migrations/ (create migrations framework)
backend/src/db/index.ts
backend/src/config/index.ts
Requirements
- Create a
MigrationRunner class that tracks applied migrations in a schema_migrations table
- Create migration files
0001_init.sql, 0002_indexes.sql, etc. in backend/src/db/migrations/
- Each migration:
{ id, filename, sql, appliedAt } tracked in schema_migrations
- Runner applies pending migrations in order inside a transaction, then records them
- Down migrations not required (forward-only for this stage)
- Support
--include-down-migrations flag during development
- Enforce: migrations are idempotent (safe to run multiple times)
- Add a
npm run db:migrate script
Acceptance Criteria
Summary
The backend uses
better-sqlite3with raw SQL schema setup. There is amigrations/directory indb/and aevents.sqlfile, but no formal, versioned migration framework. Schema changes are applied ad-hoc, risking data loss or schema drift between environments.Priority
P1 — Schema changes cannot currently be applied safely to existing databases.
Files to work on
Requirements
MigrationRunnerclass that tracks applied migrations in aschema_migrationstable0001_init.sql,0002_indexes.sql, etc. inbackend/src/db/migrations/{ id, filename, sql, appliedAt }tracked inschema_migrations--include-down-migrationsflag during developmentnpm run db:migratescriptAcceptance Criteria
npm run db:migrateapplies all pending migrationsschema_migrationstable records applied migration versionstasks,agents,paymentsschema is captured in migrated files