Skip to content

Commit 6cebbff

Browse files
committed
docs: clarify when changesets and server-changes files are needed
Reframe changesets and .server-changes notes as user-facing release notes rather than a catalog of every change. The test is whether a user or customer would care, not whether a public package or server app was touched. Call out the skip cases: internal/admin-only changes, refactors, chores, performance tuning with no user-visible effect, and public packages that are not consumed independently.
1 parent 949e9cf commit 6cebbff

6 files changed

Lines changed: 41 additions & 21 deletions

File tree

.claude/REVIEW.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ Every PR gets a performance pass — not just the ones that look perf-sensitive.
5656
## Always check
5757

5858
- **Tests use testcontainers, not mocks.** Vitest with `redisTest` / `postgresTest` / `containerTest` from `@internal/testcontainers`. Any new `vi.mock(...)` on Redis, Postgres, BullMQ, or other infra is wrong here — 🔴 if added in production-path tests, 🟡 if isolated unit test.
59-
- **Public-package changes have a changeset.** `pnpm run changeset:add` produces `.changeset/*.md`. Required for any edit under `packages/*`. Missing → 🟡; missing on a breaking change → 🔴.
60-
- **Server-only changes have `.server-changes/*.md`.** Required for `apps/webapp/`, `apps/supervisor/` edits with no public-package change. Body should be 1-2 sentences (it has to fit as one bullet in a future changelog). Missing → 🟡.
59+
- **User-facing public-package changes have a changeset.** `pnpm run changeset:add` produces `.changeset/*.md`. Changesets are user-facing release notes, not a catalog of every change: required when a `packages/*` change is something a user would notice or act on, skipped for internal-only changes, refactors, chores, and packages not consumed independently (e.g. `@trigger.dev/redis-worker`). Missing on a user-facing change → 🟡; missing on a breaking change → 🔴. Do not flag a missing note when the change is not user-facing.
60+
- **User-facing server-only changes have `.server-changes/*.md`.** Required for `apps/webapp/`, `apps/supervisor/` edits with no public-package change when the change is user-facing; skip internal-only or admin-only changes, refactors, and chores. Body should be 1-2 sentences (it has to fit as one bullet in a future changelog). Missing on a user-facing change → 🟡.
6161
- **Lua script naming.** Coexisting scripts use behavior-descriptive suffixes (`Tracked`), never `V2`. Old name must keep working until the next deploy clears it.
6262
- **RunQueue payload shape.** V2 run-queue payload's `projectId` is consumed by `workerQueueResolver` for override matching. If a PR drops it from the payload, 🔴.
6363
- **`safeSend` scope.** Defensive IPC wrappers belong on loop / interval / handler contexts, not one-shot terminal sends. If the PR adds `safeSend` to a single terminal call for consistency, 🟡 with a "remove this" suggestion.

.claude/rules/server-apps.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ paths:
55

66
# Server App Changes
77

8-
When modifying server apps (webapp, supervisor, etc.) with **no package changes**, add a `.server-changes/` file instead of a changeset:
8+
`.server-changes/` files are user-facing release notes, not a catalog of every change. When a server app change (webapp, supervisor, etc.) with **no package changes** is user-facing (something a user would notice or act on), add a `.server-changes/` file instead of a changeset. Skip it for internal-only or admin-only changes, refactors, and chores:
99

