From c8855d196c4408f27e1b75fb2b709a1aa63de25d Mon Sep 17 00:00:00 2001 From: garrytan Date: Wed, 28 Oct 2026 00:21:14 +0000 Subject: [PATCH] fix: floor fails closed on undatable moves, recorded security evidence on finish, npm-only advisory match Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- .github/workflows/weekly-release.yml | 2 +- CHANGELOG.md | 4 +- docs/releases.md | 31 +++++--- scripts/release-cut.ts | 64 +++++++++++----- test/release-cut.test.ts | 105 ++++++++++++++++++++++++--- 5 files changed, 165 insertions(+), 41 deletions(-) diff --git a/.github/workflows/weekly-release.yml b/.github/workflows/weekly-release.yml index 70f53aca5..a5453cb62 100644 --- a/.github/workflows/weekly-release.yml +++ b/.github/workflows/weekly-release.yml @@ -91,7 +91,7 @@ jobs: run: | set -euo pipefail if [ -n "$RELEASE_REF" ] && ! [[ "$RELEASE_REF" =~ ^[0-9a-f]{40}$ ]]; then - echo "::error::ref must be the full 40-hex SHA of a commit on main, not '$RELEASE_REF'" + echo "::error::ref must be the full 40-hex SHA of a commit on main" exit 1 fi if [ -n "$SECURITY_REASON" ] && [ -z "$RELEASE_REF" ]; then diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d419307a..dae3dcdf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,8 @@ **Stable moves twice a week, and never twice in 72 hours unless a security fix needs it.** Garry asked, 2026-10-27: "Do we have rules around stable where we update stable except for security fixes at most once every 72 hours?" There were none: the Monday cut and any hand-run cut moved team installs whenever someone ran it. Now the release cut runs Monday and Thursday at 14:00 UTC ("Ok twice a week"), refuses any move inside 72 hours of the last one, and lets a security fix through only when it can tie the fix to the commits being released. ### Added -- **The 72-hour floor in `scripts/release-cut.ts`.** Every cut, scheduled or by hand, measures stable's last move from the newest annotated `v*` tag on stable (or its GitHub Release's publish time when later) and refuses inside 72 hours. The refusal's first two lines are `REFUSED_FLOOR: stable moved to v at