The migration method
Assess, plan, convert, certify, cut over, attest — six governed stages, the residue tripwire, and why the factory beats the toolkit.
Airlift's method is a factory, not a script. Six stages, each a set of governed actions with policies and structural state machines; the funnel is the state machine.
1. Assess
The Lakebridge Analyzer runs as a Databricks workspace job (ADR-002) — never a local
Python process. Execution lives in the customer workspace; the report lands in a UC
volume; airlift.assessment_record records the job run, the report reference, the object
counts, and the pinned analyzer version. A result without a tool version is not
reproducible evidence, so the schema refuses it.
The assessment alone is a sellable deliverable: the estate inventory with complexity scoring and wave candidates, signed by the audit trail that produced it.
2. Plan
airlift.wave_plan and airlift.wave_assign group discovered objects into cutover
waves. Waves are governed state from the moment they exist: the planner is recorded, and
separation of duties (airlift.cutover_separation.v1) guarantees the planner can never
approve their own wave. Objects can only be assigned while the wave is still planned —
an approved wave's scope is frozen.
3. Convert
Two lanes, one funnel:
- Deterministic first. The Lakebridge Converter (BladeBridge / next-gen transpiler) runs as a workspace job over each object. Most estates see the majority of their SQL surface convert here.
- Agent repair loop for the residue. A Fabric Harness agent proposes translations for
what the deterministic pass could not handle, executes them in a sandboxed Databricks
SQL context, compares against sampled source data, and iterates — or parks the object in
reworkfor a human.
Both lanes use the same governed actions (conversion_start, conversion_record), so
the attempt ledger, tool versions, and funnel counts are always consistent. Agent actors
are policy-bounded (airlift.agent_conversion_bounds.v1): they convert, they never
decide.
4. Certify
Parity suites (via @fabricorg/databricks-testkit) compare source and target, and
airlift.parity_certify records a parity certificate that
states its own evidence depth. The airlift.parity_evidence.v1 policy enforces the
organization's configured minimum depth and snapshot freshness, and rejects certificates
that claim a depth without carrying its evidence.
The advertised factory metric is deliberately strict: % of in-scope objects auto-converted with a parity certificate — not raw conversion accuracy.
5. Cut over
airlift.cutover_execute is gated by airlift.cutover_gate.v1:
- every wave object certified (or explicitly excluded);
- for high-blast-radius estates (configured environments, or priority-classified), the
configured number of distinct approvals collected via
airlift.wave_approve; - the
planned → executingapproval-skip edge reserved for low-blast-radius (dev) rehearsals.
The worker executes the cutover as a durable workflow: a condition()-style approval
gate that fails closed on expiry or denial, an effector step that never auto-retries
(non-idempotent), and completion reported back through airlift.cutover_record — which
also moves every certified object to cutover in the event log.
airlift.cutover_rollback is a first-class governed action.
6. Attest
airlift.evidence_export assembles the replayable evidence pack for a wave or an object:
assessments, conversion attempts with tool versions, certificates with evidence depth,
approvals (who, when), execution, completion, rollback if any — plus the governance
revision in force. The pack is content-digested (sha256), and the export itself is an
audit event, so the stream proves what was attested without storing the pack.
The residue tripwire (ADR-004)
Written down in week 1 so it cannot be quietly renegotiated later: if the Phase-1 residue spike — 20–30 real source objects through Lakebridge — shows more than 60% of estate objects need human-only conversion, the agentic conversion story is weak, and Phase 2 pivots to a productized governance+evidence play with conversion fully delegated. The funnel, certificates, gates, and evidence stand either way; that is the point of building the factory around the tool instead of the tool into the factory.
Result (2026-08-01): tripwire NOT tripped. The spike ran live on serverless
workspace jobs against the public Northwind estate — 36 real T-SQL objects (13 tables,
16 views, 7 procedures). The deterministic pass auto-converted 35 of 36 (residue
2.8%); the single failure was a genuine PARSING error in a stored procedure —
exactly the class the Phase-2 repair agent exists for. Caveats are recorded in the ADR
(Northwind is a simple estate; the protocol is re-run per design-partner estate before
committing scope), and every outcome was loaded through governed actions into the
durable funnel.
Supported sources
Every source track in the Databricks M&M program is covered — Microsoft SQL, Snowflake, AWS Redshift, Azure Synapse, Oracle, Hadoop, and Teradata — plus Netezza beyond the list.
Parity certificates
The artifact the product hangs off — a certificate that states its own evidence depth, and the policy that refuses one that overclaims.