:sparkles: Features
* Improve table diff sample output in CLI (3017) Themiscodes
* Improve environment loading performance by lazy evaluating snapshot and snapshot id fields (3038) crericha
* Allow creating environments without changes when using selector (3060) izeigerman
* Add clickhouse engine adapter (3019) treysp
:beetle: Bug fixes
* Skip loading context on run closes 1511 (3037) tobymao
* Rename renderer cache so it's not serialized (3039) tobymao
* Don't cache snapshot intervals (3041) izeigerman
* User-provided plan end must take precedence over the max interval end per model (3042) izeigerman
* Add path to Invalid model definition error, fixes 3040 (3045) akv-akv
* Heuristics that determine the default start date of the forward-only preview plan (3043) izeigerman
* Allow omitting the MODEL (...) block when name inference is activated (3049) georgesittas
* Test failure caused by a new version of rich (3053) izeigerman
* Don't process models that have already been processed (3052) tobymao
* Seed and model column mismatch due to normalization (3036) Themiscodes
* Handle missing source target aliases in sample data diff (3046) Themiscodes
* **(bigquery)** Do not use execution_project as default catalog in partitions query (3056) treysp
* Handle metaprogramming inspect.getfile TypeError (3058) georgesittas
* Cache inclusive exclusive for performance (3057) tobymao
* Ignore expired environments in the selector (3059) izeigerman
* Retain indexes when creating state table backups (3061) izeigerman
:broom: Chore
* Document batch_concurrency for unique_by_key closes 3031 (3034) tobymao
* Bump sqlglot to v25.17.0 (3048) georgesittas
* Treat the target environment as missing during planning if it's expired (3051) izeigerman
:alien: Other
* Document unavailable schema placeholder for sqlmesh macros (3035) georgesittas
* Beautify README (3068) sungchun12
* Move README images to docs/readme/ (3069) treysp