The compiler that retires ETL estates — and proves it.
Point it at a PowerCenter, SSIS, DataStage, or Talend export. Every mapping routes through one canonical AST and comes out the other side as Teradata, Snowflake, or BigQuery artifacts — with a confidence score, a decision trace, and a typed blocker for anything no tool could infer.
Sign in to the Control Room Google SSO · your runs and workspaces are scoped to your identity.
- PowerCenter XML
- SSIS
- DataStage
- Talend
- dbt
- CDC
- SQL/DDL
- INSERT/SELECT · MERGE
- CREATE TABLE DDL
- BTEQ · Airflow · Control-M · Kestra
- runtime package
- OpenLineage JSON
- column lineage graphs
- explain.json
- readiness: READY
Deterministic by construction
The same export always produces the same SQL. A source adapter parses the tool-specific export once, at the boundary, into typed canonical facts — each carrying evidence, trust, and confidence. A planner freezes every decision into a typed MappingPlan. Fail-closed emitters render it: they never invent an identifier, a table name, or a strategy. A missing decision is a build error — never plausible-but-wrong SQL. Anything that cannot be safely automated becomes a typed, counted ACTION REQUIRED marker, never a silent drop.
$ python main.py --source-tool powerCenter --target teradata --profile teradata-production --folder estate/ --output out/ --with-validation --with-workflows --scheduler airflow --explain-facts full queued running · parsing source export… planning… lowering… emitting… validating… writing explain traces… succeeded · readiness: READY
- Preview command — the exact python main.py argv, reproducible outside the app.
- Queued execution — live-tailing Log, elapsed time, Cancel.
- Profiles — discovery · teradata-production · snowflake-cloud · dbt-modern · strict.
Readiness, not estimates
The verdict is a file, not a feeling.
Every run ends in a machine-readable readiness report: READY, REVIEW_REQUIRED, or BLOCKED. Every mapping gets a confidence score built on 36 deterministic inputs, classified HIGH / MEDIUM / LOW / BLOCKED. A strict profile turns thresholds — confidence floors, fallback-rate ceilings, blocker categories — into a CI pass/fail. Compare any run to a baseline and see exactly which mappings moved, band by band.
- HIGH
- MEDIUM
- LOW
- BLOCKED
In the app, each bar drills down to the affected mappings and their evidence.
READY is a status, not a status meeting.
Evidence on every fact
A confidence score you cannot audit is a vibe. Every mapping opens into Evidence, Proofs, Translation, Trace, and Runtime: classified signals with explainers linking to the exact explain.json line; a proof bundle across Semantic, Ordering, Replay-safety, and Adapter facets; equivalence and write-contract verdicts; side-by-side diffs of source expression versus translated SQL; an ordered decision trace — rule id, decision, confidence — for every choice the compiler made.
{
"evidence": {
"source_product": "powerCenter",
"source_object_ref": "operation:RNK_BY_REGION",
"source_property": "Top/Bottom",
"extraction_method": "parsed"
},
"trust": "declared",
"confidence": "exact"
}
-- infa2td generated
-- Source : m_RANK_TEST.xml
-- Folder : estate
INSERT INTO DW.FACT_ORDERS_RANKED ( … )
SELECT …
FROM STG.STG_ORDERS_RANK
QUALIFY ROW_NUMBER() OVER (PARTITION BY REGION
ORDER BY AMOUNT DESC NULLS LAST) <= 10;
{
"status": "READY",
"confidence_score": …,
"counters": {
"diagnostic_count": …,
"blocker_count": …,
"warning_count": …,
"manual_action_count": …
}
}
The decision basis for cutting over a mapping without parallel-running it.
Gates, not goals
# every number below is pinned by a CI gate or a checked-in manifest
sources: PARITY_COVERAGE.md · function_manifest.json · Makefile · pyproject.toml · CONFIDENCE_SCORING.md · MATURITY_MATRIX.md · GENUINE_CEILINGS.md
Invariants are build failures, not review requests.
Ten lenses over every run
- WORKSPACE upload the source export
- CONFIGURE Profile · Target · Scheduler
- RUN queued, live-tailed, cancellable
- TRIAGE readiness, evidence, diffs
- SHIP download the .zip
One workbench puts the inputs, the generated code, and every analysis lens side by side.
- Readiness KPIs, band donut, failure Pareto with drill-down.
- Validation row-count reconciliation matrix per table.
- World View the whole estate as one graph, ringed by band.
- Parameters unresolved setup burden, ranked.
- Code view Monaco over every artifact, jump-to-line.
- Scheduler Map workflow task DAGs, linked to the script at line.
- OpenLineage column-level lineage: field ← source.field.
- Graph visualiser the engine's .dot graphs, rendered in-browser.
- JSON Model explain.json explored as a node graph.
- Explain Map how each mapping decomposed into execution units.
Workspaces shared as viewer or editor · Teams · manual actions tracked: Open / In progress / Resolved / Won't fix · Download .zip — the deployable deliverable.
The run list is waiting.
Create a workspace, upload the source export, pick a Profile and Target, and press Run. Triage readiness. Inspect evidence. Download the .zip.
Google SSO via oauth2-proxy · internal tool · no self-serve signup.
Deterministic in. Provable out.