Skip to content

Epic: changesets-compatible change-file support + migrate --from-changesets #545

Description

@goosewobbler

From the July 2026 direction review (§9, incl. the sampo deep-dive). Strategic: changesets migrators are the largest pool of monorepo-release users in motion; without change-file support releasekit isn't in their consideration set and sampo wins them by default. Conventional commits stay the default — change files are an option. Design settled in ROADMAP.md; likely splits into sub-issues (parser/stream, standing-PR integration, migrate command, check gate).

Design (settled)

  • Format: changesets .changeset/*.md grammar verbatim, parsed as a superset — quoted "@scope/pkg" keys, plus ecosystem/name canonical-ID prefixes (covers sampo migrators too; sampo uses knope's changesets crate so the grammar is already shared). Support changesets' none bump (notes-only entry). Default dir .changeset/ (configurable) so pending changesets are consumed in place, zero file moves. Skip non-parseable files and README.md with a warning (sampo hard-errors on .changeset/README.md; every changesets repo has one).
  • Aggregation: unified Change stream — Change { source: commit|file, packages, bump, prose, ref }; per-package bump = max over all Changes (same rule as commits today). Two modes: additive (default) and only (pure changesets emulation). Groups/prerequisites/strategies compose after aggregation, unchanged.
  • Pipeline: optional changeFiles field on VersionOutput (new fields optional — old manifests in open PRs must tolerate absence); file prose enters notes verbatim by default (LLM rewrite opt-in only); manifest comment records consumed paths+shas; consumed files deleted in the same release-prep commit as the version bumps (atomic via squash; no [skip ci] interaction). Prerelease consumption tracked in the manifest — files stay on disk until a graduating release (no sampo-style file moves). Deselected packages' files carry to the next cycle.
  • releasekit migrate --from-changesets: map .changeset/config.json (fixed→fixed groups, linked→linked, ignore, baseBranch, access); emit config with changeFiles: { dir: ".changeset", mode: "only" } (day-one workflow preservation — additive is the later upsell); leave pending changesets untouched; refuse when pre.json exists with guidance (graduate first, or map channels manually); suggest (don't auto-apply) removing @changesets/cli + replacing changesets/action workflows; verify by printing the releasekit dry-run plan alongside changeset status.
  • Action-side change check (subsumes the earlier "release-hygiene gate" idea): marker comment + commit status (or dismissable bot review, which works with plain branch protection) for PRs touching packages with neither a change file nor a qualifying conventional commit. Matches sampo's hosted-bot value with zero hosted infra.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions