Command: changeset
Changesets document package changes for release. Concise bullets, imperative voice, user impact only.
Core principle: one action verb + one impact statement = one bullet.
Use when:
.changeset/*.md filesdocs/components/changelog.mdx for registry workDo not use for:
minorForbidden: minor changesets for:
@platejs/slate@platejs/coreplatejsUse patch instead. minor on those explodes version bumps across dependents.
# Wrong
---
"@platejs/core": minor
---
# Correct
---
"@platejs/core": patch
---
Only real breaking changes get .
majorNever combine packages in one changeset.
# Wrong
---
'@platejs/core': patch
'@platejs/utils': patch
---
# Correct
.changeset/core-fix-types.md
.changeset/utils-add-helper.md
If changes are only under apps/www/src/registry/, do not write a package changeset.
Update docs/components/changelog.mdx instead.
Use imperative voice:
Add support for XFix Y behaviorRemove deprecated ZDo not use:
Added ...We fixed ...Keep simple changes to one line:
- Fix `asChild` TypeScript error
- Add `disabled` prop to Button
Use code examples only when needed:
// Before
editor.api.foo();
// After
editor.tf.foo();
Focus on user impact only. No implementation diary.
Simple:
---
"@platejs/utils": patch
---
Fix `isEmpty` not handling void elements correctly
API change:
---
"@platejs/core": patch
---
Rename `editor.api.foo` to `editor.tf.foo`
```tsx
// Before
editor.api.foo();
// After
editor.tf.foo();
```
Breaking change:
---
'@platejs/basic-nodes': major
---
Remove `SkipMarkPlugin`; functionality is built into core
**Migration:** Remove `SkipMarkPlugin` from your plugin list. Configure marks directly:
```tsx
MyMarkPlugin.configure({
rules: { selection: { affinity: 'outward' } },
});
```
Before shipping:
minor for @platejs/slate, @platejs/core, or platejs? Change to patchFor apps/www/src/registry changes:
### [Month Day] #[Version]
- **`component-name`**: Brief description
- Migration note if actually needed
Same style rules: concise, imperative, user impact only.