Releasing RCIP
RCIP uses a guarded GitHub Actions release with npm trusted publishing. CI and release jobs install the pinned npm 11.16.0 toolchain before reading the lockfile; older npm versions resolve optional peers differently. A release tag starts validation. Existing GitHub environment protections apply; complete any configured maintainer gate without disabling it.
Package readiness does not authorize any of the external actions in this runbook. Changing repository visibility, configuring npm, merging, tagging, and publishing each require an explicit release decision.
One-time setup
Confirm that the GitHub repository is owned by
binariedus/rcipand that the npm maintainerbpraccan manage@binaried/rcip.Review the complete Git history for credentials and private material before publishing any package version.
Keep this repository public for npm provenance. Verify the attestation on the new published version; older releases are not retroactively attested.
Create a GitHub environment named
npm. Add a required reviewer and prevent self-review when the account setup allows it.In the npm package settings for
@binaried/rcip, add a GitHub Actions trusted publisher with:- organization or user:
binariedus - repository:
rcip - workflow filename:
release.yml - environment:
npm - allowed action:
npm publish
- organization or user:
Keep the workflow on GitHub-hosted runners and keep
id-token: write. Do not add an npm access token orNODE_AUTH_TOKENsecret.After the first trusted publish succeeds, set npm publishing access to require two-factor authentication and disallow token-based publishing, then revoke any obsolete automation tokens.
The workflow installs npm 11 because trusted publishing currently requires npm 11.5.1 or later and Node.js 22.14.0 or later. No local npm login is required for the automated release. The public repository enables npm provenance for qualifying trusted publishes.
Official references:
Beta release checklist
Use a beta before moving a new major onto latest. Prerelease versions are published under the npm beta distribution tag, so ordinary npm install @binaried/rcip consumers remain on the current stable release.
Set the same prerelease version in the root and package
package.jsonfiles, for example2.0.0-beta.5.Complete the validation and review steps in the release checklist below.
Create an annotated tag matching the prerelease exactly:
bashgit tag -a v2.0.0-beta.5 -m "RCIP 2.0.0 beta 5" git push origin v2.0.0-beta.5Approve the protected npm environment deployment and verify that
betamoved whilelatestdid not:bashnpm view @binaried/rcip dist-tags --json npm view @binaried/rcip@beta version
The release workflow selects beta for every SemVer prerelease and latest only for a stable version. Published versions remain immutable; each beta iteration must use a new version such as 2.0.0-beta.1.
Stable release checklist
Start from reviewed, clean
mainand confirm CI is green.Remove the prerelease suffix and set the same stable version in the root and package
package.jsonfiles.Update
CHANGELOG.mdand any migration or protocol documentation.Run the local release-candidate checks:
bashnpm ci npm run check npm run test:e2e npm run check:starter npm audit --audit-level=high npm pack --workspace @binaried/rcip --dry-runReview the package file list, public exports, dependency audit, browser results, and React 18/19 packed-consumer results.
Merge the reviewed source through the repository's normal pull-request process.
Create and push an annotated tag that exactly matches the package version:
bashgit tag -a v2.0.0 -m "RCIP 2.0.0" git push origin v2.0.0Review the
Publish RCIPworkflow result, then approve the protectednpmenvironment deployment.Verify the registry result and stable distribution tag:
bashnpm view @binaried/rcip version npm view @binaried/rcip dist-tags --json npm view @binaried/rcip@2.0.0 --jsonInstall the registry package into a fresh application and repeat one minimal discovery/render check.
The release workflow now performs this registry acceptance automatically with npm run health:regression -- --version <released-version> --wait-seconds 600. Package upload and acceptance are separate steps: if acceptance fails after a successful upload, investigate the published version before retrying anything. Do not republish an immutable version. Repeat the exact-version regression using the manual public-health workflow after resolving the failure.
The current maintenance release is 2.0.3, retaining protocol 1.0 and public API compatibility. Use the next unused patch version if it is already published. Publish only after packed-consumer and composed browser checks pass.
If a release is bad
Published versions are immutable. Prefer a prompt fixed patch and deprecate the bad version with a clear message. Do not move or recreate a Git tag, overwrite a published version, or rely on npm unpublish as a normal rollback mechanism.
Documentation and discovery
npm run site:build generates the API contracts, bundle measurements, VitePress documentation, and deterministic static demo. npm run test:site verifies the production output. Generated pages and build outputs remain ignored.
The Pages workflow publishes merged main changes (or an explicit manual dispatch from main) through GitHub Actions to https://binariedus.github.io/rcip/. The github-pages environment allows deployments from main; keep that protection in place. Package publication still runs from release tags.
For initial setup, an organization owner must enable Member privileges → Pages creation → Public → Save in the organization settings. Then enable Pages in the repository with GitHub Actions as its build source. The organization's Pages settings screen manages custom domains; no custom domain is needed for the github.io address. See GitHub's Pages publication settings.
After publishing, verify direct document URLs, search, sitemap, social metadata, and demo confirmation behavior on the public origin:
RCIP_SITE_URL=https://binariedus.github.io npm run test:siteConfirm npm publication using npm view @binaried/rcip@latest version --prefer-online and a fresh package installation. A successful upload can take a few minutes to appear in the registry, and the npm website may display older metadata while its cache updates. Report registry availability separately from the public website.
Keep npm/GitHub descriptions, keywords/topics, homepage, README links, and release notes consistent. Indexing and search rankings are external outcomes; do not claim they are guaranteed. No credentials, provider calls, or analytics are required by the static demo.
CI scans Git history using the open-source Gitleaks CLI, downloaded at a pinned version and verified against its SHA-256 checksum. This preserves scanning without the license requirement of the organization-oriented wrapper action.
See public health monitoring for local commands, temporary availability monitoring, automatic expiry, cost controls, and failure reporting.