feat(release): an rc's notes list what's new since the rc before, then the earlier release candidates #745

Merged
HumanBean merged 1 commit from HumanBean/Longshot:feat/rc-notes into main 2026-11-15 18:14:01 +00:00
Owner

Type: feat · Risk: low · Tested on: Linux (the notes of v3.0.0-rc.4 and the launcher's v1.0.0-rc.6) · Needs: none

Why

A release candidate's page lists only what changed since the rc before, so a player coming from the last stable, or new to Longshot, can't see everything the version brings. With two lists, players on the previous rc see what's new for them, and the second list shows the rest.

What changed

release.py notes for an rc after the first (e.g. rc.3) writes two lists: ## v3.0.0-rc.3 (<date>), new since rc.2 (git-cliff over rc.2..rc.3, as before), then ## Earlier release candidates: rc.1, rc.2 (since <stable>), what those brought since the last stable (here the fork) in one list. A first rc, a stable and nightlies keep one list.

  • scripts/release.py: earlier_rcs (the rcs since the last stable before this one), git_cliff, and notes' second list: git-cliff over <stable or the fork>..<last earlier rc> with --ignore-tags for rc tags, so it doesn't split per rc.
  • tests/test_release.py: the two lists, and the launcher's no-stable case (no range, --skip-commit for the newer commits).
  • docs/releases.md, Release notes: the two lists.
  • .claude/skills/release/SKILL.md: for an rc after the first, the What's new summarizes the first list.

The same change goes to the launcher (release.py and docs/releases.md are shared): MagicBeanDev/LongshotLauncher#92.

Measurements

Verdict: nothing to measure: release notes text.

Flags and settings

None

Testing

Tested: python -I scripts/release.py notes v3.0.0-rc.4 with the pinned git-cliff gives ## v3.0.0-rc.4 (2026-11-15), new since rc.3, then ## Earlier release candidates: rc.1, rc.2, rc.3. python -I tests/test_release.py: OK. python -I -B tests/run_all.py: 509 passed, 14 failed, 70 skipped; the same 14 as on main (test_make_game_cache, test_lift_cleanup_error, test_bake_portability, test_crash_dialog, test_cpm_discovery, test_env_on, test_appimage_player_build, test_linux_preflight, test_options_budget_once, test_pipeline_tour, test_mods_size_table, test_readback_late, test_vk_pgo, test_walk_key), none touching release.py. In the launcher, rc.6's notes give the same shape over 5 earlier rcs.

Not tested: a real release with it (the next rc will be the first).

Must be tested: None

Risks

What could break: an rc's release notes. A git-cliff failure stops the release workflow's The notes step before anything is published, as before.

Turning it off: revert the commit

Compatibility: Nothing changes

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named).
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Docs updated.

🤖 Generated with Claude Code

**Type:** feat · **Risk:** low · **Tested on:** Linux (the notes of v3.0.0-rc.4 and the launcher's v1.0.0-rc.6) · **Needs:** none ## Why A release candidate's page lists only what changed since the rc before, so a player coming from the last stable, or new to Longshot, can't see everything the version brings. With two lists, players on the previous rc see what's new for them, and the second list shows the rest. ## What changed `release.py notes` for an rc after the first (e.g. rc.3) writes two lists: `## v3.0.0-rc.3 (<date>), new since rc.2` (git-cliff over rc.2..rc.3, as before), then `## Earlier release candidates: rc.1, rc.2 (since <stable>)`, what those brought since the last stable (here the fork) in one list. A first rc, a stable and nightlies keep one list. - `scripts/release.py`: `earlier_rcs` (the rcs since the last stable before this one), `git_cliff`, and `notes`' second list: git-cliff over `<stable or the fork>..<last earlier rc>` with `--ignore-tags` for rc tags, so it doesn't split per rc. - `tests/test_release.py`: the two lists, and the launcher's no-stable case (no range, `--skip-commit` for the newer commits). - `docs/releases.md`, *Release notes*: the two lists. - `.claude/skills/release/SKILL.md`: for an rc after the first, the What's new summarizes the first list. The same change goes to the launcher (`release.py` and docs/releases.md are shared): MagicBeanDev/LongshotLauncher#92. ## Measurements **Verdict:** nothing to measure: release notes text. ### Flags and settings None ## Testing **Tested:** `python -I scripts/release.py notes v3.0.0-rc.4` with the pinned git-cliff gives `## v3.0.0-rc.4 (2026-11-15), new since rc.3`, then `## Earlier release candidates: rc.1, rc.2, rc.3`. `python -I tests/test_release.py`: OK. `python -I -B tests/run_all.py`: 509 passed, 14 failed, 70 skipped; the same 14 as on `main` (test_make_game_cache, test_lift_cleanup_error, test_bake_portability, test_crash_dialog, test_cpm_discovery, test_env_on, test_appimage_player_build, test_linux_preflight, test_options_budget_once, test_pipeline_tour, test_mods_size_table, test_readback_late, test_vk_pgo, test_walk_key), none touching release.py. In the launcher, rc.6's notes give the same shape over 5 earlier rcs. **Not tested:** a real release with it (the next rc will be the first). **Must be tested:** None ## Risks **What could break:** an rc's release notes. A git-cliff failure stops the release workflow's *The notes* step before anything is published, as before. **Turning it off:** revert the commit **Compatibility:** Nothing changes ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [x] Docs updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(release): an rc's notes list what's new since the rc before, then the earlier release candidates
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 13s
CI / Workflow lint (actionlint) (pull_request) Successful in 20s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 18s
Third-party parts / As their notes say (pull_request) Successful in 27s
PR description / Description follows the template (pull_request_target) Successful in 15s
Website / Website on Cloudflare (pull_request_target) Has been skipped
3e07cae0be
Co-Authored-By: Claude Opus 5.5 <[email protected]>
HumanBean deleted branch feat/rc-notes 2026-11-15 18:14:02 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!745
No description provided.