Skip to content

Module 1 — Parse and deprecations#

Gate: dbt parse must succeed before anything else runs.

Start with dbt Core#

First, confirm what dbt Core thinks of this project:

dbt parse --no-partial-parse --show-all-deprecations

dbt Core parses it, builds it, and reports deprecation warnings:

[WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated functionality
Found top-level arguments to test `accepted_values`. Arguments to generic tests
should be nested under the `arguments` property.

[WARNING][DeprecationsSummary]: Summary of encountered deprecations:
- MissingArgumentsPropertyInGenericTestDeprecation: 11 occurrences

Warnings. The project still builds. This is exactly the position most teams are in: deprecations have been accruing quietly for a year and nothing forced the issue.

Now run dbt Core v2#

dbt parse
Finished 'parse' with 19 warnings and 14 errors for target 'dev'

The same project. Fourteen errors, and it will not proceed.

Read the errors — they fall into three groups:

[error] [SerializationError (dbt1013)]: Invalid model definition
  `merlinco_apothecaries.marts.materialized`: Unrecognized key
  `merlinco_apothecaries.marts.materialized`. Custom keys must go under `+meta`.
  --> dbt_project.yml:38:21

[error] [UnusedConfigKey (dbt1060)]: While parsing config: Ignored unexpected
  key `"docs"`. YAML path: `docs`.
  --> models/marts/_marts__models.yml:6:5

[error] [DbtYamlValidationError (dbt1159)]: Deprecated test arguments:
  ["values"] at top-level detected. Please migrate to the new format under the
  'arguments' field.
  --> models/staging/abra_pos/_stg_abra_pos__models.yml:33:23

Plus two more of the dbt1060 kind, which are not deprecations — they are misspelled config keys that dbt Core has been silently discarding:

[error] [UnusedConfigKey (dbt1060)]: Ignored unexpected key `"materialised"`.
[error] [UnusedConfigKey (dbt1060)]: Ignored unexpected key `"unique_keys"`.

Those two have consequences well beyond a parse error, and Autofix handles them badly. They get their own module — 1c — Silently ignored config — which you should do before running Autofix here.

Why materialized without a + is an error, not a typo

In dbt_project.yml, config keys take a + prefix. Without it, the key is ambiguous with a subdirectory name — marts.materialized could mean "the materialized config for marts" or "a folder called materialized". dbt Core guesses; dbt Core v2 makes you say which.

Run dbt-autofix#

uvx dbt-autofix@latest deprecations --dry-run

Read the dry run before applying it. It proposes seven changesets:

  • generic-test arguments moved under arguments (11 tests)
  • model-level docs: moved under config:
  • + prefix added to marts.materialized
  • deprecated target-path removed
  • flags.require_generic_test_arguments_property set to true

Read every line of the dry run

Two of the changesets say Moved custom config [...] to 'meta'. That is Autofix telling you it does not recognise a key and is relocating it somewhere legal — which silences the error and keeps the bug. See Module 1c before you apply anything.

Then apply it:

uvx dbt-autofix@latest deprecations
dbt parse
Finished 'parse' with 19 warnings for target 'dev'

Fourteen errors down to zero. Nineteen warnings remain.

Finish the job by hand#

Autofix cleared all thirteen errors and left the nineteen warnings alone:

[warning] [ValidateMacroArgs (dbt1506)]: macros/_macros.yml: Macro
  "copper_to_gold": argument "column_name" has unsupported type "varchar".
  Supported types are: string, str, boolean, bool, integer, int, float, any,
  relation, column, list[T], dict[K,V], optional[T], T1|T2|...

Those nineteen are their own exercise — and the obvious fix for them is wrong. Go to Module 1b — Macro argument types, then come back here to verify.

Once they are done:

dbt parse
Finished 'parse' successfully for target 'dev'

Confirm you did not break dbt Core#

Autofix rewrote your YAML and set a behavior flag. Verify the project still builds on the engine that is currently serving production:

dbt build      # dbt Core
Done. PASS=94 WARN=0 ERROR=0 SKIP=0 NO-OP=0 TOTAL=94

Green, and dbt Core no longer reports deprecations either. Both engines are now happy with the same code — which is what makes a staged rollout possible.

Trust, but verify Autofix

A July 2026 Autofix regression mis-classified compatible package versions as incompatible, affecting roughly a thousand projects. It is fixed, but the habit it should leave you with is the right one: read the --dry-run, and re-run your dbt Core build after applying changes.

Module 1c shows the everyday version of this, where Autofix turns the gate green and leaves data corruption running.

Takeaways#

  • dbt Core's deprecation warnings are dbt Core v2's parse errors. Clearing them is not optional cleanup — it is the first gate.
  • Autofix handles the mechanical majority. It does not touch warnings — see Module 1b for the nineteen it leaves behind.
  • Autofix can also make a finding disappear without fixing it. See Module 1c.
  • --dry-run first, and re-verify on dbt Core afterwards.

Solution branch: solution/01-deprecations