Repository navigation
v0.16.0 — stronger safety checks and explicit CI errors
dbt-plan v0.16.0 — stronger safety checks and explicit CI errors
This release expands analysis and changes the CLI error contract. Read the upgrade
notes before updating CI consumers from 0.15.x.
Breaking changes
- Execution failures exit 3. Completed destructive findings still exit 1 and
review findings still usewarning_exit_code(default 2). Invalid arguments,
unreadable configuration, missing required inputs, compile failures and recovery
failures cannot be accepted as completed warning reports. - Exit code 3 is reserved. Change any
warning_exit_code: 3configuration
before upgrading. - Invalid selections fail. Unknown, empty or unsupported
--selectterms exit
3, including a mix of valid and invalid names. Select versioned models with an
explicit version or compiled file name.
See exit codes and migration
and selection semantics.
Highlights
- Check source and compiled-artifact evidence, including data-test SQL left behind
by partial compilation. Invalid or incomplete inputs require review. - Detect snapshot and Python-model changes from manifests, relation/configuration
changes without SQL edits, and casts added or removed on one side. - Resolve EXCLUDE/EXCEPT against known columns and preserve readable columns when
another expression is unknown. Quoted case-sensitive identities remain explicit
uncertainty rather than being silently folded into a match. - Follow column losses through ephemeral models; check downstream contracts,
generic-test predicates and overrides, versioned unit-test inputs, and exposure
owners. SQL snapshot checks cover complete files, including multiple blocks. - Show the analysis dialect and baseline revision/time. Use
agent-setup --file
to write guidance to a chosen instruction file. - Preserve Git worktree/index recovery during
runfailures, and make generated
CI install dependencies consistently for uv and requirements.txt projects.
Upgrade notes
- Handle exit code 3 as an execution failure and review custom warning codes.
- Check existing selection expressions, especially versioned models.
- Update package and Action references together. Pin
version: '0.16.0'in the
Action if reproducibility is required; its empty version input installs latest. - Regenerate generated workflows to adopt the installation and gating fixes,
then review project-specific settings. New generated CI defaults to blocking
destructive findings while allowing completed warnings. Execution errors
always fail, including when the Action usesfail-on: never. - Recompile inputs and review new warnings. Some previously successful checks
now refuse to claim safety. Existing workflow files are not automatically
rewritten by a package upgrade.
pip install --upgrade dbt-plan==0.16.0The Action preserves adapter inference when dialect is empty. JSON reports gain
an analysis object, and text reports show dialect/baseline metadata; consumers
that parse terminal text or reject additional JSON fields should check their parser.
Python DataFrame schemas, live warehouse introspection and full quote-aware column
lineage remain outside this release's analysis. MCP run was deliberately not
added because checkout/stash/compile can conflict with concurrent agent edits.
Verification
Required CI covers Python 3.10–3.14 on Linux and Windows, the minimum sqlglot
version, built packages, real dbt/DuckDB execution, MCP and the composite Action.
The execution tests create incremental targets before testing the second run;
optional integrations and built-package checks must not silently skip in their
required jobs. Snowflake/Postgres behavior was not validated against live warehouses.
Full changelog
· Audit resolutions and review follow-ups
Contributors
Thank you @1cbyc and @insisong for fixing verbose configuration-file loading and adding parsing, precedence and JSON-output regression tests in #229. Your contribution shipped in v0.16.0.