キットのバージョン / コミット
dev/v3 @ e3a3954
期待される挙動
packages/db/src/dsql-compat.ts(生成時の check-dsql-compat.ts と実行時の migrate.ts の両方で使用される)は、AGENTS.md に文書化された許可リストに従い、DSQL がサポートしない ALTER TABLE サブコマンドをすべて拒否すべきである:
ALTER TABLE only supports: ADD COLUMN, RENAME COLUMN/TABLE/CONSTRAINT, SET SCHEMA, OWNER TO, and IDENTITY operations. Everything else […] requires table recreation.
実際の挙動
packages/db/src/dsql-compat.ts:51-83 は、型変更・列削除・デフォルト・NOT NULL・制約削除、および制約付き ADD COLUMN のみを捕捉する拒否リスト(denylist)方式を使っている。許可リスト外だが拒否リストにも載っていない文は暗黙的に受理される。例:
ALTER TABLE "T" ADD CONSTRAINT "u" UNIQUE ("c");
ALTER TABLE "T" ALTER COLUMN "c" SET STATISTICS 1;
いずれもローカル生成、pnpm -r run check:ci、CI のドリフトチェックを通過し、マイグレータが DSQL に対して実行した時点で初めて失敗する。
問題が発生する条件
- 許可リスト外だが現状の拒否リストには載っていない
ALTER TABLE サブコマンドを含む、手書きのマイグレーション
- Drizzle が生成する文はランナーが再整形するため該当しにくい。手書きの
.sql(--custom 経由)がよりリスクの高い経路
再現手順
ALTER TABLE "todo_items" ADD CONSTRAINT "unique_title" UNIQUE ("title"); を含むマイグレーションを追加する
pnpm --filter @repo/db run generate を実行 — 通過する
pnpm -r run check:ci を実行 — 通過する
- デプロイ — 実行時にマイグレータが失敗する
分析と修正案(任意)
validateStatement() を ALTER TABLE サブコマンドの許可リスト(AGENTS.md に一致)として書き直しつつ、回帰カバレッジのために既存の拒否リストのテストを維持する。v3 差分レビュー(executor 06 の発見 F-DB-02)で発見。
キットのバージョン / コミット
dev/v3 @ e3a3954
期待される挙動
packages/db/src/dsql-compat.ts(生成時のcheck-dsql-compat.tsと実行時のmigrate.tsの両方で使用される)は、AGENTS.md に文書化された許可リストに従い、DSQL がサポートしないALTER TABLEサブコマンドをすべて拒否すべきである:実際の挙動
packages/db/src/dsql-compat.ts:51-83は、型変更・列削除・デフォルト・NOT NULL・制約削除、および制約付き ADD COLUMN のみを捕捉する拒否リスト(denylist)方式を使っている。許可リスト外だが拒否リストにも載っていない文は暗黙的に受理される。例:ALTER TABLE "T" ADD CONSTRAINT "u" UNIQUE ("c");ALTER TABLE "T" ALTER COLUMN "c" SET STATISTICS 1;いずれもローカル生成、
pnpm -r run check:ci、CI のドリフトチェックを通過し、マイグレータが DSQL に対して実行した時点で初めて失敗する。問題が発生する条件
ALTER TABLEサブコマンドを含む、手書きのマイグレーション.sql(--custom経由)がよりリスクの高い経路再現手順
ALTER TABLE "todo_items" ADD CONSTRAINT "unique_title" UNIQUE ("title");を含むマイグレーションを追加するpnpm --filter @repo/db run generateを実行 — 通過するpnpm -r run check:ciを実行 — 通過する分析と修正案(任意)
validateStatement()をALTER TABLEサブコマンドの許可リスト(AGENTS.md に一致)として書き直しつつ、回帰カバレッジのために既存の拒否リストのテストを維持する。v3 差分レビュー(executor 06 の発見 F-DB-02)で発見。