| name | create-migration |
|---|---|
| description | Generate and apply a Drizzle/D1 migration for tecnova-platform. Use when editing packages/db/src/schema.ts, adding or changing a table/column, or when the user asks to create or run a DB migration. |
tecnova-platform の DB マイグレーションは packages/db と apps/api をまたぐ 2 段構えで、
順序を間違えやすい。drizzle-kit は SQL 生成のみを担当し、適用は wrangler(D1)で行う
(packages/db/drizzle.config.ts のコメント参照)。この手順を厳守すること。
- スキーマ:
packages/db/src/schema.ts(生成 SQL はpackages/db/drizzle/に出力、meta/_journal.jsonで管理)。 apps/api/wrangler.tomlのmigrations_dir = ../../packages/db/drizzle。- タイムスタンプは UTC の Unix epoch ms(
integer({ mode: 'timestamp_ms' }))。Date列は使わない(CLAUDE.md 制約 6)。 - 書き込み整合性は D1 saga /
db.batch([...])パターン(インタラクティブ・トランザクション不可、CLAUDE.md 制約 4 / docs/mvp.md 6.1)。
- スキーマ編集:
packages/db/src/schema.tsを変更する。既存行のある列に NOT NULL を足す場合は default を検討(例:fullNameはdefault(''))。 - SQL 生成:
pnpm --filter @tecnova/db db:generate
- 生成物レビュー:
packages/db/drizzle/NNNN_*.sqlとmeta/_journal.jsonの差分を読み、新規エントリがちょうど 1 つであること、SQL が意図通りかを確認する。破壊的変更(列削除・型変更)は特に慎重に。 - ローカル D1 へ適用:
pnpm --filter @tecnova/api db:apply:local
- 型チェック:
pnpm --filter @tecnova/api type-check pnpm --filter @tecnova/db type-check
- 本番(remote)は原則自動:
db:apply:remoteはmainへの push 時に.github/workflows/deploy-api.ymlが実行する。ここで手動のdb:apply:remoteは実行しない。明示的に求められた場合のみ:pnpm --filter @tecnova/api db:apply:remote
- 生成 SQL をレビュー済み、ローカル D1 に適用済み、型チェック通過。
- スキーマ変更が participants の PII 境界(CLAUDE.md 制約 5)を超えていないこと。
participantsへの列追加を伴う場合は privacy-reviewer サブエージェントに確認させる。