Release Runbook
This repository publishes npm releases from pushed v* tags, using the same
deliberate release shape as the public Ponchia package lane: local prep, merge
to main, tag from main, CI gates, protected environment approval, npm
publish with provenance, then GitHub Release notes from CHANGELOG.md.
0.1.0 was bootstrapped manually before this tag-driven lane existed. Do not
push a fresh v0.1.0 tag to publish it again; use this runbook for 0.1.1 or
later.
Preconditions
mainis clean and pushed.npm run checkpasses locally or in CI.CHANGELOG.mdhas an entry for the target version.package.jsonandpackage-lock.jsonversions match.README.md,docs/api-reference.md, examples, readiness matrix, and completion audit reflect any public API change.docs/public-release-decisions.mdstill matches package metadata, npm access, README positioning, examples hosting, and release ownership.- NPM Trusted Publishing is configured for
Ponchia/bronto-annotations, workflowrelease.yml, environmentnpm-publish, and actionnpm publish.
Local Prep
npm ci
npm run release:prep -- X.Y.Z
npm run check
npm pack --dry-run
Inspect the tarball list. It should include dist, README.md, LICENSE, and
docs, and should not include source, examples, tests, temporary files,
screenshots, or local caches.
Commit the version, lockfile, changelog, and template updates from
release:prep, open a PR, merge it to main, and tag only a commit reachable
from origin/main.
Canary / Private Registry
Use the GitHub Packages canary workflow before publishing 0.1.0 publicly:
gh workflow run canary.yml -f publish=true
The workflow publishes a unique 0.1.0-canary.* version to GitHub Packages
with the canary tag, then installs that exact version from a clean registry
consumer. See docs/canary-release.md for the full runbook and
docs/canary-publish-report.md for the latest verified publish evidence.
Public Release Decisions
docs/public-release-decisions.md is the source of truth for the package name,
ownership, repository visibility policy, npm access, README positioning, and
examples hosting decision for the 0.1.x lane.
Tag-Driven Public Release
git tag vX.Y.Z
git push origin vX.Y.Z
The Release workflow:
- Verifies the tag commit is reachable from
origin/main. - Verifies
vX.Y.Zmatchespackage.json. - Runs
npm run check. - Builds
distand records annpm pack --dry-runmanifest. - Pauses at the protected
npm-publishGitHub Environment for approval. - Publishes with npm provenance via
npm publish --ignore-scripts --provenance --access public. - Routes stable versions to
latestand prereleases tonext. - Records npm registry state and creates GitHub Release notes from
CHANGELOG.md.
Do not create the GitHub Release by hand before the workflow publishes. The workflow creates the GitHub Release only after npm accepts the package.
Post-Release
Confirm clean install smoke in a new consumer:
npm install @ponchia/annotationsRoot imports work without optional peers.
Confirm adapter docs still point to the released version's APIs.
For deeper proof, run
node scripts/smoke-registry-consumer.mjs --version X.Y.Z --registry https://registry.npmjs.org --scope @ponchia.