Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <id>` 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 <run> -d <id>` works (#341)
- *(jobs)* `jobs <id>` 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)
Expand Down
28 changes: 22 additions & 6 deletions scripts/validate-changelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Extend the docstring at lines 2-5 to describe the additive rule, and state that only - bullets are guarded (not blocking).

The docstring still says each section must "match exactly". The code now allows additions. The code also permits edits and deletions of prose lines and headings, such as the new 0.42.0 sentence. A bullet that moves under a different ### heading also passes. A reader of the docstring expects stricter protection than the script gives.

]
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")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super nit: Change the final summary at line 90 from "preserved unchanged" to "preserved". After an additive amendment, the run prints "amended additively" and then "preserved unchanged", and those two messages contradict each other (not blocking).


if failed:
sys.exit(1)
Expand Down
Loading