Skip to content

Canonical version+hash identity and PR-driven release notes - #113

Merged
eaitbrahim merged 1 commit into
mainfrom
feat/release-notes
Jul 20, 2026
Merged

Canonical version+hash identity and PR-driven release notes#113
eaitbrahim merged 1 commit into
mainfrom
feat/release-notes

Conversation

@eaitbrahim

Copy link
Copy Markdown
Contributor

Two follow-ups to the release machinery (#112), both for the next release rather than needed for the first.

1. Version bound to the build hash, canonically

keel --version already showed both; it now reports them as semver build metadata:

keel 0.1.0+c11baba726af [release]

0.1.0+c11baba726af is the canonical "which build is this" string. The version alone is ambiguous — many commits share a version between bumps — so the +<commit> form is what actually pins the running code, and + is the separator tooling recognises (BuildInfo.full_version).

2. Release notes generated from merged PRs

The change list in each release is now auto-generated from the PRs merged since the previous tag, grouped by label via .github/release.yml. The workflow calls GitHub's generate-notes API, composes it under the build-hash line and the install block, and publishes with --notes-file. First release has no previous tag and generates from the start of history.

This only produces useful notes if PRs are labelled — the label→section mapping is in docs/RELEASING.md, and an unlabelled PR falls into "Other changes".

3. docs/RELEASING.md — including the issue discipline to adopt

Covers the version-bump-in-a-PR flow, the label mapping, and the convention to adopt from the next cycle: open an issue per unit of work, reference it with Closes #N so GitHub links the commit and it flows into the release notes.

⚠️ That last part is a process commitment, not code. The mechanics (labels, release.yml, Closes #N linking) are in place here; the discipline is the part that has to actually be followed. Until now the project worked PR-per-change with no issue tracker.

Verified

  • full_version forms (release / checkout / unknown) tested; describe still flags DIRTY and source.
  • Note-composition shell logic proven locally with a stubbed gh — build-hash line + install block + generated change list, in order.
  • Both YAML files parse.
  • 1258 tests pass, ruff clean.

Note on labels

This repo has no issue/PR labels yet. GitHub auto-creates the default set (bug, enhancement, documentation), but the custom ones (compliance, research, rails, tooling, experiment, norelease, breaking) need creating before they categorise anything — I can add them with gh label create, or they can be added as they're first used.

🤖 Generated with Claude Code

… notes

Two follow-ups to the release machinery, both requested for the NEXT
release rather than needed for the first.

1. VERSION BOUND TO BUILD HASH, canonically. `keel --version` already
   showed both; it now reports them as semver build metadata --
   `keel 0.1.0+c11baba726af [release]` -- via BuildInfo.full_version.
   The version alone is ambiguous (many commits share a version between
   bumps); the `+<commit>` form is the string that actually pins which
   code is running, and `+` is the separator tooling recognises.

2. RELEASE NOTES GENERATED FROM MERGED PRs since the previous tag,
   grouped by label (.github/release.yml). The release workflow calls
   GitHub's generate-notes API, composes it under the build-hash line and
   the install block, and publishes via --notes-file. First release has
   no previous tag and generates from the start of history.

Plus docs/RELEASING.md: the version-bump-in-a-PR flow, the label ->
section mapping (so notes are useful, PRs must be labelled), and the
issue/commit convention to ADOPT from the next cycle -- open an issue per
unit of work, reference it with `Closes #N` so GitHub links the commit
and it flows into the notes. The mechanics are in place; the discipline
is a process commitment that only works if followed.

Verified: full_version forms (release/checkout/unknown) tested; the
note-composition shell logic proven with a stubbed gh (build-hash line +
install block + generated change list, in order); both YAML files parse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@eaitbrahim
eaitbrahim merged commit 79a7458 into main Jul 20, 2026
1 check passed
@eaitbrahim
eaitbrahim deleted the feat/release-notes branch July 20, 2026 20:52
eaitbrahim added a commit that referenced this pull request Jul 20, 2026
docs: correct RELEASING.md — issues not enforced (missed #113's merge)
@eaitbrahim eaitbrahim added the ci CI/workflows (Docs, CI & tooling) label Jul 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI/workflows (Docs, CI & tooling)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant