---
description: Use when writing changesets for releases
name: changeset
metadata:
  skiller:
    source: .agents/rules/changeset.mdc
---

# Changeset Writing

Always mirror @packages/kitcn/CHANGELOG.md tone and structure.

## 0) Reuse existing changeset

- Before creating a new changeset, check `.changeset/` for an existing unreleased changeset.
- If one exists, UPDATE it instead of creating a new file. Nothing in it has been released yet, so treat it as a living draft.
- Replace outdated content — don't append "also added..." or track progress. Write the latest state as if from scratch.

## 1) Versioning (project is still v0)

- Breaking change => `minor`
- Non-breaking change => `patch`
- If a release has both breaking and non-breaking work, use `minor`.

## 2) Required body structure

- Split the body into explicit sections:
  - `## Breaking changes`
  - `## Features`
  - `## Patches`
- Omit empty sections, but never mix categories in one section.
- Keep bullets concise and user-facing.

## 3) Migration snippets (required for breaking changes)

- Every breaking change must include a short `Before/After` code snippet immediately under that section.
- Include changed imports, renamed exports, or changed call signatures.
- If a symbol is renamed, include a dedicated rename snippet.

## 4) Bullet quality rules

- Start bullets with action verbs: `Add`, `Support`, `Fix`, `Improve`, `Deprecate`, `Remove`, `Drop`.
- Describe what users can do now, not internals.
- Do not mention file paths, private implementation details, or algorithm notes.
- Keep each bullet to one concrete outcome.

## 5) Copy-paste template

````md
---
"kitcn": minor
---

## Breaking changes

- Drop ...

```ts
// Before
...

// After
...
```

## Features

- Add ...

## Patches

- Improve ...
```
````
