From f241151227ce115bda42a0ee8f91383434a17ba1 Mon Sep 17 00:00:00 2001 From: Lindsay Holmwood Date: Sat, 3 Oct 2026 10:39:42 +1000 Subject: [PATCH 1/2] docs(release): name all three steps of the version script in release.yml The comment above the mise step in the release job still quoted the root `version` script as `changeset version && node scripts/sync-lockstep-versions.mjs`. Since #1028 it also runs scripts/sync-skill-pins.mjs between the two. Quote it as it is. Refs: CIP-4285 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01PaY5xYydZUWhv8Nex9Sw8a --- .github/workflows/release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3b44ac698..ff0453d5e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -545,8 +545,9 @@ jobs: # REQUIRED BY `version:` BELOW, and nothing in this file says so without # this comment — which is why there is also a test. `pnpm run version` is - # `changeset version && node scripts/sync-lockstep-versions.mjs`, and that - # script ends in `execFileSync('mise', ['run', + # `changeset version && node scripts/sync-skill-pins.mjs && node + # scripts/sync-lockstep-versions.mjs`, and that last script ends in + # `execFileSync('mise', ['run', # 'release:prepare_bindings_assets', …])`, which reaches # `packages/eql/tasks/build.sh` and two `cargo run -p eql-codegen` calls. # mise is NOT preinstalled on GitHub's ubuntu images, so without this step From 918303cd15ba2d4abc20659aaf39ad9d62621d0a Mon Sep 17 00:00:00 2001 From: Lindsay Holmwood Date: Sat, 3 Oct 2026 10:45:03 +1000 Subject: [PATCH 2/2] docs(release): quote the three-step version script in two more comments The main-guard comment in scripts/sync-lockstep-versions.mjs and the header of scripts/__tests__/script-main-guards.test.mjs both quoted the root `version` script as `changeset version && node scripts/sync-lockstep-versions.mjs`. Since #1028 it also runs scripts/sync-skill-pins.mjs between the two. Quote it as it is. Both comments keep their point: the `&&` chain reads a silent exit 0 as a completed bump. Refs: CIP-4285 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01PaY5xYydZUWhv8Nex9Sw8a --- scripts/__tests__/script-main-guards.test.mjs | 11 ++++++----- scripts/sync-lockstep-versions.mjs | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/scripts/__tests__/script-main-guards.test.mjs b/scripts/__tests__/script-main-guards.test.mjs index 98050df9e..71b32e6d9 100644 --- a/scripts/__tests__/script-main-guards.test.mjs +++ b/scripts/__tests__/script-main-guards.test.mjs @@ -22,11 +22,12 @@ import { REPO_ROOT } from './lib/repo-root.mjs' * The failure mode is why this guard is repo-wide rather than a comment on the * one file that got it wrong. A silent exit 0 is indistinguishable from * success to every caller: `package.json`'s `version` script is - * `changeset version && node scripts/sync-lockstep-versions.mjs`, and the `&&` - * means the no-op reports success while `changeset version` has already bumped - * the npm package — producing exactly the lockstep skew that script exists to - * prevent. CI never sees it (`/home/runner/work/stack/stack` has no space), so - * nothing but this test stands between the outlier and a release. + * `changeset version && node scripts/sync-skill-pins.mjs && node + * scripts/sync-lockstep-versions.mjs`, and the `&&` means the no-op reports + * success while `changeset version` has already bumped the npm package — + * producing exactly the lockstep skew that script exists to prevent. CI + * never sees it (`/home/runner/work/stack/stack` has no space), so nothing + * but this test stands between the outlier and a release. */ /** Absolute paths of every `scripts/*.mjs` that is not a test or config file. */ diff --git a/scripts/sync-lockstep-versions.mjs b/scripts/sync-lockstep-versions.mjs index 97b27f718..080e6d697 100644 --- a/scripts/sync-lockstep-versions.mjs +++ b/scripts/sync-lockstep-versions.mjs @@ -593,7 +593,8 @@ function main() { // `fileURLToPath`, not `` `file://${process.argv[1]}` ``: the URL is // percent-encoded and the argv path is not, so the template form is false from // any checkout path containing a space — and this script's caller is -// `changeset version && node scripts/sync-lockstep-versions.mjs`, where a -// silent exit 0 reports a completed lockstep bump that never happened. +// `changeset version && node scripts/sync-skill-pins.mjs && node +// scripts/sync-lockstep-versions.mjs`, where a silent exit 0 reports a +// completed lockstep bump that never happened. // `scripts/__tests__/script-main-guards.test.mjs` holds this form repo-wide. if (process.argv[1] === fileURLToPath(import.meta.url)) main()