Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .agents/skills/changelog-entry/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
name: changelog-entry
description: Write the changelog entry for an Objectstore PR, or exclude a PR from the changelogs. Use when opening a PR, writing its title or description, or adding a `### Changelog Entry` section.
---

# Changelog Entries

The Python client, the Rust client and the server are released separately as
Craft workspaces (see `.craft.yml`), each with its own changelog:

- `clients/python/CHANGELOG.md`
- `clients/rust/CHANGELOG.md`
- `objectstore-server/CHANGELOG.md`, which also covers `objectstore-service`
(`includePaths` in `.craft.yml`)

Craft lists a merged PR in the changelog of every workspace whose files it
changes, and adds the author and a link to the PR.

## Deciding on the Entry

1. **Exclude PRs that users won't notice**, for example changes to tests, CI,
internal refactors, or a fix for a bug that was never released. To exclude
one, write `#skip-changelog` anywhere in the PR description. Craft ignores
the marker inside code spans and code blocks. PRs that only change files
outside all workspaces are never listed and need no marker.
2. **Use the PR title if it's a good entry.** Craft groups the PR by the
conventional commit type of its title (`feat`, `fix`, ...), and uses the
rest of the title as the entry text. If the title follows the rules below
and needs no details, there's nothing more to do.
3. **Otherwise, add a `### Changelog Entry` section** at the end of the PR
description, after the description and any references such as
`Fixes FS-123`, following the rules below. It replaces the title in every
changelog the PR is listed in.

## Writing the Entry

- Write one top-level bullet, about a line long. Put relevant details in
sub-bullets, only when they're needed.
- Describe the change in behavior that a user of the library notices, not the
implementation or the problem statement from the PR description. Say what
the library does now, not which problem no longer happens.
- For a breaking change or deprecation, add a sub-bullet with the migration
step.
- The entry appears in every changelog the PR touches, so it must make sense to
the readers of each. If it can't, suggest to split the PR.
5 changes: 2 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ cargo doc --workspace --all-features --no-deps --document-private-items

## Pull Requests

The Python client, the Rust client and the server are released separately as Craft workspaces (see `.craft.yml`), each with its own changelog (`clients/python/CHANGELOG.md`, `clients/rust/CHANGELOG.md`, `objectstore-server/CHANGELOG.md`). Changelog entries are generated from PR titles:
Changelogs are generated from PR titles and descriptions. When opening a PR or writing its title or description, use the `changelog-entry` skill to write its changelog entry or exclude it from the changelogs.

- A PR is listed in the changelog of every workspace whose files it changes, grouped by the conventional commit type of its title (`feat`, `fix`, ...). The scope doesn't matter. The server's changelog also covers `objectstore-service` (`includePaths` in `.craft.yml`); files outside all workspaces aren't listed anywhere.
- If the title doesn't describe the change well for users, add a `### Changelog Entry` section to the PR description with the text to use instead. It's used for every changelog the PR is listed in.
Mark breaking changes with `!` after the type in the PR title, for example `ref(types)!: ...`.
Loading