Featured Open Source CI Tool

Parallax

v0.1.0 // OPEN SOURCE Apache 2.0 Zero DB Credentials

Blast Radius & Semantic Drift CI for dbt.

Parses SQL Abstract Syntax Trees (ASTs), maps downstream lineage across your entire dbt DAG in memory, and blocks the PR before a filter tightening or dropped column silently corrupts executive dashboards. Operates statically with no warehouse credentials, zero API latency, and no staging cloud bills.

Python 3.10+ SQLGlot (25+ Dialects) NetworkX (DiGraph) Pydantic v2 dbt Core & Cloud GitHub Actions
terminal Quickstart & Zero-Config Demo
No dbt project or credentials needed
$ git clone https://github.com/Ramprasad273/parallax.git
$ cd parallax && pip install -e .
$ parallax demo
# Runs the filter tightening scenario against a synthetic dbt manifest in < 1s
[01] AST Analysis

AST Semantic Diff Engine

Leverages SQLGlot to parse changed SQL models into typed expression trees. Distinguishes cosmetic whitespace from breaking semantic drift: predicate tightening, condition loosening, column drops, and join structure mutations across 25+ SQL dialects.

[02] In-Memory Graph

In-Memory Lineage Traversal

Loads compiled dbt manifest.json into an in-memory NetworkX directed graph. Instantly computes full reachable downstream subgraphs (nx.descendants) reaching marts, reporting models, and executive BI exposures.

[03] Schema Contracts

Multi-Hop Column Tracing

Performs multi-hop AST tracing through aliases and transformations. If an upstream staging model drops or renames a column, Parallax identifies every downstream model where schema contracts break before tests even execute.

[04] Deterministic CI

8-Rule Deterministic Risk Engine

Assigns CRITICAL, HIGH, MEDIUM, or LOW severity using eight deterministic rules. Deliberately built with zero LLMs and zero network calls for 100% reproducible CI exit codes and automated pinned PR comment updates.

Real PR Case Study

The "Innocent" Filter Tightening That Silently Corrupts Financials

BEFORE (models/staging/stg_orders.sql)
SELECT order_id, customer_id, status, order_total * 0.95 as net_booked_amount, order_date
FROM raw_orders
WHERE status NOT IN ('returned', 'cancelled');
AFTER (models/staging/stg_orders.sql)
SELECT order_id, customer_id, status, order_total * 0.95 as net_booked_amount
FROM raw_orders
WHERE status = 'delivered';
18 Models Affected across 4 DAG hops
3 Exposures Board Financials, Executive ARR, Sales Sync
CRITICAL CI exits with code 1 & blocks PR merge