✨ Features
- (dbt) Add support for on-run-start and on-run-end hooks (#4044) @themisvaltinos
- Add host/port to snowflake connection settings (#4023) @cduarte-ta
- Improve CLI evaluation progress bar (#4000) @treysp
- Add CICD bot check for linting (#4027) @VaggelisD
- State import/export (#4038) @erindru
- Make model tests run concurrently (#4047) @VaggelisD
🪲 Bug fixes
- Fix macros with spaces to make them more consistent (#4052) @tobymao
- Fail instead of warn if cleaning up an environment failed (#4054) @izeigerman
- Set allow_partials models for all dbt model kinds, including full refresh models (#4060) @izeigerman
- Pass the model dialect when computing a hash for the column types (#4067) @izeigerman
- Single blueprint edge case (#4071) @georgesittas
- Make jinja_macros optional for environment statements (#4072) @themisvaltinos
- Dont wrap macro vars and str replacements in intervals (#4073) @georgesittas
- Python serialization edge case (#4074) @georgesittas
- Account for array types when showing sample in table diff (#4077) @themisvaltinos
- Serialize blueprint variables separately to leverage AST (#4061) @georgesittas
- Make dialect in dbt init noncompulsory again (#4087) @themisvaltinos
- Retain DBX SQL execution log level when updating spark engine adapter (#4085) @treysp
- Refreshing snapshot intervals for uncategorized snapshots when state is stored in databricks (#4095) @izeigerman
- Use duckdb to store state in bigquery / snowflake integration tests @izeigerman
🧹 Chore
- Fix linter docs for new command (#4057) @VaggelisD
- Bump sqlglot to v26.12.1 (#4062) @georgesittas
- Fix airflow tests (#4063) @erindru
- Fix escape char warning (#4065) @georgesittas
- Update dbt integration doc sqlmesh init command to avoid init error (#4066) @JunqiYangjqy
- Add args and kwargs parameters to BaseNotificationTarget notif… (#4070) @vchan
- Update blueprint docs (#4078) @georgesittas
👽 Other
- Update with new design (#4083) @sungchun12