← All Releases

v0.2.15

2026-07-02

LINES THAT TELL THE TRUTH

Every result line now carries its own story — rows inserted in green, coercion notes in yellow, no warning wall — and errors finally say what actually broke. Underneath: three engine fixes surfaced by real pipeline reshaping, and environments that heal their own Rosetta relics.

CHANGED

  • Result lines carry their own tags: [N rows inserted] in green on every success, and — for coerced models — [ran as f_table instead of view] in yellow, replacing the upfront warning wall entirely.
  • Sling failures now surface the lines that explain them, with the log noise stripped; a crash before any output is reported as exactly that. The log formatter can no longer fabricate 'DECOMPOSE: ? sources identified' out of unrelated messages.

FIXED

  • {{ this }} reads where the loader landed: jinja incrementals with an explicit target= probed the manifest schema instead of the override output's profile schema — invisible when the two coincided, fatal the moment they didn't.
  • Ephemeral dependencies resolve through: dbt inlines ephemerals as CTEs at compile time, and DVT's relation resolver now substitutes their upstreams exactly as dbt compiled them — plain ephemerals and coercion-promoted ones alike.
  • Predicate pushdown learned scope discipline: a filter over a CTE (a ROW_NUMBER() alias like rn = 1) is no longer pushed onto the base table where the column doesn't exist. Unqualified predicates push only when their own SELECT reads the relation's table directly.
  • Isolated environments self-heal on Apple Silicon: envs created before the native-only rule (x86_64 interpreters hunting Intel Homebrew paths) are detected by their binary headers and rebuilt natively on the next dvt sync.

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