diff --git a/.claude/skills/pre-push-gate/SKILL.md b/.claude/skills/pre-push-gate/SKILL.md index ea8bcb64..fc151b5e 100644 --- a/.claude/skills/pre-push-gate/SKILL.md +++ b/.claude/skills/pre-push-gate/SKILL.md @@ -207,6 +207,8 @@ it — the split is the design. `npm run pack:verify` builds, packs the real tarball, installs it into a clean throwaway consumer, and drives the installed `mcp-inspector` bin end to end. It -needs **network access**, so it is a local/release check and is in neither -`local:gate` nor CI. Run it when touching packaging (the `files` allowlist, -a bundler `external` list, anything read from disk at runtime). +needs **network access**, so it is a local/release check: it is **not** a +`local:gate` stage, and CI runs it only in the `publish` job on a published +GitHub Release — never on a push or PR. Run it when touching packaging (the +`files` allowlist, a bundler `external` list, anything read from disk at +runtime), and as its own step when cutting a release (the `release` skill). diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index ee526531..d460096d 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -143,9 +143,16 @@ Then drive it. Work from a **dedicated worktree** with its own full `npm install` (a symlinked `node_modules` passes lint and tests and then fails every story file), run `npm run local:gate` there, and exercise the app from the **production build** — the packaged bin and the built bundles, not `vite dev`. -The `local-dev`, `test-servers` and `pre-push-gate` skills cover the mechanics; -`pack:verify` inside the gate is what proves the tarball a consumer installs -actually resolves. +The `local-dev`, `test-servers` and `pre-push-gate` skills cover the mechanics. + +**Then run `npm run pack:verify` there as its own step.** It is what proves the +tarball a consumer installs actually resolves, and ⚠️ **`local:gate` does not +run it** — `local:gate:stages` has no packaging stage, and a green gate says +nothing about the published tarball (#2380). CI runs it only in the `publish` +job, which fires on the published GitHub Release — after the tag exists — so +skipping it here means the first signal of a broken package arrives too late to +stop the release. It needs network access; record its result (tarball size and +the `pack:verify OK` line) for the ledger below. **Every contribution closed in the milestone gets driven, not read.** The bar is observed behavior from the running app — a rendered panel, a status attribute, a