Create Changesets
Overview
Generate changesets, update documentation, draft blog entries, and update skills for user-facing changes.
Steps
Analyze changes
- Compare current branch to
master to identify modified packages
- Group changes by impact type (feature, fix, breaking)
- Identify transitive dependencies that expose the change
- Check for modified skills in
.agents/skills/, .cursor/skills/, and packages/*/.agents/skills/
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/core or @data-client/normalizr → also select @data-client/react, @data-client/vue
Run changesets
- Run
yarn changeset once 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)
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 root README.md
- Update all found references to reflect new behavior, signatures, or deprecations
- For new exports: add to relevant API reference pages
Update release blog
- Find the latest draft blog post in
website/blog/ (has draft: true in 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
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: or BREAKING:
- 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
#### Before and #### After headers 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.
1---2name: changeset3description: Create user-focused changesets (changelog entries) for semver bumps, release notes, breaking changes, and docs; prefer impact and code examples over implementation detail4---56# Create Changesets78## Overview9Generate changesets, update documentation, draft blog entries, and update skills for user-facing changes.1011## Steps121. **Analyze changes**13 - Compare current branch to `master` to identify modified packages14 - Group changes by impact type (feature, fix, breaking)15 - Identify transitive dependencies that expose the change16 - Check for modified skills in `.agents/skills/`, `.cursor/skills/`, and `packages/*/.agents/skills/`17182. **Determine affected packages**19 - Include directly modified packages20 - Add transitive dependents when interfaces/behaviors are exposed:21 - `@data-client/endpoint` → also select `@data-client/rest`, `@data-client/graphql`22 - `@data-client/core` or `@data-client/normalizr` → also select `@data-client/react`, `@data-client/vue`23243. **Run changesets**25 - Run `yarn changeset` once per distinct change26 - Select all affected packages (direct + transitive)27 - Choose appropriate version bump (patch/minor/major)28 - For packages under 1.0, use minor for breaking changes29 - When writing the markdown body, follow **Changeset body quality** below (user-visible outcome, code examples when helpful, no internal implementation narrative)30314. **Update documentation**32 - Update primary docs in `docs/` for any changed public APIs33 - Search for all usages of changed APIs across `docs/`, `packages/*/README.md`, and root `README.md`34 - Update all found references to reflect new behavior, signatures, or deprecations35 - For new exports: add to relevant API reference pages36375. **Update release blog**38 - Find the latest draft blog post in `website/blog/` (has `draft: true` in frontmatter)39 - Add the change following `@website/blog/.cursor/rules/blog-posts.mdc`:40 - Place in appropriate conceptual category section41 - Include code example if applicable42 - Link to PR/commit and relevant docs43 - For breaking changes: add to summary's Breaking Changes section with anchor link44456. **Update skills**46 - If code changes affect workflows described in existing skills, update those skills to match47 - If new APIs or patterns are introduced that agents should know about, add them to the relevant skill48 - Skill changes don't need changesets — they are development tooling, not published packages4950## Writing perspective51All 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.5253## Changeset body quality541. **Lead with impact** — One short title line, then 1–3 sentences on behavior: errors gone, typings improved, new capability, migration note.552. **User vocabulary** — Name public APIs (`RestEndpoint`, `resource()`, hook names). Do not explain how the fix was implemented.563. **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.574. **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 …”.585. **Breaking changes** — Still say what the user must do; use Before/After sections with code when the migration is non-obvious.5960## Changeset format61- **First line**: Action verb ("Add", "Fix", "Update", "Remove")62- **Breaking**: Prefix with `BREAKING CHANGE:` or `BREAKING:`63- **Body**: User outcome first; implementation almost never belongs here64- **New exports**: Use "New exports:" with a bullet list6566## Code examples in changesets67- **Fixes**: Optional `// Before:` / `// After:` comments in one block, or two small blocks — keep them copy-paste plausible68- **Breaking changes**: Use `#### Before` and `#### After` headers with complete snippets69- **Multiple scenarios**: Short intro line per scenario, or separate fenced blocks with a one-line label above each7071## Markdown Formatting72Follow `@.cursor/rules/markdown-formatting.mdc` for all markdown content.