Open source · Python

data-doctor

Diagnose a data-pipeline failure against a version-aware knowledge bank, and get the exact fix. It runs offline. It suggests, it never touches your systems.

A curated bank, not another guess

It is not a model that guesses at your stack trace. It reads an error or a log. It matches that against a bank of known failures. Then it shows the fix, with its source, the versions it applies to, and how sure it is. You apply the fix and say whether it worked. The bank gets better with every correction.

Diagnose

Match an error

Pipe in an error or point at a file. Get the ranked fixes, each with a cause, a source, and a confidence.

Triage

Scan a whole log

Split a noisy log into distinct failures and match each one, so one repeated crash collapses to one result.

Verify

Prove the fix

Reproduce the error in a sandbox, or run an allowlisted tool against your project, then confirm the fix runs clean.

Check

Catch an upgrade

Read the versions your project pins and warn about a breaking change before the upgrade bites.

Learn

Grow with feedback

A worked fix raises an entry's confidence. A failed one lowers it. The bank learns from you.

Offline

Stays on your machine

A local DuckDB bank and an instant lexical match. No model and no network in the core path.

Recover a lost Iceberg snapshot

A table read fine at 09:30. Then routine maintenance ran, and the same read failed. A scheduled job had expired the Iceberg snapshot behind that read, so time travel could no longer reach it. Spark could not find it. DuckDB returned zero rows.

The recovery rebuilds the lost state by hand from the files that survived. The path has many traps, so a clean but wrong row count is easy to produce. Frontier models miss it for this reason. data-doctor matches the error to the fix, hands you the exact recipe, and ships a runnable example that proves it.

The reference answer is 1375 rows, from snapshot 1418591960033102530, read against schema 3.

# install the reader extra, then reproduce, diagnose, and verify
pip install "data-doctor[iceberg-demo]"
python3 examples/iceberg_asof/naive_read.py          # the failure, exit 1
data-doctor seed && data-doctor add examples/entries/iceberg-asof-demo.yaml
data-doctor verify iceberg-asof-expired-snapshot --allow-commands \
  --project examples/iceberg_asof
#   ✓ reproduced the error; the fix runs clean

Install

The core install is small and offline. The extras are optional.

pip install data-doctor        # not yet on PyPI; for now, from source:
pip install -e .
pip install -e ".[iceberg-demo]"   # adds the Iceberg example readers
data-doctor seed               # load 152 known failures
data-doctor diagnose err.txt   # match an error and print the fix