Superseded by 0025: changesets now version
packages only; apps and services deploy by commit SHA. Decisions 1, 2, 4, 5 and 6 carry forward
there.
Context
Many members, one repository. A member’s version must be recorded where the member travels with it, and nobody should hand-edit a version or a changelog.Decision
- Changesets owns versions. A change to a member needs a changeset (
pnpm changeset). Versioning ispnpm changeset:version, which also refreshes the lockfile.CHANGELOG.mdis never hand-edited. - Every member carries
CHANGELOG.mdandLICENSE. The changelog starts as a# <package-name>heading, which Changesets prepends to. The licence is a verbatim copy of the root file, because a licence travels with the artifact, not with the repository. - Private members still version and tag (
privatePackages: { version, tag }), so apps and services have a release narrative. - Published versions are never replaced. A fix is a new version; rollback is rolling forward.
- A release note per major or breaking release, written by a human before the release: what changes for a consumer, pins, human steps, verification, rollback. Routine releases need none; their notes are the changesets.
- A human approves every release. Release automation prepares; it does not decide.
Consequences
- One release narrative across apps, packages and services.
- Non-npm members (Go, Python) are out of scope; if one appears, an ADR adds its tag rule.
Enforcement
.changeset/config.jsonis the configuration;validate-repository.mjsrequiresCHANGELOG.mdandLICENSEin every member..agents/hooks/guard-bash.mjsdenies runningchangeset versionby an agent.- Planned: chain
pnpm changeset:statusintopnpm verifyso a change without a changeset fails.
Supersedes and sources
Supersedes: none. Sources: basaltadr/0003-versioning-across-three-languages (npm half), 0008-per-member-changelog-and-licence; platform docs/releases/README.md.