---
name: release
description: Bump the app version, update the changelog, and prepare a git tag for release
disable-model-invocation: false
---

# Release

Bump the app version, update the changelog, and prepare a git tag.

## Process

### 1. Determine what changed since the last version

Run `git log` from the last version tag (or all history if no tags exist) and review the
changes. Categorize:

- **Features**: new user-facing capabilities
- **Fixes**: bug fixes
- **Improvements**: performance, UX polish, refactoring that affects behavior
- **Internal**: refactoring, docs, tests, build (don't list individually — summarize if substantial)

### 2. Determine bump type

Read the current version from `package.json`. The project uses **simplified semver during
pre-1.0**:

| Bump                | When                                                 | Example           |
| ------------------- | ---------------------------------------------------- | ----------------- |
| **Minor** (`0.x.0`) | New features, UI changes, behavior changes           | `0.1.0` → `0.2.0` |
| **Patch** (`0.x.y`) | Bug fixes, polish, performance, internal             | `0.1.0` → `0.1.1` |
| **Major** (`1.0.0`) | Only when declaring public stability (user decision) | —                 |

Present the categorized changes and your recommended bump type to the user **for confirmation
before proceeding**.

### 3. Update version

Update the `version` field in `package.json`. This is the **single source of truth** — Vite
injects it as `__APP_VERSION__` at build time (shown in the header badge, and in Settings /
the export envelope once those exist).

### 4. Update the changelog

Maintain `docs/CHANGELOG.md`. If it doesn't exist yet, create it with a top-level `# Changelog`
heading. Add a new entry under a month heading:

```markdown
## June 2026

### v0.2.0

- **New feature** — description…

### v0.1.1

- **Bug fix** — description…
```

- Group by feature/change, not by commit.
- Lead with the name in bold, then a dash and description.
- Most important changes first; summarize related commits into coherent items.

### 5. Cross-check user-facing docs

Scan hand-maintained user-facing surfaces against the changes landing in this release and fix
drift **before** the version-bump commit (the CHANGELOG entry is not the place to quietly slip
in doc fixes):

- `README.md` — the status line and any feature claims still accurate?
- Any in-app help / about / onboarding content that exists at release time.

(When narrative content pages are added later, list them here so this net catches accumulated
drift across many changes.)

### 6. Suggest the git tag

After the user stages and commits the version bump, suggest:

```bash
git tag v{version}
git push --tags
```

If/when a deploy pipeline is wired, note here what publishing the tag triggers.

## Rules

- **Never bump the version without user confirmation** on the bump type.
- **Never stage or commit** — the user handles git operations.
- The export-format `version` (the import/export envelope) is **independent** of the app
  version — only bump it when the export schema actually changes.
- Keep commit subjects single-line; no `Co-Authored-By` trailers (the user handles the commit
  regardless).
