feat(adapter): fail loud on dbt v2/Fusion (v20) manifests#1446
Merged
kentwelcome merged 8 commits intoJul 3, 2026
Merged
Conversation
dbt v2/Fusion emits a v20 manifest; Recce's bundled dbt 1.x tops out at manifest v12 / catalog v1. Previously the path= load surfaced dbt's cryptic IncompatibleSchemaError and the data= load (upgrade_schema_version) did no version check at all. Add UnsupportedDbtSchemaError and a _guard_unsupported_schema helper that raises a clear, Recce-branded error when an artifact's schema is newer than the bundled dbt supports (found > supported), wired into both the path= and data= branches of load_manifest and load_catalog. The threshold check stays robust against a future legit dbt 1.x schema bump; older/incompatible versions keep dbt's own error. A-min only: detect + friendly message. Parsing v20 and cross-env v12-vs-v20 diff guards are tracked separately. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Wei-Chun, Chang <wcchang@infuseai.io>
…ning dbt The v20 guard compared the found schema against the *running* dbt's supported version. On the tox matrix (dbt 1.6/1.7, which support manifest schema < v12), a normal v12 manifest is 'newer than supported' there, so the guard mislabeled it as dbt v2/Fusion and the v12-fixture regression test couldn't load at all. Detect Fusion against a FIXED dbt-1.x ceiling (manifest v12, catalog v1) instead — an absolute boundary, since 'is this Fusion?' doesn't depend on which dbt is installed. An artifact merely too new for the installed dbt 1.x (e.g. v12 under dbt 1.6) now keeps dbt's own version error. Replace the version-fragile positive test with a version-agnostic boundary assertion. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Wei-Chun, Chang <wcchang@infuseai.io>
Codecov Report✅ All modified and coverable lines are covered by tests.
... and 3 files with indirect coverage changes 🚀 New features to boost your workflow:
|
…ifest-at-load-and-fail-loud-with
gcko
self-requested a review
June 24, 2026 00:26
…ifest-at-load-and-fail-loud-with
The guard's non-firing side was untested: an artifact at or below the 1.x ceiling that dbt rejects as too old must surface dbt's own IncompatibleSchemaError, not be mislabeled as Fusion. Covers the bare re-raise in both load_manifest and load_catalog path branches. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Wei-Chun, Chang <wcchang@infuseai.io>
Fix the UnsupportedDbtSchemaError docstring — "translates dbt's IncompatibleSchemaError" only described the path= branch; the data= branch raises without a dbt error to translate. Drop decorative wording and a v20/v12 rationale repeated in three places; the _DBT1X_MAX_SCHEMA comment is now the single source. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Wei-Chun, Chang <wcchang@infuseai.io>
dbt's is_compatible_version is a set-membership check, not an ordered "supports up to vN" ceiling, so "not the running dbt's version" framed the invariant with the wrong model. Spell out the maintainer rule (do not tie the ceiling to installed-dbt compatibility) with the dbt 1.6 + v12 example. Also name UnsupportedDbtSchemaError in the guard docstring instead of "a clear Recce error". Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Wei-Chun, Chang <wcchang@infuseai.io>
wcchang1115
marked this pull request as ready for review
July 2, 2026 08:52
…ifest-at-load-and-fail-loud-with
kentwelcome
deleted the
feature/drc-3699-detect-dbt-v2fusion-v20-manifest-at-load-and-fail-loud-with
branch
July 3, 2026 01:38
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR checklist
What type of PR is this?
feat: a fail-loud guard for unsupported dbt artifact schemas.What this PR does / why we need it:
dbt v2 / Fusion emits manifest schema v20; Recce's bundled dbt 1.x reads up to manifest v12 / catalog v1. Feeding a Fusion artifact to Recce today fails with dbt's internal schema error, or an unrelated
ValueErroron the cloud path; nothing tells the user that Fusion isn't supported.This PR detects the unsupported schema at artifact load (both local
target/files and cloud-loaded state) and raisesUnsupportedDbtSchemaError:This PR only detects and reports. It does not parse v20 artifacts or handle v12-vs-v20 cross-environment diffs.
Which issue(s) this PR fixes:
NONE
Special notes for your reviewer:
_DBT1X_MAX_SCHEMAneeds a manual bump. The rationale for the fixed ceiling is in the comment above the constant.path=branch catches and translates dbt'sIncompatibleSchemaErrorinstead of pre-checking the version, to avoid re-parsing large manifests and to leave artifacts dbt accepts untouched.Does this PR introduce a user-facing change?:
Yes. Feeding a dbt v2 / Fusion (v20) artifact now raises a Recce error naming Fusion and the supported versions, instead of dbt's internal schema-version error.