From 574d856ed37fdec15a9408fa8b49dd5ca1d194b0 Mon Sep 17 00:00:00 2001 From: Eddie A Tejeda <669988+eddietejeda@users.noreply.github.com> Date: Thu, 15 Oct 2026 15:27:55 -0700 Subject: [PATCH] docs(changelog): record what 0.41.0 and 0.42.0 actually contain #340 and #341 merged while the 0.41.0 release PR waited for review, so they shipped in v0.41.0 but its notes, generated at prepare time, never listed them, and 0.42.0 came out empty. Write the notes under 0.41.0 and say 0.42.0 carries no change. validate-changelog now allows adding to a released section while still refusing to drop a bullet. --- CHANGELOG.md | 13 +++++++++++++ scripts/validate-changelog.py | 28 ++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 086fcb2..d94123c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,21 @@ - *(release)* Refuse a release without notes (#343) ## [0.42.0] - 2026-10-15 + +No changes since 0.41.0. The 0.41.0 release PR waited on review long enough for #340 and #341 to merge ahead of it, so they shipped in 0.41.0 and this tag carries the same code; the release-notes guard in #343 prevents this recurring. ## [0.41.0] - 2026-10-15 +### 🚀 Features + +- *(databases)* Add `--if-not-exists` to `create`: get-or-create by name, matching the SDK (#340) +- *(databases)* Add `--database ` to `load`, for loading by id when a fork shares the catalog alias (#341) + +### 🐛 Bug Fixes + +- *(databases)* `tables show` on a catalog alias shared by a fork now reports the ambiguity instead of "no catalog" (#341) +- *(query)* `-d`/`-o` accepted after `status`, so `hotdata query status -d ` works (#341) +- *(jobs)* `jobs ` on a `database_fork` job no longer fails to parse; `--job-type database_fork` accepted (#338) + ### 💼 Other - *(deps)* Bump hotdata SDK to 0.20.0 (#338) diff --git a/scripts/validate-changelog.py b/scripts/validate-changelog.py index fb975f9..212d1e8 100755 --- a/scripts/validate-changelog.py +++ b/scripts/validate-changelog.py @@ -61,12 +61,28 @@ def main() -> None: ) failed = True elif cur_sections[ver] != body: - print( - f"CHANGELOG.md: section [{ver}] differs from {base} " - "(released sections must not be rewritten)", - file=sys.stderr, - ) - failed = True + # A released section may gain notes (a correction after the fact, + # as when the 0.41.0 notes missed two PRs that merged while its + # release PR waited for review) but never lose any: every bullet + # the base carries must still be there verbatim. That keeps the + # guard against git-cliff regenerations dropping history while + # letting an additive fix through. + missing = [ + line + for line in body.splitlines() + if line.startswith("- ") and line not in cur_sections[ver].splitlines() + ] + if missing: + print( + f"CHANGELOG.md: section [{ver}] drops bullets present on {base} " + "(released notes may be added to, never rewritten):", + file=sys.stderr, + ) + for line in missing: + print(f" {line}", file=sys.stderr) + failed = True + else: + print(f"changelog: section [{ver}] amended additively") if failed: sys.exit(1)