Use when creating or modifying database schema migrations (tables, indexes, constraints, backfills) in the infra module's Flyway migration directory.
Generates Flyway SQL migrations that comply with scaffold rules—no foreign keys, explicit constraints, and safe backfills for PostgreSQL.
REQUIRED: Follow GENERATOR_SKILL_STRUCTURE.md. Variables in VARIABLES.md.
Templates: See references/templates.md.
{{infraModuleDir}}/src/main/resources/db/migration/Vx__*.sqlinfra-mybatis-po-mapper-generator{{infraModuleDir}}/src/main/resources/db/migration/Vx__<desc>.sqlV1.0.X__outbox_event.sql, V1.0.X__workflow_instance_step.sqlunique + check constraints for invariants.{{infraModuleDir}}/src/main/resources/db/migration/V1.0.5__inbox_event_processing.sql{{infraModuleDir}}/src/main/resources/db/migration/V1.0.4__workflow_instance_step.sql*IT if migration changes affect claim/update semantics.| Mistake | Why It Happens | Fix |
|---|---|---|
| Adding foreign key constraints | Habit from monolith schemas | Use application-level integrity; FK is forbidden in scaffold |
| Missing indexes for status/time-based scans | Focus on schema correctness, forgetting query patterns | Add composite indexes for claim queries (status, next_retry_at, locked_until) |
| Non-rerunnable backfill migrations | Using INSERT without ON CONFLICT or guards | Wrap backfills in idempotent statements (ON CONFLICT DO NOTHING or conditional logic) |
| Forgetting CHECK constraints for status enums | Treating status as a free-form string | Add CHECK (status IN (...)) matching the domain's state machine |
mvn -q clean test minimum, mvn -q clean verify if DB behavior changed)requesting-code-reviewscaffold-router, dev-workflow-ddd-implementation-workflowinfra-mybatis-po-mapper-generator, infra-store-implementation-generator, infra-bc-repository-generator, infra-it-db-generator