Alpha releases are cut from throwaway branches, so the previous alpha
tag is a sibling of the next release commit rather than its ancestor.
The release workflow therefore rejected `deepagents==0.7.0a6` while
preparing `0.7.0a7` and fell back to the latest stable tag, producing
“Git log since deepagents==0.6.12”.
This makes prerelease resolution prefer the highest earlier prerelease
tag with the same base version. Sibling tags are accepted when they
share history with the release commit and are not ahead of it; the first
prerelease still falls back to the base-version or latest stable tag.
For example, `deepagents==0.7.0a7` now produces “Git log since
deepagents==0.7.0a6”.
The release setup summary also distinguishes an omitted `release-sha`
input from the canonical commit selected by the workflow, so alpha runs
show the exact commit they publish instead of only `(empty)`.
The workflow shell coverage exercises sibling branches, future-tag
rejection, prerelease phase and serial ordering, stable fallbacks,
malformed prereleases, and canonical release-target summaries.
A release-log boundary test creates 100 commits through separate `git
commit` subprocesses. A hosted runner failed partway through that setup
with exit 128, while the same job passed on adjacent runs.
Override the extracted workflow's `MAX_COMMITS` value to 3 in the two
boundary tests. They still cover exactly-at-limit and one-past-limit
behavior, and the helper asserts that the production setting remains
100, but setup now creates seven commits instead of 205.
The full workflow-helper suite passes with 434 tests, and the affected
tests passed 20 consecutive runs.
GitHub release descriptions now include a collapsible, package-scoped
commit history.
---
GitHub releases currently use package changelog entries when available.
That leaves out commit-level package history.
This change appends a collapsible, package-scoped Git log to every
release body. The log uses the latest stable package tag that is
reachable from the release commit, so releases from version branches do
not accidentally compare against a newer tag from another line. Initial
and divergent histories are identified separately, and commit subjects,
log length, and the final release body are bounded to stay within
GitHub's limits.