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 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#
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#
Read the dry run before applying it. It proposes seven changesets:
- generic-test arguments moved under
arguments(11 tests) - model-level
docs:moved underconfig: +prefix added tomarts.materialized- deprecated
target-pathremoved flags.require_generic_test_arguments_propertyset totrue
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:
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:
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:
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-runfirst, and re-verify on dbt Core afterwards.
Solution branch: solution/01-deprecations