Create Changesets
Overview
Generate changesets, update documentation, draft blog entries, and update skills for user-facing changes.
Steps
-
Analyze changes
- Compare current branch to
masterto identify modified packages - Group changes by impact type (feature, fix, breaking)
- Identify transitive dependencies that expose the change
- Check for modified skills in
.cursor/skills/andpackages/*/.cursor/skills/
- Compare current branch to
-
Determine affected packages
- Include directly modified packages
- Add transitive dependents when interfaces/behaviors are exposed:
@data-client/endpoint→ also select@data-client/rest,@data-client/graphql@data-client/coreor@data-client/normalizr→ also select@data-client/react,@data-client/vue
-
Run changesets
- Run
yarn changesetonce per distinct change - Select all affected packages (direct + transitive)
- Choose appropriate version bump (patch/minor/major)
- For packages under 1.0, use minor for breaking changes
- When writing the markdown body, follow Changeset body quality below (user-visible outcome, code examples when helpful, no internal implementation narrative)
- Run
-
Update documentation
- Update primary docs in
docs/for any changed public APIs - Search for all usages of changed APIs across
docs/,packages/*/README.md, and rootREADME.md - Update all found references to reflect new behavior, signatures, or deprecations
- For new exports: add to relevant API reference pages
- Update primary docs in
-
Update release blog
- Find the latest draft blog post in
website/blog/(hasdraft: truein frontmatter) - Add the change following
@website/blog/.cursor/rules/blog-posts.mdc:- Place in appropriate conceptual category section
- Include code example if applicable
- Link to PR/commit and relevant docs
- For breaking changes: add to summary's Breaking Changes section with anchor link
- Find the latest draft blog post in
-
Update skills
- If code changes affect workflows described in existing skills, update those skills to match
- If new APIs or patterns are introduced that agents should know about, add them to the relevant skill
- Skill changes don't need changesets — they are development tooling, not published packages
Writing perspective
All user-facing text (changesets, blog entries, docs) should be written from the library user's point of view. Answer: what did the user see go wrong, and what works for them now? Avoid internal names (conditional types, branch names, helper types like SoftPathArgs, file paths, PR numbers) unless the audience is maintainers reading a technical appendix — changeset bodies are for consumers reading the changelog.
Changeset body quality
- Lead with impact — One short title line, then 1–3 sentences on behavior: errors gone, typings improved, new capability, migration note.
- User vocabulary — Name public APIs (
RestEndpoint,resource(), hook names). Do not explain how the fix was implemented. - When to add code — Prefer a minimal example when the change is TypeScript-only or subtle: show the pattern that was broken and now works (subclass,
extend, option object). Skip examples for trivial renames or obvious one-line fixes. - Examples — Realistic imports and types; omit unrelated options. For fixes, you can show one “now types correctly” snippet instead of a long before/after if the before state was “TypeScript error on …”.
- Breaking changes — Still say what the user must do; use Before/After sections with code when the migration is non-obvious.
Changeset format
- First line: Action verb ("Add", "Fix", "Update", "Remove")
- Breaking: Prefix with
BREAKING CHANGE:orBREAKING: - Body: User outcome first; implementation almost never belongs here
- New exports: Use "New exports:" with a bullet list
Code examples in changesets
- Fixes: Optional
// Before:/// After:comments in one block, or two small blocks — keep them copy-paste plausible - Breaking changes: Use
#### Beforeand#### Afterheaders with complete snippets - Multiple scenarios: Short intro line per scenario, or separate fenced blocks with a one-line label above each
Markdown Formatting
Follow @.cursor/rules/markdown-formatting.mdc for all markdown content.