Skip to content

Commit 9019f73

Browse files
aspiersclaude
andcommitted
docs(skill): add brevity guidance to writing-changesets
The skill pushed hard on "concrete detail" and bulleting dense sections but never said to keep a changeset short or match its length to what the reader must do — so changesets drifted toward exhaustive PR-depth prose. Add a "Keep it as short as the change deserves" section: length tracks the reader's adaptation work, brevity and bullets are complementary (cut first, then bullet the survivors), and a concrete delete-list for the usual bloat (verbatim samples, rationale, exhaustive enumerations, invisible internal filtering, unactionable caveats). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent cc3ba80 commit 9019f73

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

  • .agents/skills/writing-changesets

.agents/skills/writing-changesets/SKILL.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,49 @@ to adapt their environment or code **without reading the PR or
224224
the source**. Changesets are not release-note marketing copy —
225225
they are migration instructions.
226226

227+
### Keep it as short as the change deserves
228+
229+
"Concrete" is not "exhaustive". Include exactly what the reader
230+
needs to adapt, and stop. Most changesets are **two to four
231+
sentences per audience**; a small change is often a single
232+
sentence. Length must track the size of what the reader has to do,
233+
not the effort that went into the change. A one-line behaviour
234+
tweak gets a one-line changeset even if the PR was large.
235+
236+
Brevity and bullets are not in tension: cutting is about _how many_
237+
points survive, bullets are about _how you lay them out_ so the
238+
survivors stay scannable. First cut to the points the reader must
239+
act on; then, if 3+ remain, lay them out as bullets rather than
240+
packing them into one paragraph — a short multi-point section is
241+
still a wall of text when run together. Keep one- or two-point
242+
sections as inline prose. If you find yourself writing a fourth or
243+
fifth bullet, that is a signal to cut, not to keep listing.
244+
245+
Before you finish, delete anything the reader does not act on:
246+
247+
- **A verbatim example** (a full log line, a whole JSON body) when
248+
naming the fields already tells them what to grep or send. Show
249+
a shape only when the exact serialization is the thing they must
250+
match.
251+
- **Rationale and "why" prose** — "since this can signal X", "so
252+
that Y". State the observable behaviour; the reasoning belongs
253+
in the commit or PR, not the release note.
254+
- **Exhaustive enumerations** — every endpoint, every reason
255+
string, every excluded case — when a representative name plus
256+
"and related …" conveys the same adaptation. List the full set
257+
only when the reader must match against each member.
258+
- **Internal filtering the reader never sees** — "3xx are filtered
259+
before this runs, 5xx are logged elsewhere". If it doesn't change
260+
what they do, it doesn't belong.
261+
- **Caveats about edge cases** the reader cannot act on. One
262+
clause at most; usually cut.
263+
264+
Rule of thumb: if removing a sentence would not change what the
265+
reader _does_, remove it. A tight four-line changeset that names
266+
the fields and the observable effect beats a fifteen-line one that
267+
also explains the mechanism, quotes a sample, and enumerates every
268+
case.
269+
227270
### What "concrete detail" means
228271

229272
Good adaptation detail includes:

0 commit comments

Comments
 (0)