docs: add changeset guidelines for contributors and agents (#198)

* docs: add changeset guidelines to contributing docs

Contributors and agents need to know when and how to add changesets.
Without one, changes to published packages won't trigger a release.

- CONTRIBUTING.md: full Changesets section with when/when-not, how to
  add, writing descriptions, examples for patch/minor/major
- AGENTS.md: concise changeset subsection using --empty for
  non-interactive use, added as step in PR flow
- PR template: changeset checkbox in checklist

* docs: note that multiple changes need separate changesets
This commit is contained in:
Matt Kane
2026-04-03 22:36:37 +01:00
committed by GitHub
parent 422018aeb2
commit 0aae9d806b
3 changed files with 108 additions and 1 deletions

View File

@@ -24,6 +24,7 @@ Closes #
- [ ] `pnpm test` passes (or targeted tests for my change) - [ ] `pnpm test` passes (or targeted tests for my change)
- [ ] `pnpm format` has been run - [ ] `pnpm format` has been run
- [ ] I have added/updated tests for my changes (if applicable) - [ ] I have added/updated tests for my changes (if applicable)
- [ ] I have added a [changeset](https://github.com/emdash-cms/emdash/blob/main/CONTRIBUTING.md#changesets) (if this PR changes a published package)
- [ ] New features link to an approved Discussion: https://github.com/emdash-cms/emdash/discussions/... - [ ] New features link to an approved Discussion: https://github.com/emdash-cms/emdash/discussions/...
## AI-generated code disclosure ## AI-generated code disclosure

View File

@@ -54,12 +54,37 @@ Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR. Key rules:
You verified linting and types were clean before starting. If they're failing now, your changes caused it -- even if the errors are in files you didn't touch. Don't dismiss failures as "unrelated". Don't assign blame. Just fix them. You verified linting and types were clean before starting. If they're failing now, your changes caused it -- even if the errors are in files you didn't touch. Don't dismiss failures as "unrelated". Don't assign blame. Just fix them.
### Changesets
If your change affects a published package's behavior, add a changeset. Without one, the change won't trigger a package release.
```bash
pnpm changeset --empty
```
This creates a blank changeset file in `.changeset/`. Edit it to add the affected package(s), bump type, and description:
```markdown
---
"emdash": patch
---
Fixes CLI `--json` flag so JSON output is clean.
```
Start descriptions with a present-tense verb (Adds, Fixes, Updates, Removes, Refactors). Focus on what changes for the user, not implementation details.
Skip changesets for docs-only, test-only, CI, or demo/template changes.
See [CONTRIBUTING.md § Changesets](CONTRIBUTING.md#changesets) for full guidance and examples.
### PR Flow ### PR Flow
1. All tests pass: `pnpm test` 1. All tests pass: `pnpm test`
2. Full lint suite clean: `pnpm --silent lint:json | jq '.diagnostics | length'`. Returns JSON with stderr piped to /dev/null, so it won't break parsers. Fix any issues. 2. Full lint suite clean: `pnpm --silent lint:json | jq '.diagnostics | length'`. Returns JSON with stderr piped to /dev/null, so it won't break parsers. Fix any issues.
3. Format with `pnpm format` (oxfmt with tabs for indentation, configured in `.prettierrc`). 3. Format with `pnpm format` (oxfmt with tabs for indentation, configured in `.prettierrc`).
4. Open the PR with the `pr` skill. Fill out every section of the PR template. Check the AI disclosure box. 4. Add a changeset if the change affects a published package: `pnpm changeset`.
5. Open the PR with the `pr` skill. Fill out every section of the PR template. Check the AI disclosure box.
### Dev Servers ### Dev Servers

View File

@@ -215,6 +215,87 @@ We welcome AI-assisted contributions. They are held to the same quality bar as a
- **Dependency upgrades** outside of Renovate/Dependabot. We manage these centrally. - **Dependency upgrades** outside of Renovate/Dependabot. We manage these centrally.
- **"Improvements"** to code you haven't been asked to change (added logging, extra error handling, style changes in unrelated files). - **"Improvements"** to code you haven't been asked to change (added logging, extra error handling, style changes in unrelated files).
## Changesets
Every PR that changes the behavior of a published package needs a **changeset** — a small Markdown file that describes the change for the CHANGELOG and determines the version bump. Without a changeset, the change won't trigger a package release.
### When you need one
- Bug fixes, features, refactors, or any other change that affects a published package's behavior or API.
- Changes that span multiple packages need one changeset listing all affected packages.
- If a PR makes more than one distinct change, add a separate changeset for each. Each one becomes its own CHANGELOG entry.
### When you don't
- Docs-only changes, test-only changes, CI/tooling changes, or changes to demo apps and templates (these are in the changeset ignore list).
### How to add one
Run from the repo root:
```bash
pnpm changeset
```
This walks you through selecting the affected package(s), the semver bump type, and a description. It creates a randomly-named `.md` file in `.changeset/`.
You can also create one manually — see the existing files in `.changeset/` for the format.
### Writing the description
Start with a present-tense verb describing what the change does, as if completing "This PR...":
- **Adds** — a new feature or capability
- **Fixes** — a bug fix
- **Updates** — an enhancement to existing behavior
- **Removes** — removed functionality
- **Refactors** — internal restructuring with no behavior change
Focus on how the change affects someone **using** the package, not implementation details. The description ends up in the CHANGELOG, which people read once during upgrades.
**Patch** (bug fixes, refactors, small improvements):
```markdown
---
"emdash": patch
---
Fixes CLI `--json` flag so JSON output is clean. Log messages now go to stderr when `--json` is set.
```
**Minor** (new features, non-breaking additions):
```markdown
---
"emdash": minor
---
Adds `scheduled_at` field to content entries, enabling scheduled publishing via the admin UI.
```
**Major** (breaking changes) — include migration guidance:
```markdown
---
"emdash": major
---
Removes the `legacyAuth` option from the integration config. All sites must use passkey authentication.
To migrate, remove `legacyAuth: true` from your `emdash()` config in `astro.config.mjs`.
```
### Which packages?
Only published packages need changesets. Demos, templates, docs, and test fixtures are excluded. The main packages are:
- `emdash` (core)
- `@emdash-cms/admin`, `@emdash-cms/auth`, `@emdash-cms/cloudflare`, `@emdash-cms/blocks`
- `create-emdash`
- First-party plugins (`@emdash-cms/plugin-*`)
When in doubt, run `pnpm changeset` and it will only show packages that aren't ignored.
## Commits and PRs ## Commits and PRs
- Branch from `main`. - Branch from `main`.