1010
```bash
1111
cat > .server-changes/descriptive-name.md << 'EOF'
@@ -20,6 +20,6 @@ EOF
2020

2121
- **area**: `webapp` | `supervisor`
2222
- **type**: `feature` | `fix` | `improvement` | `breaking`
23-
- If the PR also touches `packages/`, just the changeset is sufficient (no `.server-changes/` needed).
23+
- If the PR also touches `packages/` and the package change needs a changeset, that changeset covers it (no `.server-changes/` needed). If the package change is internal and needs no changeset, still add a `.server-changes/` file for the user-facing server change.
2424

2525
The body ships **verbatim in user-facing release notes**. Keep it to 1–2 short sentences, non-technical, written for a dashboard user: describe what changed for them, never the implementation (no header names, endpoints, middleware, storage mechanisms, internal tools). See `.server-changes/README.md` for full guidance.

.server-changes/README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ This directory tracks changes to server-only components (webapp, supervisor, etc
44

55
## When to add a file
66

7-
**Server-only PRs**: If your PR only changes `apps/webapp/`, `apps/supervisor/`, or other server components (and does NOT change anything in `packages/`), add a `.server-changes/` file.
7+
These entries are **user-facing release notes**, not a catalog of every change. The test is "would a user or customer care about this change?", not "did I touch a server app?". Add one only when a server-only change is something a user would notice, act on, or want to hear about (a feature, a bug fix they could have hit, a behavior or performance change they would feel). Skip it for internal-only or admin-only changes, refactors, test-only changes, chores, and performance tuning with no user-visible effect. Anyone who wants the exact history reads the commits. When in doubt, ask a maintainer rather than adding a note by default.
88

9-
**Mixed PRs** (both packages and server): Just add a changeset as usual. No `.server-changes/` file needed — the changeset covers it.
9+
**Server-only PRs**: If your PR only changes `apps/webapp/`, `apps/supervisor/`, or other server components (and does NOT change anything in `packages/`) AND the change is user-facing, add a `.server-changes/` file.
1010

11-
**Package-only PRs**: Just add a changeset as usual.
11+
**Mixed PRs** (both packages and server): the changeset covers it, so no `.server-changes/` file is needed. If the package change is internal and needs no changeset but the server change is user-facing, add a `.server-changes/` file for it.
12+
13+
**Package-only PRs**: Just add a changeset as usual, when the change is user-facing.
1214

1315
## File format
1416

AGENTS.md

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,21 @@ Dynamic imports add unnecessary overhead in hot paths and make code harder to an
9292

9393
## Changesets and Server Changes
9494

95-
When modifying any public package (`packages/*` or `integrations/*`), add a changeset:
95+
Changesets and `.server-changes/` files are **user-facing release notes**. They ship verbatim into the changelog that customers read to decide what to upgrade for or pay attention to. They are not a catalog of every change: anyone who wants the exact history reads the commits. So the question is not "did I touch a public package or a server app?" but **"would a user or customer care about this change?"**
96+
97+
**Add one** when the change is something a user would notice, act on, or want to hear about: a new feature, a bug fix they could have hit, a behavior or performance change they would feel, a breaking change.
98+
99+
**Skip it** (no changeset, no `.server-changes/` file) when the change is not worth communicating to users, even if it touches a public package or a server app. For example:
100+
101+
- internal-only or admin-only changes, refactors, test-only changes, chores
102+
- performance or query tuning with no user-visible behavior change
103+
- changes to a public package that is not consumed independently (e.g. `@trigger.dev/redis-worker`), where a version bump means nothing to a user
104+
105+
When in doubt, ask a maintainer rather than adding a note by default. An unnecessary entry is noise in the changelog, not a safe default.
106+
107+
### How to add one
108+
109+
When a **public package** (`packages/*` or `integrations/*`) change is user-facing, add a changeset:
96110

97111
```bash
98112
pnpm run changeset:add
@@ -102,9 +116,9 @@ pnpm run changeset:add
102116
- Confirm with maintainers before selecting **minor** (new features)
103117
- **Never** select major without explicit approval
104118

105-
When modifying only server components (`apps/webapp/`, `apps/supervisor/`, etc.) with no package changes, add a `.server-changes/` file instead. See `.server-changes/README.md` for format and documentation.
119+
When a **server-only** change (`apps/webapp/`, `apps/supervisor/`, etc., with no package changes) is user-facing, add a `.server-changes/` file instead. See `.server-changes/README.md` for format and documentation.
106120

107-
**Write the description for users, not maintainers.** Both changesets and `.server-changes/` notes ship verbatim in user-visible release notes. Lead with what changed *for the user* - one plain sentence describing behavior, not implementation, and never naming internal tools or infra. The full writing guidance in `.server-changes/README.md` applies to changesets too.
121+
**Write the description for users, not maintainers.** Both changesets and `.server-changes/` notes ship verbatim in user-visible release notes. Lead with what changed *for the user*: one plain sentence describing behavior, not implementation, and never naming internal tools or infra. The full writing guidance in `.server-changes/README.md` applies to changesets too.
108122

109123
## Dependency Pinning
110124

CHANGESETS.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ Trigger.dev uses [changesets](https://github.com/changesets/changesets) to manag
44

55
## Adding a changeset (package changes)
66

7+
Changesets and `.server-changes/` files are user-facing release notes, not a catalog of every change. Add one only when the change is something a user would notice or act on. Skip it for internal-only changes, refactors, chores, and packages that are not consumed independently (e.g. `@trigger.dev/redis-worker`). Anyone who wants the exact history reads the commits.
8+
79
To add a changeset, use `pnpm run changeset:add` and follow the instructions [here](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md). Please only ever select one of our public packages when adding a changeset.
810

911
## Adding a server change (server-only changes)
1012

11-
If your PR only changes server components (`apps/webapp/`, `apps/supervisor/`, etc.) and does NOT change any published packages, add a `.server-changes/` file instead of a changeset:
13+
If your PR only changes server components (`apps/webapp/`, `apps/supervisor/`, etc.), does NOT change any published packages, AND the change is user-facing, add a `.server-changes/` file instead of a changeset:
1214

1315
```sh
1416
cat > .server-changes/fix-batch-queue-stalls.md << 'EOF'
@@ -24,17 +26,19 @@ EOF
2426
- `area`: `webapp` | `supervisor`
2527
- `type`: `feature` | `fix` | `improvement` | `breaking`
2628

27-
For **mixed PRs** (both packages and server): just add a changeset. No `.server-changes/` file needed.
29+
For **mixed PRs** (both packages and server): the changeset covers it, so no `.server-changes/` file is needed. If the package change is internal and needs no changeset but the server change is user-facing, add a `.server-changes/` file for it.
2830

2931
See `.server-changes/README.md` for full documentation.
3032

3133
## When to add which
3234

35+
Only for user-facing changes. Skip the note entirely for internal-only or admin-only changes, refactors, and chores.
36+
3337
| PR changes | What to add |
3438
|---|---|
35-
| Only packages (`packages/`) | Changeset (`pnpm run changeset:add`) |
36-
| Only server (`apps/`) | `.server-changes/` file |
37-
| Both packages and server | Just the changeset |
39+
| Only packages (`packages/`) | Changeset (`pnpm run changeset:add`), if the package change is user-facing |
40+
| Only server (`apps/`) | `.server-changes/` file, if the server change is user-facing |
41+
| Both packages and server | The changeset covers it; if the package change needs no changeset but the server change is user-facing, add a `.server-changes/` file |
3842

3943
## Release instructions (CI)
4044

CONTRIBUTING.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ If your change touches core infrastructure, modifies widely-used code paths, or
247247

248248
We use [changesets](https://github.com/changesets/changesets) to manage our package versions and changelogs. If you've never used changesets before, first read [their guide here](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).
249249

250-
If you are contributing a change to any packages in this monorepo (anything in either the `/packages` or `/integrations` directories), then you will need to add a changeset to your Pull Requests before they can be merged.
250+
Changesets are user-facing release notes, not a catalog of every change. If you are contributing a **user-facing** change to a package in this monorepo (anything in `/packages` or `/integrations` that a user would notice or act on), add a changeset to your Pull Request before it can be merged. Skip the changeset for internal-only changes, refactors, chores, and packages that are not consumed independently (e.g. `@trigger.dev/redis-worker`), where a version bump means nothing to a user.
251251

252252
To add a changeset, run the following command in the root of the repo
253253

@@ -265,7 +265,7 @@ Most of the time the changes you'll make are likely to be categorized as patch r
265265

266266
## Adding server changes
267267

268-
Changesets only track published npm packages. If your PR only changes server components (`apps/webapp/`, `apps/supervisor/`, etc.) with no package changes, add a `.server-changes/` file so the change appears in release notes.
268+
Changesets only track published npm packages. If your PR only changes server components (`apps/webapp/`, `apps/supervisor/`, etc.) with no package changes AND the change is user-facing, add a `.server-changes/` file so the change appears in release notes. Skip it for internal-only or admin-only changes, refactors, and chores.
269269

270270
Create a markdown file with a descriptive name:
271271

@@ -286,13 +286,13 @@ EOF
286286

287287
The body text (below the frontmatter) is a one-line description of the change. Keep it concise — it will appear in release notes.
288288

289-
**When to add which:**
289+
**When to add which** (only for user-facing changes; skip the note entirely for internal-only or admin-only changes, refactors, and chores):
290290

291291
| PR changes | What to add |
292292
|---|---|
293-
| Only packages (`packages/`) | Changeset |
294-
| Only server (`apps/`) | `.server-changes/` file |
295-
| Both packages and server | Just the changeset |
293+
| Only packages (`packages/`) | Changeset (if the package change is user-facing) |
294+
| Only server (`apps/`) | `.server-changes/` file (if the server change is user-facing) |
295+
| Both packages and server | The changeset covers it; if the package change needs no changeset but the server change is user-facing, add a `.server-changes/` file |
296296

297297
See `.server-changes/README.md` for more details.
298298

0 commit comments

Comments
 (0)