From d107fc4a1e06cdfce25ca2de992bd587208f818e Mon Sep 17 00:00:00 2001 From: garrytan Date: Tue, 3 Nov 2026 09:26:35 +0000 Subject: [PATCH] docs: release gate evidence and hold in releases.md, release_gate row in the policy key table (Step 14.5 audit) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- docs/releases.md | 9 ++++++--- docs/ship-policy.md | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 18b473bad..520a22987 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -29,7 +29,8 @@ it has completed and none failed, and `refs/notes/gstack-trains` holds no active freeze. A cancelled check run counts as red. A commit with a check run still going is skipped and the next older one is considered, back through 7 days or 200 first-parent commits. The workflow runs no tests and no paid evals -of its own; it only reads what the trains and the backstop already recorded. +of its own; it only reads what the trains, the backstop and the release gate +already recorded. With nothing green in the window it fails and lists why each commit was skipped. @@ -54,7 +55,8 @@ contains it refuses the cut like a freeze. Train evidence relaxes nothing else: a red backstop run, a failed or missing `free-tests` run, any other red check run or a run still going keeps the commit out, and a record in any other state (`red`, `superseded`, `free-green`, …) is not evidence. A commit with -neither a successful backstop run nor a train record is not released: a +none of the three (no successful backstop run, train record or GREEN release +record) is not released: a dependabot push, a policy without a train block, or a tree that was never gated. @@ -311,11 +313,12 @@ is exercised against real check runs before it merges. | Line | Meaning | |---|---| -| `CANDIDATE: () gated by main-backstop|train ` | the commit that will be (or was) released, and which evidence gated it (`[hotfix: --ref]` before `gated by` on a `--ref` cut) | +| `CANDIDATE: () gated by main-backstop|train |release gate run ` | the commit that will be (or was) released, and which evidence gated it (`[hotfix: --ref]` before `gated by` on a `--ref` cut) | | `NOTHING_NEW: origin/main is already released as v` | nothing merged since the last release; exit 0 | | `NO_GREEN_COMMIT: ...` with `SKIPPED:` lines | nothing in the window passed the gate; exit 1 (a dry run exits 0: the skips are its answer) | | `REFUSED: non-fast-forward: ...` | the candidate is behind stable; stable only moves forward | | `REFUSED: queue frozen since train ...` | the main backstop froze the queue; clear it first (docs/ship-policy.md) | +| `REFUSED: release gate red on () and no gate on a later commit is green; ...` | the release gate's hold: land the revert or fix-forward, then `gstack-release-gate run --ignore-cadence` ([docs/ship-policy.md#release-gate](ship-policy.md#release-gate)) | | `REFUSED: tag v already names ` | a version was stamped twice; needs a look before anything is cut | | `REFUSED_FLOOR: stable moved to v at