N3 versioning constraint (Perfex App_module_migration): - installed_version parse: str_replace('.', '', version) - migration filenames: /^\d{3}_(\w+)$/ (exactly 3 digits) - _update_version uses wordwrap($migration, 1, '.', true) Therefore module 1.1.0 → migration 110 is correct. Do NOT use 1.0.10 (becomes 1010 / 1.0.1.0 and breaks migration discovery).