|
| 1 | +## 2.0.0-alpha.2 |
| 2 | + |
| 3 | +Released June 18, 2026 |
| 4 | + |
| 5 | +### Features |
| 6 | + |
| 7 | +- [dbt-fusion] Added --empty support in seed command. |
| 8 | +- [dbt-fusion] Homebrew distribution: install the dbt Fusion CLI with `brew install dbt` from the official tap. |
| 9 | +- [dbt-fusion] GET /api/v1/models: add catalog field (row_count_stat, bytes_stat, last_modified_stat from warehouse INFORMATION_SCHEMA) and materialized field; dbt build --write-index now queries warehouse catalog stats and writes them to the parquet index |
| 10 | +- [dbt-fusion] Detect how dbt was installed (Homebrew, pip, winget, or the standalone installer) and surface the matching upgrade command; `dbt system update` now refuses to overwrite a binary managed by a package manager unless `--force` is passed. |
| 11 | +- [dbt-fusion] Redshift: use SHOW TABLES FROM SCHEMA for cross-database source freshness when datasharing is enabled |
| 12 | +- [dbt-fusion] Emit project-wide catalogs count on the parse-time ResourceCounts telemetry event |
| 13 | +- [dbt-fusion] (fabric) supports dbt init |
| 14 | +- [dbt-fusion] Interactive dbt login honors the DBT_OAUTH_SCOPES env var to request additional OAuth scopes. |
| 15 | +- [dbt-fusion] dbt docs serve reports actual login status in GET /api/v1/distribution |
| 16 | +- [dbt-fusion] Add Workload Identity Federation auth for BigQuery via Microsoft Entra |
| 17 | +- [internal] Add daily conformance-analysis collection: scheduled GHA collects the previous UTC day and uploads per-day error-lines parquet to S3; new `cargo conformance fetch`/`push` sync the bucket and `collect --start/--end` + `log-overlap --days N` enable multi-day analysis |
| 18 | +- [internal] Add `cargo conformance report`: a self-contained static HTML UI for an log-overlap run — templates ranked by impact, the concrete strings filling each drain3 `<*>` wildcard, and drill-down into the original log lines |
| 19 | + |
| 20 | +### Fixes |
| 21 | + |
| 22 | +- [dbt-fusion] (fix adapters/databricks) restore token-first dispatch for Databricks OAuth so dbt Studio's U2M flow works correctly. |
| 23 | +- [dbt-fusion] equals macro now uses IS NOT DISTINCT FROM clause for comparison |
| 24 | +- [dbt-fusion] update try_or_compiler_error to match dbt-core |
| 25 | +- [dbt-index] Preserve runtime invocation/run-result timestamps during direct fusion metadata ingest so dbt_rt.invocations.generated_at and dbt_rt.run_results.created_at are populated again |
| 26 | +- [dbt-fusion] Fix /api/v1/search returning 500 when dbt_rt.run_results parquet is absent (project never run with --use-index) |
| 27 | +- [dbt-fusion] Fix v2-parser path - preserve raw user-provided source identifier (including any embedded quote characters) on __source_attr__.identifier so dbt-core's source(...).identifier round-trips for packages like fivetran/zendesk that pre-quote reserved-word table names (e.g. Snowflake's GROUP) |
| 28 | +- [dbt-fusion] source freshness on_run_end hooks can now access result.node (unique_id, relation_name, etc.) — fixes compatibility with elementary and other packages that read result.node in on_run_end macros |
| 29 | +- [dbt-fusion] dbt State auth no longer caches the organization ID; it is always resolved from the live token scope, avoiding unnecessary browser re-authentication when a user's organization access changes between invocations |
| 30 | +- [dbt-fusion] Fix v2-parser path - hydrate ColumnInfo.dimension and ColumnInfo.entity from the column when YAML omits required fields, and skip serializing Option::None so dbt-core's mashumaro can deserialize fusion's writable manifest into ColumnDimension/ColumnEntity dict-form variants |
| 31 | +- [dbt-fusion] Fix v2-parser path - only blank path and original_file_path on public model nodes imported via publication artifacts; keep paths for public models from locally-resolved (local/git/registry) packages so dbt-core can write per-model compiled SQL instead of crashing with Errno 21 trying to write to an empty path |
| 32 | +- [dbt-fusion] Fix v2-parser path - emit hook operation nodes with original_file_path of ./dbt_project.yml (package-internal) and path with .sql extension so dbt-core writes compiled hook artifacts to the same per-package location it does without --use-v2-parser |
| 33 | +- [dbt-fusion] Fix Databricks panic when flattening `STRUCT` keys that were not string. |
| 34 | +- [dbt-core] Fix YAML selector `selector:` shorthand being silently ignored inside exclude/union, and fix nested `exclude` being dropped from the serialized manifest ([#15140](https://github.com/dbt-labs/dbt-core/issues/15140)) |
| 35 | +- [dbt-fusion] Show a clear warning when dbt_cloud.yml fails to parse instead of a misleading 'no credentials configured' error |
| 36 | +- [dbt-fusion] Fix schema routing for test failures when +schema: null is set in dbt_project.yml with store_failures: true |
| 37 | +- [dbt-fusion] Read DuckDB catalog column_index as a 32-bit integer instead of a decimal, fixing a type-mismatch error when collecting DuckDB column metadata |
| 38 | +- [dbt-fusion] Fix re.findall Capture objects to be sliceable sequences when pattern has 3+ capture groups |
| 39 | +- [dbt-fusion] Disable dbt State for unsupported adapters |
| 40 | +- [dbt-fusion] Fix manifest deserialization failing on no configs |
| 41 | +- [dbt-fusion] Fix manifest deserialization for fields that are not present |
| 42 | +- [dbt-fusion] Include Databricks-specific config attributes (auto_liquid_cluster, databricks_tags) in the semantic extras so dbt state comparison detects changes to them |
| 43 | +- [dbt-fusion] Search results are now ranked by relevance: exact name matches appear first, followed by prefix matches, then field-priority matches (name, column, tag, fqn, description), with resource type and modeling layer as tiebreakers. |
| 44 | +- [dbt-fusion] (fix adapter/databricks) retry on retryable errors |
| 45 | +- [dbt-fusion] Capture and surface failures for unit test schema fetch phase |
| 46 | +- [dbt-fusion] `Relation` now renders properly when the `region` is set on `project` or `database` |
| 47 | +- [dbt-fusion] Fix `model` storing none values as undefined |
| 48 | +- [dbt-fusion] LSP false dbt1089 warning |
| 49 | +- [dbt-fusion] Honor model-level `full_refresh: false` config on microbatch models under `dbt build --full-refresh` |
| 50 | +- [dbt-fusion] Emit M015 (DepsInstallInfo) only on successful package install, not M016 |
| 51 | +- [dbt-fusion] Allow target variables to be used in dbt_project.yml |
| 52 | +- [dbt-fusion] fix seed configs rejecting valid fields |
| 53 | +- [dbt-fusion] sidecar: DATEADD on TIMESTAMPTZ no longer fails the DuckDB binder under --compute sidecar |
| 54 | +- [dbt-fusion] Fix dbt State reuse for new data tests without cached results |
| 55 | + |
| 56 | +### Under the Hood |
| 57 | + |
| 58 | +- [dbt-fusion] Remove "models" path segment in computed fqn for manifest parity with Core |
| 59 | +- [dbt-fusion] Manifest parity with core fixes for groups |
| 60 | +- [dbt-fusion] Snapshot errors and logs now show phase-accurate paths for artifacts |
| 61 | +- [internal] Add `cargo ci homebrew render` and `cargo ci homebrew publish` subcommands for rendering and publishing Homebrew formulas. |
| 62 | +- [internal] Add reusable `publish-homebrew.yml` workflow that renders the formula and pushes it to a Homebrew tap. Used by the release pipeline and invokable ad-hoc via `workflow_dispatch`. |
| 63 | +- [dbt-fusion] Improve ClickHouse init: remove database and make password optional |
| 64 | +- [dbt-fusion] Extract package resolution behind PackageResolver trait per package kind, with concurrent resolution per BFS level |
| 65 | +- [dbt-fusion] Serialize external and its subfields for manifest parity with Core |
| 66 | +- [dbt-fusion] Refactor dbt-deps install to a trait-based PackageInstaller running concurrently via futures::join_all; per-variant impls only do install work and populate a shared InstallOutcome, while span lifecycle, telemetry, and error-path partial-progress stamping live in the trait default |
| 67 | +- [fusion] Route view-traversal source extraction through TypeOps so the run-cache uses sdf-frontend bind-context in proprietary builds and the SA sqlparser path otherwise |
| 68 | +- [dbt-fusion] Execute hooks on dbt State reuse |
| 69 | +- [dbt-index] perf(dbt-lineage): --write-lineage overhead reduced from +20s to +2.4s at 5 843 models: bypass build_lineage_environment via direct LineageRow→CLL edge extraction, fix redundant epoch-0 compaction |
| 70 | +- [internal] Add a dedicated dbt Core changelog (CHANGELOG-dbtcore.md) and sync it through copybara so dbt-core publishes its own changelog, starting at 2.0.0-alpha.1, separate from the dbt-fusion changelog |
| 71 | +- [dbt-fusion] Bump dbt-docs-v2 UI bundle to add dbt State banner (a0c6c196807e9e6f2b9ea4fa953e99c2d1031657) |
| 72 | +- [internal] Unify TypeOps source-extraction methods into a single extract_upstreams; absorb the standalone sdf_frontend dep_analysis::extract_sources_from_str into the same canonical path |
| 73 | +- [dbt-fusion] Emit catalog_type on the RunModel telemetry event, resolved from the model's catalog_name via the active write integration in catalogs.yml |
| 74 | +- [dbt-fusion] Re-enable and re-wire the dbt-repl integration test suite, disabled during the dbt-main modularization |
| 75 | +- [dbt-fusion] Use lag_tolerance in freshness reuse messages |
| 76 | +- [internal] Centralize server version lookup: `DistInfoProvider` gains a default `server_version()` method so `env!("CARGO_PKG_VERSION")` is defined in one place. |
| 77 | +- [dbt-fusion] Remove quoting field from SourceConfig; adapter-specific quoting defaults are now applied directly during source resolution instead of being propagated through the config struct |
| 78 | +- [internal] conformance: add `resolve-repro` subcommand (run_id → S3 artifact path via Datadog) and broaden `fetch-repro` to resolve the Teleport app + bucket per cell (global prod/prod-emea/prod-au, us-multicell, jp1), with --app/--aws-role/--bucket overrides for cells whose account isn't auto-resolved (eu/us2/us3/onprem) |
| 79 | +- [dbt-fusion] Bump bigquery driver for WIF auth support |
| 80 | + |
| 81 | +### Contributors |
| 82 | +- [@HannanNaeem](https://github.com/HannanNaeem) |
| 83 | +- [@agarovat](https://github.com/agarovat) |
| 84 | +- [@aiguofer](https://github.com/aiguofer) |
| 85 | +- [@ajhlee-dbt](https://github.com/ajhlee-dbt) |
| 86 | +- [@akbog](https://github.com/akbog) |
| 87 | +- [@b-per](https://github.com/b-per) |
| 88 | +- [@dataders](https://github.com/dataders) |
| 89 | +- [@dbtagarovat](https://github.com/dbtagarovat) |
| 90 | +- [@eakmanrq](https://github.com/eakmanrq) |
| 91 | +- [@eddowh](https://github.com/eddowh) |
| 92 | +- [@itsnamangoyal](https://github.com/itsnamangoyal) |
| 93 | +- [@izeigerman](https://github.com/izeigerman) |
| 94 | +- [@j-clemons](https://github.com/j-clemons) |
| 95 | +- [@jcserv](https://github.com/jcserv) |
| 96 | +- [@kczimm](https://github.com/kczimm) |
| 97 | +- [@koletzilla](https://github.com/koletzilla) |
| 98 | +- [@lottaquestions](https://github.com/lottaquestions) ([#15140](https://github.com/dbt-labs/dbt-core/issues/15140)) |
| 99 | +- [@mach-kernel](https://github.com/mach-kernel) |
| 100 | +- [@ragesh-g](https://github.com/ragesh-g) |
| 101 | +- [@serramatutu](https://github.com/serramatutu) |
| 102 | +- [@sriramr98](https://github.com/sriramr98) |
| 103 | +- [@tauhid621](https://github.com/tauhid621) |
| 104 | +- [@vgapeyev](https://github.com/vgapeyev) |
| 105 | +- [@xuliangs](https://github.com/xuliangs) |
0 commit comments