From 45c440437cc07eb322b9a1e68d40439a54fc8d79 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 27 Jul 2026 11:05:50 +0000 Subject: [PATCH] =?UTF-8?q?fix(release):=20hotcrm=20compat=20gate=20is=20a?= =?UTF-8?q?dvisory=20in=20RC=20pre-mode=20=E2=80=94=20unblock=20the=20v17?= =?UTF-8?q?=20train?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every Release run on main has been red since the v17 breaking window opened (first the localization-config narrowing, then the #3543 ApiMethod enum shrink): the live-hotcrm smoke types hotcrm@v2.1.0 (an ObjectStack 14.7 consumer) against the unreleased spec and fails on exactly the removals the major exists to ship. Because the step sits before changesets/action, the job dies before the Version Packages PR is even created — while a hotcrm release migrated off those removals cannot exist until the rc.N artifacts it would migrate against are published. Deadlock: #3600 entered pre-mode this morning specifically to cut rc.N pre-releases for downstream validation, and the gate has blocked every attempt since. While .changeset/pre.json declares mode:"pre", run the smoke as advisory: still cloned, still typechecked, outcome reported via ::notice/::warning — but never failing the job. With pre.json absent or mode:"exit" (the moment `changeset pre exit` lands) the gate blocks exactly as before, which is also the moment HOTCRM_REF must be bumped per the step's existing protocol. All four guard paths simulated locally: pre+fail→0, pre+pass→0, armed+fail→1, exit-mode+fail→1. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01ECTCrcCdZpCHw5zFSgcmGt --- .changeset/release-hotcrm-gate-premode.md | 4 ++++ .github/workflows/release.yml | 24 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 .changeset/release-hotcrm-gate-premode.md diff --git a/.changeset/release-hotcrm-gate-premode.md b/.changeset/release-hotcrm-gate-premode.md new file mode 100644 index 000000000..ee372ba1b --- /dev/null +++ b/.changeset/release-hotcrm-gate-premode.md @@ -0,0 +1,4 @@ +--- +--- + +CI-only: the live-hotcrm backward-compat gate in release.yml is advisory while changesets pre-mode is active, so the RC train can form its Version Packages PR; it re-arms automatically at `changeset pre exit`. Releases nothing. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 02ee63960..b6699d672 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,6 +72,18 @@ jobs: # typecheck + `objectstack validate`. A red here blocks the publish. # The deterministic in-repo floor is @objectstack/downstream-contract; # this is the live ceiling. + # + # RC pre-mode amendment (#3600): while .changeset/pre.json says + # mode:"pre", the smoke still runs and reports but does NOT block. A + # major train exists precisely to ship deliberate surface removals, and + # a hotcrm release migrated off them cannot exist until the rc.N + # artifacts it would migrate against are published — blocking here + # deadlocks the train (observed 2026-07-27: every Release run red on + # the v17 window's removals, so the changesets step never even created + # the Version Packages PR). The gate re-arms by itself the moment + # `changeset pre exit` lands (mode flips / pre.json is consumed) — + # exactly when a migrated hotcrm must exist and HOTCRM_REF gets bumped + # per the note below. env: # v2.1.0: hotcrm upgraded to ObjectStack 14.7 (hotcrm#448) and # dropped the agent `visibility` field that spec 15 removes as @@ -79,7 +91,17 @@ jobs: # Bump this ref whenever a deliberate spec surface removal ships a # matching hotcrm release. HOTCRM_REF: v2.1.0 - run: bash scripts/downstream-smoke.sh + run: | + if [ "$(jq -r '.mode // empty' .changeset/pre.json 2>/dev/null)" = "pre" ]; then + echo "::notice::Changesets pre-mode active — the hotcrm smoke is advisory (reported, non-blocking) until 'changeset pre exit'." + if bash scripts/downstream-smoke.sh; then + echo "::notice::hotcrm@${HOTCRM_REF} is still compatible with the pre-release train." + else + echo "::warning::hotcrm@${HOTCRM_REF} is incompatible with the pre-release train — expected for the window's deliberate removals. Ship a migrated hotcrm release and bump HOTCRM_REF before 'changeset pre exit' re-arms this gate." + fi + else + bash scripts/downstream-smoke.sh + fi - name: Create Release Pull Request or Publish to npm id: changesets