Inspiration
Every data engineer knows the 3 a.m. failure that starts with someone renaming a column. The upstream team ships a harmless-looking schema change, and hours later every dbt model and Airflow DAG that referenced the old name breaks at once. The metadata to catch this already exists in DataHub - versioned schemas and column-level lineage - but today a human has to read it, grep the pipeline repos, and hand-write the fixes. We wanted to close that loop: the same metadata that reveals the blast radius should drive the code that repairs it.
What it does
Syntrace is an autonomous agent that runs against a live DataHub Core instance - no mocked data anywhere:
- Detects breaking schema changes by diffing DataHub's versioned
schemaMetadataaspects (renames, drops, adds, type changes - renames matched by type + name similarity). - Traces the column-level blast radius through the official DataHub MCP Server
(
get_lineagewith itscolumnparameter), with a transparent GraphQL fallback. - Generates fixed dbt SQL and Airflow DAG code deterministically - renames propagated at any depth, dropped columns stubbed at the first hop to preserve downstream contracts.
- Prepares a GitHub PR with a human-readable impact report (dry-run by default).
- Writes the fix back to DataHub on four surfaces: remediated fine-grained column
lineage, renamed downstream schema fields, a
syntrace-remediatedtag (attached via the MCPadd_tagsmutation tool), and a remediation note in each asset's documentation - so the catalog immediately reflects the healed pipeline.
Run it twice and the second run reports zero remaining impact - because the catalog
was genuinely healed. It also ships a web dashboard, a CLI, a DataHub Skill
(skills/syntrace-drift-remediation), and loads DataHub's official sample datasets.
How we built it
Python standard library only for the core (nothing to install), talking to DataHub over four surfaces: the MCP Server (stdio) for agent-context reads, GraphQL for entities and search, OpenAPI v3 for versioned-aspect reads and writes, and the DataHub Python SDK for seeding. The demo scenario is ingested as real metadata into a real catalog. 93 live-integration tests run against the running DataHub - zero mocks, enforced by a hygiene test.
Challenges we ran into
- Eventual consistency: DataHub's search index lags aspect writes; we had to add
read-your-write barriers (
async=false) and index-lag retries after reseeds. - MCP mutations are opt-in:
tools/listshows 6 read tools until you setTOOLS_IS_MUTATION_ENABLED=true(18 tools) - and there is no lineage-write tool, which is why write-back deliberately uses OpenAPI v3 alongside MCPadd_tags. - A self-mutating test environment: the agent's own write-back changes the catalog the tests read, so the suite restores pinned catalog state between runs.
What we learned
Metadata platforms aren't just documentation - with column-level lineage and versioned schemas, DataHub has everything needed to make pipelines self-healing. The gap was never the data; it was an agent willing to act on it and write its results back.
What's next
Real warehouse connectors beyond the demo scenario, sqlglot-based SQL rewriting for complex expressions, PR review-loop integration, and upstreaming our drift-remediation skill to the datahub-skills catalog.
Log in or sign up for Devpost to join the conversation.