Database migration with a dry run
Writes the migration, dry-runs it in an ephemeral container, and puts the output in front of a person. The pull request opens only if they approve what it would do.
| Template | db-migration-dry-run |
| Works on | A git repository, cloned into an isolated Docker sandbox |
| Where a person acts | Approve migration plan before opening PR — a person approves or rejects, waiting up to 24h |
| Container step | Runs a command in an ephemeral container |
The workflow
Section titled “The workflow”Drawn from the template spec at build time. Bookkeeping nodes that only record status are left out; amber nodes are where a person acts.
flowchart TD n_validate["Validate"] n_implement["Implement"] n_dryRunMigration["Dry run migration<br/><small>sandboxed container</small>"] n_reviewMigrationPlan>"Approve migration plan before opening PR<br/><small>person: approval</small>"] n_openPR["Open PR"] n_terminateRejected(["Failed<br/><small>rejected</small>"]) n_terminateTimedOut(["Timed out"]) n_done(["Done"]) n_validate --> n_implement n_implement --> n_dryRunMigration n_dryRunMigration --> n_reviewMigrationPlan n_reviewMigrationPlan -->|"approved"| n_openPR n_reviewMigrationPlan -->|"rejected"| n_terminateRejected n_reviewMigrationPlan -->|"timed out"| n_terminateTimedOut n_openPR --> n_done class n_reviewMigrationPlan gate
Maturity: built from the flagship steps
Section titled “Maturity: built from the flagship steps”Ships as a built-in template and reuses the engineering steps the flagship flow runs. This particular arrangement of them is not separately exercised end to end against a real repository. See product overview §8.
Use it
Section titled “Use it”Every built-in template is seeded into the workflow library and can be cloned, edited on the visual canvas, and versioned — see architecture for the node types. The spec lives in packages/shared/src/workflow/templates/dbMigrationDryRun.ts.
© 2026 Jorge Barnaby
Source-available under FSL-1.1-MIT