1---2name: release3description: Use when the user asks to release, publish, or version-bump harness-score — covers the npm package, the Cursor plugin, and the docs, in the right order.4---56# Releasing harness-score781. Confirm every user-facing change has a changeset with an English summary9 and explicit contributor credit when applicable. Commit metadata alone is10 not sufficient attribution.112. On a clean release branch from `main`, run12 `npm run release:prepare -- --summary "One sentence explaining why this release matters."`.13 This versions the package from changesets, mirrors the version into14 `TOOL_VERSION`, `jsr.json`, `package-lock.json`, both byte-identical GitHub15 Action entrypoints, and the Action README, runs all release gates, and16 writes a polished preview under `.release/`. Review both the diff and the17 rendered notes.18 - `plugins/cursor/.cursor-plugin/plugin.json` (+ entry in19 `plugins/cursor/CHANGELOG.md`) — only if Cursor plugin content20 changed, it has its own release track21 - `plugins/claude-code/.claude-plugin/plugin.json` — only if Claude22 Code plugin content changed; no separate publish step, a version bump23 + push to `main` is the entire release (the marketplace *is* this24 repo)253. Open and merge a `release: vX.Y.Z` PR. Do not create a tag or release from26 the unmerged branch.274. After merge, dispatch `.github/workflows/prepare-release.yml` from `main`28 with the exact version, a short title, and the one-sentence summary. It29 reruns the gates, validates every version surface, generates release notes30 from the changelog, preserves contributor credit, creates the immutable31 tag, and opens a draft release.325. Review the draft in GitHub. Select **Publish this Action to the GitHub33 Marketplace**, using **Code quality** as the primary category and34 **Continuous integration** as the secondary, then publish. This checkbox35 is manual because GitHub exposes no Marketplace publication API.366. Publishing fires `.github/workflows/release.yml`, which validates the37 public release notes and publishes to all three registries:38 - **npmjs.org** as `harness-score`, via39 [Trusted Publishing](https://docs.npmjs.com/trusted-publishers) — the40 user configures this once on the package's npmjs.com settings page41 (repo + workflow filename), then every CI run authenticates42 automatically, bypassing the 2FA/OTP prompt entirely.43 - **GitHub Packages** as `@paladini/harness-score` (automatic, uses the44 built-in `GITHUB_TOKEN`, no secret needed — the repo's Actions45 "Workflow permissions" must be set to Read and write).46 - **JSR** as `@paladini/harness-score` (automatic via OIDC — but the47 scope must be claimed once by the user at jsr.io/new before the first48 publish succeeds).497. The workflow moves the stable major Action tag only after every registry50 succeeds, then verifies npm, GitHub Packages, JSR, the GitHub Release, the51 stable tag, the Marketplace listing, and Pages. Never move `v1` manually52 before those gates pass. If a job53 fails, use **Re-run failed jobs**, not a full rerun that would try to54 republish immutable registry versions.558. Cursor Marketplace: the listing updates from the repo — remind the user56 to resubmit at https://cursor.com/marketplace/publish only if57 `plugins/cursor/` metadata changed. Claude Code has no separate58 marketplace to resubmit to — see step 2.599. Docs deploy automatically via `.github/workflows/pages.yml` on push to60 `main`; verify the public Pages site separately.