2.0.0-alpha.4
Released July 06, 2026
Features
- [dbt-fusion] DuckDB: read-write Horizon and Unity (Iceberg REST) catalogs via duckdb 1.5.4 / duckdb-iceberg#1017 write-compat ATTACH options (stage_create_tables, disable_multi_table_commit, etc.). Upgrades the read-only support from the base PR.
- [dbt-fusion] DuckDB catalogs.yml v2: DuckLake, Iceberg REST, and local filesystem catalogs with catalog-aware materializations, plus read-only Horizon and Unity attachments (writes land with duckdb 1.5.4, #10950)
- [dbt-fusion] [Redshift] Switch the database context per node via
USE/RESET USEwhen datasharing is enabled and the node targets a non-default database - [dbt-fusion] dbt-agent: add guidance for surrogate key dbt_project.yml vars, incremental full-refresh after logic changes, staging enrichment LEFT JOIN, fct-to-dim LEFT JOIN, pre-computed age field warning, and cumulative standings MAX vs ROW_NUMBER
- [dbt-fusion] dbt-agent: add guidance for propagating source column type changes (INT→VARCHAR) to all downstream models
- [dbt-fusion] dbt-agent: add guidance for staging column inference vs source reuse, missing-column add-not-remove, enumerate-all-affected-models, time-bounded seed+JOIN pattern, mandatory full-refresh after surrogate_key rename
- [dbt-fusion] dbt-agent: mandatory --full-refresh after surrogate_key rename prominently in surrogate_key.md
- [dbt-fusion] Extract dbt-agent into dedicated crate with prompts, runner, integration tests, and benchmark scripts
- [fusion] Add GET /api/v1/identity endpoint to dbt-docs-server
- [fusion] Bump bundled dbt-docs-v2 UI to 862e5855aaa42463d3b5c34f4b53622ca32721fb
- [fusion] Add compiled code toggle to the Code tab and consolidate exposure metadata fields into the unified Metadata section
- [fusion] Show row count stat in the model list view
Fixes
- [dbt-fusion] BigQuery: qualify schema name with target project in create_schema and drop_schema so datasets are created in the correct project when execution_project differs from database
- [dbt-fusion] (dbt-auth) SparkConnect auth profiles have clear internal representaiton. To the user view, no "user" is required (but may be provided). An ambient authentication mode which entrusts connections to the networking layer et. al is added."
- [dbt-fusion] Accept comma-separated ref()/source() calls within a single depends_on list item and tolerate a trailing } after a Jinja expression in descriptions, matching dbt-core leniency.
- [dbt-fusion] dbt agent build: surface YAML parse errors via OTEL probe; fix panic on wrapped-negative line numbers in context_snippet; use --write-metadata instead of --write-index
- [dbt-fusion] Fix Databricks incremental run SQL error when using custom PK constraints: correctly expose constraint attributes (type, name, render) to Jinja templates and normalize custom PK expressions for stable incremental diffs
- [fusion] Fix panic when a query result contains a map with non-scalar (struct) values, e.g. map<string,struct<...>>. dbt-agate now has a StructConverter so struct columns render as dicts instead of failing an unsupported Struct->Utf8 cast.
- [fusion] Fix unique_id parity with dbt-core for singular and schema tests
- [fusion] Fix ambiguous ref panic for cross-project publication models when used as v2 parser
- [fusion] Fix operation nodes missing alias, database, schema, tags, config, and index in manifest
- [dbt-core] Fix macro original_file_path prefixed with dbt_packages/ instead of being package-relative (#11381)
- [dbt-core] state:modified no longer flags seeds whose meta config is set as environment-aware Jinja in dbt_project.yml. (#15286)
- [dbt-core] state:modified no longer flags snapshots whose target_schema, target_database, or alias configs are set as environment-aware Jinja in dbt_project.yml. (#15286)
- [fusion] Fix explorer breadcrumbs, layout, and filter view behavior; hide analyses everywhere when the hasAnalysis feature flag is off
- [fusion] Read has_dbt_state from the capabilities API instead of hardcoding false; hide the dbt State upsell for projects that already have dbt state enabled
- [fusion] When warn_error_options upgrades a Jinja exceptions.warn() call to an error, the node message in run_results.json now shows a clean Compilation Error with the warning text, matching dbt-core behavior
- [dbt-index] Redshift warehouse tools now accept 'dbname' field in profiles.yml (standard dbt-redshift field name)
- [fusion] Use unrendered configs to flag changes for models and sources in state:modified selector
- [dbt-core] state:modified no longer flags snapshots whose dbt_valid_to_current config is set as environment-aware Jinja in dbt_project.yml. (#15286)
- [fusion] Fix dbt State evaluate_volatile_sql config semantics so true evaluates volatile SQL and false allows reuse.
- [dbt-core] Include the snapshot filename in the snapshot fqn to match dbt-core, fixing false-positive state:modified results when dbt-core compares against a Fusion-generated manifest (#15286)
- [dbt-index] Fix dbt-index regressions: CLL parquet not produced on baseline→strict static-analysis transition
- [internal] route tests to manifest.disabled when both parent model and test are explicitly disabled
- [fusion] Hide the
completionssubcommand from dbt help output - [dbt-core] state:modified no longer flags data tests whose tags or meta configs are set as environment-aware Jinja in dbt_project.yml. (#15286)
- [fusion] Use redshift_database_name when checking Redshift SVV_EXTERNAL_TABLES.
Under the Hood
- [fusion] Resolve send_anonymous_usage_stats for docs serve with precedence --no-send-anonymous-usage-stats > DBT_SEND_ANONYMOUS_USAGE_STATS env > dbt_project.yml flags block > default true, and wire it into analytics_enabled on GET /api/v1/identity
- [fusion] Migrate dbt-docs-v2 data layer from hand-rolled fetch hooks to TanStack Query
- [fusion] Consolidate nine near-identical FilterView components into a shared GenericFilterView adapter, removing ~1100 lines of duplication
- [fusion] Implement array_except as a native DuckDB extension function (sf_array_except) instead of a SQL macro