feat(release): an rc's notes list what's new since the rc before, then the earlier release candidates #745
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/tooling
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8015c9a
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
risk
high
risk
low
risk
medium
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!745
Loading…
Reference in a new issue
No description provided.
Delete branch "HumanBean/Longshot:feat/rc-notes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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 notesfor 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, andnotes' second list: git-cliff over<stable or the fork>..<last earlier rc>with--ignore-tagsfor 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-commitfor 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.pyand 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.4with 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 onmain(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
type(scope): description) of the status line's type.main.python -I -B tests/run_all.pypasses (any failure that also fails onmainis named).third_party/untouched (a new folder with aPROVENANCE.mdinstead).When it applies
Assisted-by:/Co-Authored-By:trailers.tests/that reads changed source updated in this PR, not weakened.🤖 Generated with Claude Code