## dlt-hub/dlt — 1.28.2…1.29.0

_36 commits._

### Features
- **feat(bigquery): implement atomic replace via GCS-staged WRITE_TRUNCATE_DATA (#4130)** (6718e78)
- **feat: handle cross-batch schema evolution in ArrowToParquetWriter (#3… (#3896)** (940d889)
- **feat(claude): add git commit-message rule, hook, and /commit skill (#4098)** (270004e)
- **add join compatibility based on `physical_location` to destination configurations (#3905)** (7164e9d)
- **feat: clickhouse staging-optimized (#3927)** (a9eda0a)

### Fixes
- **fix: Normalize crashes with ArrowInvalid when adding _dlt_id to an empty Arrow table (#4187)** (d8f0b23)
- **fix(airflow): auto-disable staging truncation for parallel runs (#4052) (#4079)** (1fe9c29)
- **(fix) moves misplaced merge subqueries to post-qualify (#4169)** (ffa63da)
- **fix(extract,normalize): correct table/resource metric aggregation (#4155)** (cd33d77)
- **(fix) switches replace strategy correctly (#4164)** (e3d2b52)
- **(fix) use truncate mechanism for "replace" tables without data (#4153)** (8edf432)
- **fix(dashboard): keep the pipeline selector when no pipeline is selected (#4096)** (9899c3b)
- **Fix logging more frequent than log_period (#3962)** (fde4692)

### Backend
- **Merge pull request #4208 from dlt-hub/devel** (7f2b659)
- **Merge branch 'master' into devel** (43d4159)
- **bumps to version 1.29.0 (#4203)** (6b38c42)
- **reuses job client when truncating staging dataset (#4207)** (a0930e8)
- **(chores) relaxes dlthub-client deps (#4202)** (8d8ef5a)
- **(chores) pre 1.29.0 release cleanups (#4178)** (4dbb2fd)
- **(feat) expose parquet compression codec (#4183)** (82951ac)
- **Bump jsonpath-ng and improve test coverage (#4105)** (3985a79)
- **(chore) refactor ibis handover (#4170)** (6a83696)
- **uses empty files to truncate top level tables (#4168)** (7f38d75)
- **(feat) drop `dlt` to `dlthub` command proxying in workspace context (#4037)** (88aaba3)
- **(feat) implements aws secret manager config provider (#4162)** (3d34b39)
- **make soft deletes description clearer (#4165)** (ee0b422)
- **(feat) enables duckdb sqlalchemy destination (#4161)** (185951c)
- **Additional copy options (#4088)** (554ac27)
- **fixes windows path for griffe tests (#4104)** (b462ecb)
- **Explicit joins in Relation.join() (#3868)** (5dbf922)

### Docs
- **docs(filesystem): add Tigris to `filesystem` destination (#4166)** (a1cca12)
- **Docs: page for playground workspace (#4150)** (525681b)
- **Docs: playground destination  (#4148)** (8073962)
- **docs(hub): add Orchestrate with dltHub Cookbook entry (#4077)** (a6c01de)
- **docs(hub): guide for email and Slack notifications (#4081)** (392caaa)
- **docs(hub): add secrets management page (#4124)** (f2c15d4)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/dlt-hub/dlt?utm_source=github-action)._