What problem does it solve? OrangeHRM uses a custom forward-only migration system with no rollback, no Doctrine Migrations bundle, and a hand-maintained version registry, so writing or debugging a migration without knowing the conventions leads to migrations that never run, half-applied schemas, or broken upgrades. ## Core Features & Use Cases - Migration authoring guidance: Explains the AbstractMigration contract, the MIGRATIONS_MAP registry, and the Doctrine DBAL SchemaHelper patterns for creating tables, changing columns, and juggling foreign keys. - Install vs upgrade semantics: Clarifies how the installer runs all migrations from 3.3.3 while the upgrader runs only newer versions, plus the migration:up dev command for iterating on a single migration. - Recovery and debugging: Documents how to diagnose failed migrations via ohrm_migration_log, resolve "previous migration incomplete" errors, and recover half-applied schemas. - Use Case: When shipping OrangeHRM 5.9.0, you create installer/Migration/V5_9_0/Migration.php, register it in MIGRATIONS_MAP, bump build/build.xml, update CHANGELOG.TXT, and test with migration:up before running the full upgrader path. ## Quick Start Ask the agent to create a new OrangeHRM migration for version 5.9.0 that adds a column to an existing table and registers it correctly.