-
-
One DROP COLUMN. Five downstream assets examined: 2 breaking, 2 at risk, 1 safe, 3 patches.
-
Every verdict cites DataHub lineage, schema, ownership, and indexed-query evidence.
-
Actionable output: four notification targets plus a safe expand-migrate-verify-contract rollout order.
-
SQL patches distinguish mechanical rewrites from semantic edits that require human review.
The problem
You are about to drop a column. Downstream are finance models, a SELECT * report whose shape will drift, and an unowned executive dashboard. DataHub knows they are connected. A lineage graph shows what is downstream; it does not prove what actually breaks.
In the included DataHub Core 1.7.0 run, Blast Radius made 11 MCP calls and examined five downstream assets: 2 BREAKING, 2 AT RISK, 1 SAFE. It generated 3 SQL patches, 4 notification targets, a safe rollout order, and a PR-blocking exit code.
What Blast Radius does
Blast Radius turns one proposed DDL or dbt-model change into a multi-step plan:
- Resolves the table to its DataHub dataset URN with
search. - Traverses downstream lineage with
get_lineage. - Retrieves asset metadata, ownership, schemas, and indexed SQL with
get_entities,list_schema_fields, andget_dataset_queries. - Parses the SQL with sqlglot and classifies every asset with inspectable evidence.
- Generates mechanical SQL patches when the intent is provable;
WHERE,JOIN, andGROUP BYchanges are marked for review instead of guessed. - Groups the owners who need to act, including an explicit
(unowned)finding. - Produces a rollout order and a CI exit code. The optional
--write-backpath appends a warning withupdate_descriptionand saves a linkedAnalysisdocument withsave_document.
The decisions are deterministic; the agent autonomy is in gathering and acting on catalog context. BREAKING means indexed SQL references the column. AT RISK means the evidence is incomplete or shape may drift. SAFE means every indexed query parsed and none references it. Missing evidence is never called safe.
Why it is different
Lineage answers “what is connected?” Blast Radius answers “what has evidence that it will break?” and then carries that answer into reviewable code, owner routing, CI, and optional catalog context. Renames preserve the old output alias so downstream consumers survive. Drops remove dead projections. Semantic edits get a TODO, not invented business logic.
DataHub is the core, not decoration
Blast Radius uses the official DataHub MCP Server (mcp-server-datahub@0.6.0) against DataHub Core or DataHub Cloud. The catalog supplies the lineage, entity types, owners, schemas, and—most importantly—the indexed queries that make a verdict provable. The optional mutation path uses the current update_description and save_document schemas and requires TOOLS_IS_MUTATION_ENABLED=true; its argument contracts are covered by focused tests.
Technical execution
The project was tested against a live DataHub Core 1.7.0 instance, not only mocks. That run exposed a client bug: the MCP SDK exposes tool schemas as input_schema, while the wire uses inputSchema. Fixing that prevented silently dropped search arguments, and the fixtures/examples were recaptured from the corrected live payloads.
The offline demo replays those recorded payloads through the full pipeline. The suite now has 57 passing tests, including regression tests for write-back schemas, multi-file CI behavior, judge-facing documentation, canonical examples, and an installed-wheel demo proving its fixtures are actually packaged.
git clone https://github.com/bgrubbs1/blast-radius
cd blast-radius
pip install -e ".[dev]"
blast-radius demo --out out/
pytest -q
Public 78-second demo · Apache-2.0 source · Canonical output
Built with
Python 3.10+, DataHub Core 1.7.0, DataHub MCP Server, MCP Python SDK, sqlglot, rich, httpx, pytest, and GitHub Actions. The dataset is synthetic; owner names are fictional.
Honest limits
Proof is only as complete as DataHub’s query index. Assets with no indexed SQL remain AT RISK. Dashboards and charts are judged conservatively from lineage. Generated query patches are a reviewable start to a pull request, not a claim to understand undocumented business intent.
Built With
- datahub
- github-actions
- httpx
- mcp
- model-context-protocol
- python
- rich
- sqlglot
Log in or sign up for Devpost to join the conversation.