This document defines the release contract for the coordinated
0.10.0-next.0 package family. It prepares an operator-controlled candidate;
it does not authorize publication and it is not evidence that any npm or Git
operation has occurred.
The stable 0.9.0 procedure remains in npm-release.md.
Registry metadata is authoritative for public availability. Source manifests,
local tarballs, passing tests, and this guide cannot establish that a candidate
is published.
- Candidate version: exactly
0.10.0-next.0for all 16 public packages. - Channel: npm
nextonly. This procedure must not create, move, or verifylatestas pointing to the candidate. - Immutability: never attempt to overwrite or rebuild an already published package version. npm package versions are immutable release artifacts.
- Coordination: treat the 16 packages as one publication set. A partial set is a failed candidate, not a successful release.
- Fail closed: an ambiguous registry response, authentication failure, timeout, package-set mismatch, dirty release input, or changed artifact digest stops the procedure.
- Stable isolation: record every package's existing
latestvalue before any mutation and prove those values are unchanged afterward. - Promotion separation: stable promotion requires a later, separately authorized procedure after registry-installed and provider-live evidence.
Run these checks without npm credentials and without any registry mutation:
set -euo pipefail
candidate=0.10.0-next.0
corepack pnpm install --frozen-lockfile
corepack pnpm release:publication-set
corepack pnpm lint
corepack pnpm typecheck
corepack pnpm test
corepack pnpm build
corepack pnpm smoke:governance -- --all --allow-missing
corepack pnpm release:check
test "$(find packages -mindepth 2 -maxdepth 2 -name package.json \
-exec node -e \
'const p=require(require("node:path").resolve(process.argv[1]));if(p.publishConfig?.access==="public")process.stdout.write(`${p.version}\n`)' \
{} \; | sort -u)" = "$candidate"release:publication-set is the authority for package discovery and dependency
order. Do not maintain a second hand-written publication list. Preserve the
packed tarballs and their digests from the exact verified commit; do not rebuild
between approval, publication, and registry verification.
Passing the local gate means only that the source candidate is ready for release review. Stop here unless an authorized release operator explicitly starts the credentialed publication procedure.
Before any mutation, the authorized operator must capture one reviewable receipt containing:
- the exact release commit and a clean worktree;
- the automatically discovered 16-package topological order;
- each package name, exact version, tarball filename, integrity, and digest;
- each package's current
latestandnextdist-tag values; and - an authoritative registry result proving that every
<package>@0.10.0-next.0is absent.
Absence must be a confirmed registry 404. Do not treat DNS failures, TLS
failures, timeouts, authentication errors, rate limits, malformed JSON, or any
other non-success response as package absence. If even one package version
already exists, stop: compare the registry artifact with the preserved receipt
and never issue npm publish for that version again.
The operator must review the complete receipt before publication begins. A preflight from a different commit or a rebuilt tarball is invalid.
Publication, when separately authorized, must use the preserved tarballs in the computed topological order and the exact command shape:
npm publish <preserved-tarball> --access public --tag next --provenance
The literal --tag next is mandatory. Bare npm publish, --tag latest,
npm dist-tag add ... latest, and npm dist-tag rm ... latest are prohibited
in this candidate procedure.
After each accepted publish, verify from the public registry that:
<package>@0.10.0-next.0resolves to the expected version;- its registry integrity matches the preserved artifact receipt; and
- that package's
nextdist-tag resolves to0.10.0-next.0.
On any rejection or mismatch, stop immediately and preserve the partial-set
receipt. Do not republish accepted versions, do not continue to later packages,
and do not change latest to hide or compensate for a partial candidate.
The candidate is registry-complete only after independent verification proves all of the following:
- all 16 exact versions resolve from the public registry;
- all 16
nextdist-tags resolve to0.10.0-next.0; - all recorded pre-publication
latestdist-tags are unchanged; - a clean temporary project installs
@opentag/cli@0.10.0-next.0explicitly; - the installed CLI reports
0.10.0-next.0and passes help, setup, doctor, and start checks; and - required provider-live acceptance evidence is attached or explicitly marked unproven.
Until those checks exist, report the state as prepared, publication_started,
partial, or outcome_unknown as supported by evidence. Never report
published from local output alone. Never report the stable release as
0.10.0-next.0; stable promotion is outside this procedure.