← All Releases

v0.2.39

2026-07-19

TRUE CONFIGS, TESTED CONNECTIONS

The trust release. dvt config-checkup makes model configs tell the truth — the engine's own federation classification applied to your files, provable problems fixed automatically, ambiguous ones offered as choices (AI-chat style, in the terminal and in Martin's cards alike). flip-target-to runs it first, always. Settings learns every authentication method your adapters speak — keypair Snowflake included, on BOTH lanes — and gains a TEST CONNECTIONS button that probes every connection on both layers and shows you exactly what's healthy. Underneath: an Oracle federation milestone, visible execution paths, and one clock.

ADDED

  • dvt config-checkup — the config truth pass, zero AI: the same federation classification the engine applies at runtime (foreign sources + the ref cascade), applied to your FILES. Provable problems fix automatically with a .bak: standard materializations whose dependencies are federated in fact become f_table/f_incremental (the engine was already coercing them silently — now the config says so), and materialization typos snap to their one legal neighbour. Ambiguous issues become CHOICES — target= on a standard materialization offers federate-or-drop, a source missing meta.connection offers your profile's actual outputs, needless federation offers convert-in-place (SQL transpiled) or keep. Enter always means skip. --silent for the plain report, and TTY detection keeps cron and CI from ever hanging on a question. Also /config-checkup in Chat with Martin: every suggestion arrives as a card with one button per resolution.
  • flip-target-to runs config-checkup FIRST, always — its scope decisions are only as good as the configs. On the founder's own test bench this caught eight mislabeled models a flip would have corrupted, fixed their configs, and skipped them correctly. Interactive aftercare too: refusals offer to open in your editor, and the run ends with the flip-anyway question instead of demanding --force.
  • dvt clean-bak-files — when you trust the fixes and the flips, remove DVT's timestamped .bak files from the model folders in one command (only DVT's own pattern; hand-made .bak files untouched). CLI + /clean-bak-files in Martin.
  • Settings speaks every authentication your adapters do: an AUTH TYPE dropdown per engine dynamically swaps the credential fields — Snowflake password / keypair / SSO / OAuth, BigQuery service-account / gcloud ADC, Databricks PAT / OAuth, SQL Server & Fabric SQL / Windows / Entra ID / service principal, Redshift password / IAM, Trino none / LDAP / JWT, Athena and S3 ambient / profile / access keys. Existing connections DETECT their method from the profile's own keys, and switching methods clears the abandoned method's fields — secrets included — so a stale password can never silently win over a fresh keypair.
  • TEST CONNECTIONS, in Settings: dvt debug --all underneath, structured — every connection probed on BOTH layers (dbt adapter + Sling data movement) in parallel, rendered live: per-connection badges, buckets marked Sling-only, real failure reasons inline, N/M fully operational. Seventeen connections in ninety seconds on the reference bench.
  • Snowflake keypair auth on the Sling lane: private_key_path (+ passphrase) now flows into federation's data movement, not just dbt's adapter — keypair profiles work end to end.

CHANGED

  • Oracle federation grew up: ONE casing convention (uppercase, the engine's native fold — dbt's unquoted SQL and federation's quoted extractions finally agree), seeds route through DuckDB-converted parquet so strings land as VARCHAR2 instead of CLOB (which Oracle refuses to GROUP BY or compare), and the sling-direct shortcut declines Oracle targets rather than produce DDL it can't type. The reference medallion chain now builds fully green on Oracle, byte-exact.
  • The run line tells you the execution path: [sling direct — computed on the source engine] appears whenever a model's whole query pushed down to one connection. What looked like 'all Slings, no pushdown' was maximal pushdown wearing a disguise.
  • One clock: DVT's federation lines now print UTC to match dbt's phases — run logs no longer jump hours between sections.
  • A dialect compensation layer closes sqlglot's own writer gaps (first entries: Oracle LEFT/RIGHT → SUBSTR), shared by federation extractions and flip-target-to.
  • Flipping to a mysql-family default now warns up front when sources declare database: — dbt-mysql refuses to parse those projects (an upstream adapter limit), and the warning says so before anything moves.

FIXED

  • The build's seed phase honors --select (it loaded every seed in the project, including two million-row QA monsters, on every run) — and a failed seed no longer sinks the whole build: later phases run, dependents fail honestly, the exit code still reports.
  • Selections tolerate shell quoting everywhere: a space-joined --select string now tokenizes in both the seed runner and the build wiring.

Get it: pip install dvt-core==0.2.39 · wheels on PyPI for macOS (arm64 + x86_64) and Linux, Python 3.10–3.12.