Features
- Add
ExecutionMode.WATCHER_KUBERNETESmode with test handling by @vricciardulli in #2529 and #2543 - Support dbt docs on Kubernetes via
DbtDocsS3KubernetesOperatorby @jx2lee in #2058 - Add
use_tarballoption to theupload_to_gcp_gscallback by @TTMichaelA in #2497 - Add AWS and Azure tarball upload options by @TTMichaelA in #2553
- Expose
freshness_callbackinExecutionConfig.setup_operator_argsforExecutionMode.WATCHERby @pankajastro in #2586 - Allow templating dbt deps installation via
ExecutionConfigby @pankajastro in #2728 - Add configurable seed rendering behavior by @pankajkoti in #2755
- Render ephemeral dbt models as
EmptyOperatorby default by @pankajkoti in #2759 - Support per-node callbacks via string import paths by @highlyavailable in #2781
- Map Snowflake
query_tagfrom connection extras to dbt profile by @pankajastro in #2650 - Add Snowflake profile mapping for non-encrypted private key file by @pankajastro in #2660
- Export Clickhouse and encrypted Snowflake mappings from
cosmos.profilesby @pankajastro in #2668 - Forward Snowflake
insecure_modefrom connection Extra into dbt profile by @toor11 in #2744 - Extend Snowflake profile mappings with
authenticator,client_session_keep_alive,host, andportby @Aaditya-git in #2748 - Support
extra__google_cloud_platform__projectinGoogleCloudServiceAccountDictProfileMappingby @jroachgolf84 in #2626 - Enable the orjson parser for the whole project (experimental) by @corsettigyg in #2552
- Warn when users pass output-only template fields to local operators by @goingforstudying-ctrl in #2737
Enhancements
- Replace
openlineage-airflowwithapache-airflow-providers-openlineageby @tatiana in #2753 - Refactor handling of watcher producer-only dbt flags by @tatiana in #2717
- Disclose the
--no-static-parserflag inExecutionMode.LOCALby @pankajkoti in #2714 - Refactor
_default_freshness_callbackto return a list of(id, state)tuples by @pankajastro in #2572 - Restore dynamically resolved user-provided node types by @jroachgolf84 in #2608
- Promote inline watcher status collections to named constants by @pankajastro in #2671
- Align
WATCHER_KUBERNETESproducer defaulttask_idwithPRODUCER_WATCHER_TASK_IDby @tatiana in #2794 - Centralize version-aware
EmptyOperatorimports in a compatibility module by @pankajkoti in #2758 - Move
safe_copyout ofcosmos.cacheintocosmos.fsby @pankajkoti in #2715 - Refactor seed checksum hashing and caching helpers by @pankajkoti in #2784
- Avoid O(n^2) string accumulation in
store_compiled_sqlby @pankajastro in #2751 - Use GA versions for
propagate_logsinprovider_infoby @pankajastro in #2712 - Use
cosmos.log.get_loggerconsistently by @pankajastro in #2670 - Use lazy logging instead of f-strings in logger calls by @pankajastro in #2672 and #2680
- Ban eager module-level imports of optional providers via ruff by @tatiana in #2743
- Remove unused
# type: ignorecomments and re-enablewarn_unused_ignoresby @pankajastro in #2710 and #2763 - Drop the Python <3.9 fallback for
functools.cacheby @pankajastro in #2732 - Remove stale Airflow 2.3 comment on
registry_conn_iddefault by @pankajastro in #2766 - Remove an outdated TODO on watcher terminal-status handling by @pankajastro in #2697
- Unify operator logging on
self.logby @pankajastro in #2681 - Centralise
resource_nameextraction from dbtunique_idby @pankajkoti in #2687 - Tighten
# type: ignorecomments to specify error codes by @pankajastro in #2711
Bug Fixes
- Fix
example_cosmos_sourcesto use a dbt project with sources by @jroachgolf84 in #2614 - Unify Postgres
profiles.ymlacross dbt example projects by @yeoreums in #2501 - Pin
dbt-core<2.0in virtualenv example DAGs to avoid alpha pickup by @pankajastro in #2752
Docs
- Create a glossary stub by @lzdanski in #2461
- Improve the glossary: fix structure, add Cosmos-specific terms by @pankajastro in #2618
- Add a top-level FAQ page by @tatiana in #2635
- Align the FAQ page with the documentation style guide by @tatiana in #2667
- Update docs for
DbtDocsS3KubernetesOperatorby @jx2lee in #2575 - Add docs for
ExecutionMode.WATCHERand thedepends_on_pastlimitation by @tatiana in #2602 - Document watcher mode dbt 1.5+ requirement by @tatiana in #2700
- Improve clarity for
watcher_dbt_execution_queueby @jroachgolf84 in #2705 - Document
compiled_sqlandfreshnessas output-only template fields by @00yhj22-debug in #2719 - Document seed rendering behavior by @pankajkoti in #2757
- Document tradeoffs of remote cache and disabling the dbt ls cache by @pankajkoti in #2722
- Document the LOCAL vs WATCHER benchmark on the Helm chart by @pankajkoti in #2688
- Enhance S3 dbt docs documentation by @jroachgolf84 in #2765
- Restore memory-optimised imports docs for Cosmos < 1.14.0 by @pankajkoti in #2604
- Update dbt and Airflow Spark URLs in profile mapping docstrings by @pankajastro in #2695
- Remove a duplicate
node_conversion_by_task_groupentry in render config docs by @pankajkoti in #2770 - Capitalize Docker as a product name in prose by @pankajkoti in #2623
- Normalize heading underlines across docs by @pankajkoti in #2641, #2655, #2656, and #2663
- Add language hints to docs code-block directives by @pankajastro in #2686
- Add the Cosmos 1.14.2 row to the watcher-retry behavior history by @tatiana in #2742
Others
- Reduce integration test CI time from ~30 min to ~16 min by @pankajkoti in #2562
- Speed up Airflow 3.1+ integration tests by caching
InProcessExecutionAPIby @pankajkoti in #2547 - Carve dbt-loom tests into a dedicated CI job by @pankajastro in #2761
- Re-enable the cross-project dbt ls example DAG in the dbt-loom CI job by @pankajkoti in #2775
- Move test jobs that need no secrets to an unprivileged
pull_requestworkflow by @pankajkoti in #2791 - Remove the Authorize gate from CI jobs that don't use secrets by @pankajkoti in #2567
- Avoid running tests when PRs from forks only change docs by @tatiana in #2583
- Forward extra args to the test-integration hatch script by @tatiana in #2682
- Add
release-*branches forpull_request_targetto run CI on release branches by @pankajkoti in #2603 - Pin pre-commit hooks and GitHub Actions to commit SHAs by @pankajkoti in #2610, #2611, #2612, and #2613
- Set
persist-credentials: falsefor checkout in the actionlint workflow by @pankajkoti in #2793 - Stop the stale bot from auto-closing PRs by @pankajkoti in #2746
- Make local
hatch run docs:buildfail on Sphinx warnings by @pankajkoti in #2639 - Skip the watcher gateway test on Airflow 3.0 by @tatiana in #2607
- Add an example DAG for seed rendering behavior by @pankajkoti in #2756
- Add integration tests for ephemeral models rendered as empty operators by @pankajkoti in #2760
- Improve coverage for
DbtRunAirflowAsyncBigqueryOperatorby @pankajastro in #2733 - Add test coverage for
DbtModel._extract_configbranches by @pankajastro in #2779 - Extract project conventions into
AGENTS.md; slimCLAUDE.mdby @tatiana in #2703 - Document the AI agent attribution convention by @tatiana in #2718
- Teach AI agents to use pre-commit before committing and pushing by @tatiana in #2702
- Instruct Claude Code to read
AGENTS.mdfor commands before running them by @pankajkoti in #2774 - Document docs build and serve commands, and the docs style guide, in
CLAUDE.mdby @pankajkoti in #2637 and #2665 - Bump black from 26.3.1 to 26.5.1 by @pankajkoti in #2727
- Bump codecov-action to v6.0.2 by @pankajkoti in #2786
- Dependency updates by @dependabot in #2541, #2555, #2571, #2578, #2579, #2582, #2588, #2589, #2609, #2621, #2627, #2651, #2674, #2707, #2721, #2724, #2725, #2730, #2745, #2783, #2789, and #2790
Milestone: Cosmos 1.15.0