1.5.0 (2026-08-31)
Features
- a --source for every subcommand, and the operations story (#188) (b69a0b4)
- a ceiling on total retry time (#162) (547df29)
- a keyed pseudonym transform (#164) (d118b38), closes #143
- a Kubernetes operator (#202) (bb7c06d), closes #147
- a lookup transform (#165) (60ab49e)
- a pgvector sink (#193) (8781038), closes #185 #186
- a Qdrant sink (#194) (1d22926), closes #187
- a rate limit for the initial load (#155) (5ff180d), closes #144
- add and remove a table on reload (#199) (293a7ac), closes #170
- aggregate children keep a count live (#189) (ba5ab79), closes #179
- fan out a delimited column, and let the element be the join parent (#190) (ee0c0ae), closes #180
- flatten a one-to-one child into the parent document (#191) (ad72c29)
- Helm readiness probe and PodDisruptionBudget (#160) (8172a82)
- load a directory of configs and validate them together (#168) (ccd8427)
- many-to-many children through a junction table (#156) (2c5b2c5)
- opt-in OpenTelemetry traces (#167) (afdd8ff), closes #152
- reload the configuration without a restart (#169) (ab2ad96), closes #145
- require_alias refuses writes past the alias (#158) (e6fe2a4)
- retry a source that is unreachable at startup (#197) (510b91f), closes #172
- run every configured source in one process (#174) (99570b3)
Bug Fixes
- a MySQL table removed on reload stops being decoded (#200) (8c037e7)
- writes through the alias satisfy require_alias on Elasticsearch (#196) (8dabf40), closes #178
What's Changed
- ci: the e2e suites take one machine-wide lock by @kennywillbe in #157
- docs: three scope decisions from the survey by @kennywillbe in #153
- ci: ci-local waits for another run instead of refusing by @kennywillbe in #159
- feat: a rate limit for the initial load by @kennywillbe in #155
- docs: secrets-manager recipes for the environment by @kennywillbe in #154
- ci: ci-local holds the e2e lock around seeding too by @kennywillbe in #161
- feat: many-to-many children through a junction table by @kennywillbe in #156
- feat: require_alias refuses writes past the alias by @kennywillbe in #158
- feat: a lookup transform by @kennywillbe in #165
- feat: Helm readiness probe and PodDisruptionBudget by @kennywillbe in #160
- feat: a ceiling on total retry time by @kennywillbe in #162
- ci: run the required checks on the merge queue by @kennywillbe in #166
- docs: how pull requests land without a merge queue by @kennywillbe in #171
- ci: the e2e lock owner claim ends with the lock by @kennywillbe in #175
- feat: a keyed pseudonym transform by @kennywillbe in #164
- ci: action majors that run on Node 24 by @kennywillbe in #176
- feat: load a directory of configs and validate them together by @kennywillbe in #168
- ci: cache the dependency build and replace fixed sleeps by @kennywillbe in #177
- feat: reload the configuration without a restart by @kennywillbe in #169
- feat: opt-in OpenTelemetry traces by @kennywillbe in #167
- chore: current contact links and verification steps in the templates by @kennywillbe in #182
- feat: run every configured source in one process by @kennywillbe in #174
- ci: isolated stacks so ci-local runs can go in parallel by @kennywillbe in #173
- feat: a --source for every subcommand, and the operations story by @kennywillbe in #188
- feat: aggregate children keep a count live by @kennywillbe in #189
- feat: fan out a delimited column, and let the element be the join parent by @kennywillbe in #190
- feat: flatten a one-to-one child into the parent document by @kennywillbe in #191
- ci: prove the PostgreSQL-derived services in the matrix by @kennywillbe in #192
- feat: a pgvector sink by @kennywillbe in #193
- feat: a Qdrant sink by @kennywillbe in #194
- ci: every sink runs the conformance kit by @kennywillbe in #195
- fix: writes through the alias satisfy require_alias on Elasticsearch by @kennywillbe in #196
- feat: retry a source that is unreachable at startup by @kennywillbe in #197
- feat: add and remove a table on reload by @kennywillbe in #199
- fix: a MySQL table removed on reload stops being decoded by @kennywillbe in #200
- ci: the init section talks to its own stack when isolated by @kennywillbe in #201
- feat: a Kubernetes operator by @kennywillbe in #202
- chore: release 1.5.0 by @kennywillbe in #163
Full Changelog: v1.4.0...v1.5.0