did-btcr2-js

ADR 065: Adopt Changesets for Per-Package Changelogs with Manual Publishing

Status: Accepted

Date: 2026-07-02

Branch / PR: chore/monorepo-hygiene

References: ADR 001

Context

The monorepo publishes ten independently-versioned packages under the @did-btcr2/ scope. Their inter-package dependencies use the workspace:^ protocol, and their release cadence is independent: a breaking change lands as a minor in the affected package (0.x semantics), while downstream packages that only take the dependency uptake move by a patch. None of the packages carried a CHANGELOG.md, so the per-package release history lived only in git and in the ADRs.

@changesets/cli and @changesets/changelog-github were already installed as root dev dependencies, but nothing was wired: the .changeset/ directory existed with no config.json, so the tool could not run. Two conventions constrain how this gets adopted:

Decision

Initialize Changesets for independent versioning

Add .changeset/config.json:

Add scripts, keep publishing manual

Three root scripts wrap the tool:

Publishing is intentionally not automated. There is no changesets GitHub Action and no publish-on-merge job; a maintainer publishes with the existing flow (pnpm publish:all, or changeset publish to publish and tag only the changed packages). No npm token is added to CI.

Do not enforce changesets in CI

changeset status is deliberately kept out of the CI workflow. Enforcing “every push must carry a changeset” would false-fail on chore, docs, and infrastructure branches that legitimately change no published behavior (this branch is one such example). Whether a change needs a release is a maintainer judgment made at landing time, not a CI gate.

Consequences

Rejected alternatives