Skip to content

test(postgres): CLI の --extension-mode verify が runMigrations まで届くことを、拡張が足りない DB で縛る - #2100

Merged
takecchi merged 1 commit into
mainfrom
test/migrate-cli-extension-mode-verify
Oct 11, 2026
Merged

takecchi merged 1 commit into
mainfrom
test/migrate-cli-extension-mode-verify

Conversation

@takecchi

Copy link
Copy Markdown
Owner

変異の記録の地図(#1963)で packages/postgres/src/bin/migrate.ts は直接の記録が薄かった(PR #113 の変異8、#1116 の B10)。そこで変異を9形当てた。そのうち2形が生き残り、1形は約束が書かれていた。この PR はその1形を塞ぐ。

生き残っていた変異

bin/migrate.ts で、解釈した extensionMode を runMigrations に渡さない(--extension-mode verify を指定しても既定の create で流れる)。

bin/migrate.ts を子プロセスで起動する試験4ファイル(migrate-cli-process・migrate-cli-schema・analyze-memories・analyze-memories-scope、25件)がすべて緑のままだった。--extension-mode を CLI 経由で試す試験が無く、verify の振る舞いは runMigrations を直接呼ぶ extension-mode.postgres.test.ts だけが見ていた。

(同じ回で生き残ったもう1形〔finally の pool.end() を消すと、終了がプールの idle 待ちで遅れるだけで、終了コードも出力も変わらない〕は、約束が書かれていないので、塞がずに別の Issue にまとめる。)

約束はすでに書かれている

packages/postgres/README.md の CLI の節は、--extension-mode <create|verify> について「verify は何も発行せず pg_extension を読み、足りない拡張があれば拡張名と実行すべき SQL を示して失敗する(CREATE EXTENSION 権限を持たないロール向け)」と書いている(ADR 0093)。

足したもの

extension-mode.postgres.test.ts(直列の群)に「測定2b」を足した。測定2と同じ「vector だけが無い」使い捨ての DB に対して CLI を --extension-mode verify で起動し、次の3つを見る。

  • 終了コードが 1 になる。
  • stderr に CREATE EXTENSION IF NOT EXISTS vector; が出る。
  • vector の拡張も observations の表も作られない。

CLI の起動は migrate-cli-schema.postgres.test.ts と同じ形(tsx で src/bin/migrate.ts を叩く。env は PATH と渡したものだけ)にした。

変異で確かめたこと

手元の Postgres 17 + pgvector(5432 以外のポート)で確かめた。

  • main の実装: extension-mode.postgres.test.ts 7件すべて緑。
  • extensionMode を渡さない: 足した「測定2b」だけが赤(終了コードが 0 のまま、vector が作られた)。
  • prettier・eslint は通った。

…、拡張が足りない DB で縛る

bin/migrate.ts に変異を当てたところ、解釈した extensionMode を runMigrations に渡さない形が、bin/migrate.ts を子プロセスで起動する試験4ファイル(25件)のどこでも赤にならなかった。--extension-mode を CLI 経由で試す試験が無く、verify の振る舞いは runMigrations を直接呼ぶ extension-mode.postgres.test.ts だけが見ていた。この変異では、verify を指定しても既定の create で流れ、足りない拡張を黙って作ってしまう。

約束はすでに書かれている。packages/postgres/README.md の CLI の節は『verify は何も発行せず pg_extension を読み、足りない拡張があれば拡張名と実行すべき SQL を示して失敗する(CREATE EXTENSION 権限を持たないロール向け)』と書いている。測定2と同じ『vector だけ無い』DB に対して CLI を起動し、終了コード1・stderr の SQL・vector も表も作らないことを見る。
@takecchi
takecchi marked this pull request as ready for review October 11, 2026 15:46
@takecchi
takecchi enabled auto-merge (squash) October 11, 2026 15:46
@takecchi
takecchi merged commit 472ea32 into main Oct 11, 2026
37 checks passed
@takecchi
takecchi deleted the test/migrate-cli-extension-mode-verify branch October 11, 2026 15:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant