Migration Risk Engine
Framework M employs a risk-aware migration strategy designed to balance developer velocity with production stability. This is achieved through a core Migration Engine that sits between your declarative DocType definitions and the physical database.
The Problem: Opaque DDL
In many frameworks, applying migrations is an "all or nothing" operation. If a developer unknowingly drops a column or changes a field type that truncates data, the first time they notice is usually when production data starts disappearing.
Framework M solves this by introspecting the live database and performing a dry-run comparison before any DDL is actually executed.
Core Concepts
1. Introspection Adapters
The engine is decoupled from specific database implementations through a Port/Adapter architecture.
- Port (
IntrospectionProtocol): Defines the contract for reading schema metadata (tables, columns, indexes). - Adapters: Concrete implementations that handle the low-level communication with the database. Framework M provides a default SQLAlchemy Adapter which is database-agnostic, but third-party packages (like
MX-Mongo) can contribute their own engines.
This "Source of Truth" from the adapter is compared against your "Desired State" (the DocType blueprints in your code).
2. Risk Classification System
Every detected difference is categorized into one of three risk levels:
🟢 SAFE (Non-Destructive)
These changes can be applied without fear of data loss or service interruption.
- Examples: Adding a new table, adding a nullable column, adding an index.
- Action: Automatically applied in development; staged for review in production.
🟡 WARNING (Potentially Destructive)
These changes might result in data truncation or require careful validation.
- Examples: Shrinking a
VARCHARmax length, changing a column to non-nullable without a default. - Action: Requires explicit confirmation in CLI and warns the user in the Studio UI.
🔴 BREAKING (Destructive)
These changes will result in data loss or application crashes if not handled via Zero-Downtime Migration (ZDM) patterns.
- Examples: Dropping a column, renaming a column, changing a data type (e.g., Integer to String).
- Action: Blocked from automatic execution. Developers are directed to follow the ZDM Guide.
Visibility in the Stack
This engine is exposed at multiple levels:
- Studio Designer: Provides real-time feedback in the "Migration" tab as you modify fields.
- CLI: The
m migrate verifycommand allows developers to audit their changes before committing. - CI/CD: The risk engine can be used in PR checks to prevent dangerous migrations from reaching the main branch.