The migrator was importing the full payload.config.ts which loads lexical
editor + form-builder plugin — very heavy modules that caused the process
to be SIGKILL'd (exit 9) on the VPS.
The new migrate.ts builds an inline minimal config: only the postgres
adapter + explicit migrationDir. No editor, no plugins, no
collections/globals needed to run raw SQL migrations. This should fit
comfortably within VPS memory limits.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
pnpm payload migrate exits 1 in the migrator container likely due to TLA
issues with Lexical packages (same issue seen with migrate:create).
Replace with a small src/scripts/migrate.ts that calls payload.db.migrate()
programmatically, using the same NODE_OPTIONS approach that works for seed.ts:
NODE_OPTIONS="--experimental-strip-types --no-require-module"
Also add migrator log output to the CD workflow for easier debugging.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>