reference-implementation-governance deltas: adopt-single-release-channel
Created Updated openspec/changes/adopt-single-release-channel/specs/reference-implementation-governance/spec.mdView on GitHub →
MODIFIED Requirements
Requirement: Publishable npm packages SHALL use the shared PDPP package release policy
Every publishable @pdpp/* npm package in the reference implementation SHALL
use the same semantic-release-governed npm publishing and versioning policy:
a single release channel publishing 0.x versions from main to npm's default
latest dist-tag.
Scenario: A package is intended for public npm publication
- WHEN a workspace package under
packages/is public and named@pdpp/* - THEN its
package.jsonSHALL declare public npmpublishConfigtargeting thelatestdist-tag - AND its git-tracked package version SHALL remain
0.0.0 - AND semantic-release SHALL own the published npm version
- AND
.releaserc.yamlSHALL include the package root in the@semantic-release/npmpublish set
Scenario: A package manifest is not listed for public npm publication
- WHEN a package manifest in the repository is not intended for public npm publication
- THEN it SHALL remain private
- AND it SHALL NOT declare npm
publishConfig
Scenario: The release workflow publishes npm packages
- WHEN CI publishes a PDPP npm package through the normal release workflow
- THEN the workflow SHALL use GitHub Actions OIDC / npm trusted publishing
- AND the workflow SHALL NOT require
NPM_TOKENorNODE_AUTH_TOKEN - AND token-based publication SHALL be limited to owner-controlled bootstrap or emergency recovery outside the normal release path
Scenario: A new public package is added
- WHEN an OpenSpec change makes another
@pdpp/*package public - THEN the package SHALL either join the shared release train and pass the package-release policy checker or explicitly define and justify a different release policy in that change
Requirement: The PDPP CLI SHALL be published by semantic-release
The repository SHALL publish the public PDPP CLI package to npm through
the official @semantic-release/npm plugin as part of the semantic-release
workflow while preserving Conventional Commits release analysis and release-note
generation. Releases are cut from main on a single channel: 0.x versions on
npm's default latest dist-tag, with no prerelease branch or dist-tag.
Scenario: A release-worthy commit reaches main before launch
- WHEN all release-required CI checks pass and semantic-release determines a new version from Conventional Commits on
main - THEN semantic-release SHALL publish the CLI package to npm from the configured package root on the default
latestdistribution channel - AND the npm package version SHALL be the semantic-release version
- AND release type and release notes SHALL continue to be derived from Conventional Commits
- AND npm publication SHALL NOT be implemented as a custom
npm publishcommand in@semantic-release/exec
Scenario: Published versions must remain below 1.0.0 until the owner declares stability
- WHEN semantic-release computes the next version on
main - THEN the repository SHALL keep a release baseline tag below
1.0.0reachable frommainso version computation continues the 0.x stream rather than defaulting to a first-release1.0.0 - AND commits on
mainSHALL NOT carry Conventional Commits breaking-change markers until the owner intentionally declares the 1.0 milestone
Scenario: The owner declares 1.0
- WHEN the owner intentionally declares the stability milestone
- THEN the major bump SHALL land through an OpenSpec-backed release-readiness change as a deliberate breaking-change commit
- AND the change SHALL NOT alter the single-channel release shape
Scenario: The release workflow publishes to npm from GitHub Actions
- WHEN the release job publishes the CLI package to npm
- THEN the normal GitHub Actions release path SHALL use npm trusted publishing with
id-token: write - AND the job SHALL avoid long-lived npm tokens for normal release publication
- AND the package SHALL publish provenance when npm supports provenance for the workflow and source repository visibility
Scenario: Emergency token publication is used
- WHEN trusted publishing is temporarily unavailable and a maintainer uses token-based npm publication
- THEN the token fallback SHALL be documented as an emergency/manual path
- AND the token SHALL be granular, automation-scoped, time-limited, rotated, and removed after trusted publishing is verified
- AND this fallback SHALL NOT satisfy the normal GitHub Actions release scenario
Scenario: The release job is configured
- WHEN the semantic-release job runs
- THEN it SHALL run only after release-required tests and validation have succeeded
- AND it SHALL check out full git history
- AND it SHALL run on a Node version supported by semantic-release, preferring latest LTS