dbt-core 2.0.8 - Catalog Flag Fix and a Lower Python Floor


dbt-core 2.0.8 was published on October 14, 2026. The most important change for pipelines is a fix that makes dbt build --write-catalog write catalog.json again. It also fixes spurious TableNotFound errors during analyze and lowers the Python floor for the PyPI wheels to 3.10.

The full release notes and downloads are on the GitHub release page. This is a stable release, not a prerelease.

If you run dbt build --write-catalog and feed catalog.json to a docs host, a data catalog, or a freshness check, read this part first.

The release notes describe the failure plainly. The change that shipped as #13328 made build and check imply an index default. That default overrode the explicit --write-catalog flag. The catalog step was skipped, and nothing told you.

The notes say this was first observed in 2.0.0-preview.218. So any pipeline that moved through the preview line and relied on that flag may have been missing catalog.json for a while. Version 2.0.8 restores the documented behavior. The explicit flag wins again.

The failure mode matters more than the bug. A skipped artifact with exit code zero is the kind of thing that surfaces weeks later as a stale dashboard. Nothing crashes, so nothing pages anyone.

What to check after upgrading:

  • Confirm target/catalog.json exists after a dbt build --write-catalog run in CI.
  • Compare its modification time with the run time of the build.
  • If a downstream job consumes the file, add an existence check so a skipped write fails loudly next time.

The tradeoff is small. The fix is a restore of intended behavior, so the main cost is verifying that the regenerated catalog matches what your consumers expect after a gap.

The second fix is in the analyze path. The notes say spurious TableNotFound errors came from MapReduce silently dropping a key. The key was claimed by a worker whose connection report the driver had not yet observed.

In plain terms, this is a race. A worker claimed a key, the driver had not yet seen that worker’s connection report, and the key was dropped without any error. Later the table lookup failed, and the error pointed at the table instead of the lost key.

That is a hard class of bug to debug from the outside. The tables were there. The error message blamed the warehouse object, so the natural next step is checking grants and schemas, which finds nothing.

If you saw intermittent TableNotFound errors during analyze that disappeared on rerun, this is a likely cause. The notes do not give a frequency or a minimum worker count, so do not assume your setup was or was not affected. Rerun counts from your own logs are the better signal.

The one feature entry lowers the minimum supported Python version for the dbt and dbt-oss PyPI wheels to 3.10.

This helps platform operators who pin base images. Many fleets still carry Python 3.10 in older runner images, Airflow worker images, or shared tooling containers. A higher floor forces an image rebuild just to take a patch release. With 3.10 accepted, those images can install the wheels directly.

The tradeoff is on the support side. A lower floor means the project carries compatibility with an older interpreter for longer. The notes say nothing more about the reason or the test matrix, so check your own resolver output rather than assuming every optional dependency also supports 3.10.

A quick check in a build image:

python --version
pip install dbt
pip show dbt

The only Under the Hood entry adds ProjectEnv::empty, ProjectBuilder::baseline and TaskSeq::from_builder. These are test helpers for building programmatic integration test projects.

This is internal. It does not change runtime behavior and needs no action from operators. It is useful mostly to contributors who write integration tests against the Rust side of the codebase.

The release notes list no breaking changes and no migration steps. Practical steps for this upgrade:

  • If you used --write-catalog on dbt build since a preview build, regenerate and verify catalog.json.
  • If you pinned Python 3.11 or newer only because of the old floor, you may relax that pin.
  • If you hit TableNotFound during analyze, retest on 2.0.8 before opening a warehouse ticket.

Contributors credited in the notes are @HannanNaeem, @ash2shukla, @eddowh and @mishamsk. The details of each fix are in the release notes.