forked from heavy-duty/box
changelog-armed.sh asks only whether the TOP section agrees with VERSION. A PR that replaces '## X.Y.Z — DATE' with its own '## Unreleased' block — git merges the edit cleanly, and a shipped section is silently absorbed into Unreleased. The damage only surfaces at the next release, when release-notes.sh cannot find the section it extracts by heading. Add changelog-monotonic.sh: the set of '^## X.Y.Z' headings on a branch must be a superset of the set at the merge base. Release headings are append-only, so the rule has no legitimate violation — and the ceremony's stamp passes by construction, adding X.Y.Z and removing none. Its own script, not a clause in changelog-armed.sh: the input is a git history rather than two files, no base ref is a SKIP rather than a failure, and changelog-armed.sh is driven by test/release.sh against constructed non-git trees that cannot express the failure at all. CI checks out with fetch-depth: 0 and sets CHANGELOG_MONOTONIC_STRICT=1, so an unreachable base ref goes red there instead of degrading to the skip a local run is allowed. Closes #122 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| ci.yml | ||
| labels.yml | ||
| release.yml | ||