Todos los artículos

Addendum: Getting Claude to Write Release Notes in Plain English

A follow-up to "Forcing Claude Code to Speak Human": what's broken in Claude's changelog voice, a rule block to stop it, and five before-and-after rewrites.

3 de noviembre de 2026

#AI#claude#technical writing#Developer Tools#Software Engineering
Addendum: Getting Claude to Write Release Notes in Plain English

This is a short follow-up to Forcing Claude Code to Speak Human. The custom output style fixed how Claude talks to me in the terminal. It didn't fix the release notes and changelog entries it writes for everyone else, which drifted into a breezy shorthand that sounds friendly and says less than it should. Below is what's wrong with that style, a rule block you can drop into your team's prompts, and five rewrites.

1. What Is Grammatically and Syntactically Broken

This style—the hallmark of AI "changelog breezy-speak"—commits six distinct grammatical and semantic violations:

  1. Animism and Anthropomorphic Category Errors:

    • "Screen readers ... hear" (Screen readers do not hear; assistive tech parses the DOM and announces text to a human listener).
    • "The invite dialog says" (A modal does not speak; it renders or displays text).
    • "changing filters ... asks to discard it" (An action cannot ask a question; the application or modal prompts the user).

    Attributing human sensory or communicative faculties to UI elements, data structures, or user actions obscures the true actor and the mechanism.

  2. Dangling Absolute Participles:

    • "...open invitations included..."
    • "...including the sealed token, off the stored row."

    Tacking unattached participial phrases onto the end of a clause avoids writing a proper dependent clause with an explicit subject and verb. It turns critical data conditions into grammatical afterthoughts.

  3. Colloquial Spatial Metaphors Masking System Architecture:

    • "lands in the bell" (Treats a notification center UI icon like a physical basket).
    • "keeps ... off the stored row" (Uses a folksy phrasal verb instead of technical data modeling terms like excludes, omits, or redacts).
    • "stop arriving as crashes" (Where are they arriving? Sentry? Datadog? The browser console? The sentence omits the system boundary).
  4. Deverbal Nouns and Slangy Shorthand:

    • "...once its save starts..."
    • "...changing filters mid-save..."

    Using "save" as a count noun ("a save", "its save", "mid-save") is colloquial jargon that conceals the underlying state machine (e.g., an asynchronous request in-flight, an optimistic state transition, a pending database mutation).

  5. Gerund Phrases as Subjects of Communicative Verbs:

    • "changing filters mid-save no longer asks to discard it"

    The gerund phrase changing filters mid-save is the grammatical subject of the transitive verb asks. An event cannot ask; the UI modal prompts the operator.

  6. Agent Erasure and Causal Smearing:

    • "Errors raised in the 3 seconds after beforeunload aren't reported..."

    Claude compresses the bug, the temporal window, the suppression mechanism, and the telemetry target into a breezy compound sentence using coordinate conjunctions (so, and). The sentence never names what swallows the errors or where they were previously logged.

2. Copy-Paste Instruction Snippet for Team Prompts

Drop this rule into CLAUDE.md, .cursorrules, or your shared system prompts under your engineering communication standards:

### Technical Communication & Release Note Directives: Clarity Over Concision

1. Ban UI and Code Anthropomorphism:
- Inanimate components, tools, and data structures do NOT possess sensory or human agency.
- Forbid: "The modal says", "Screen readers hear", "Changing settings asks", "The database knows".
- Require: "The modal displays", "The screen reader announces", "The client prompts the user", "The table schema records".

2. Ban Colloquial Spatial Metaphors and Jargon:
- Forbid folksy phrasal verbs: "lands in the bell", "keeps off the row", "lands in the inbox", "drops on the floor".
- Name the exact component, protocol, or column: "renders in the notification drawer", "omits from the database record", "drops the packet".

3. Name the System Boundary and Telemetry Sink:
- Never write "reported", "logged", or "arrives as a crash" without naming the receiving system (e.g., Sentry, CloudWatch, the browser console, the ingest queue).

4. State the Lifecycle and State Machine Explicitly:
- Never use deverbal shorthand like "its save", "mid-save", or "mid-fetch".
- State the technical phase: "while the persistence request is in-flight", "optimistically transitions to SAVED", "during active mutation".

5. Ban Detached Absolute Participles:
- Forbid tacked-on fragments like "...open invitations included" or "...tokens omitted".
- Use complete subordinate clauses: "...which includes pending invitations", or active verbs: "...and excludes authentication tokens".

6. Enforce Subject-Verb-Object (SVO) with Active Engineering Agency:
- Lead with what changed, name the mechanism, and specify the operational result.
- Never compress the trigger, mechanism, and effect into a single breezy compound sentence joined by "so" or "and".

3. Before and After Rewrites

Phrase 1

Before: A password-reset notice now lands in the bell, and the record serializer keeps that request's payload, including the sealed token, off the stored row.

Diagnosis: "Lands in the bell" is a colloquial spatial metaphor. "Keeps ... off the stored row" is lazy phrasal slang. "Including the sealed token" is a compressed afterthought that obscures a critical security fix.

After: The notification service now delivers password-reset notices to the user navigation bell menu. The record serializer explicitly excludes the request payload and the sealed token from the persisted database row to prevent authentication secrets from leaking into storage.

Phrase 2

Before: The invite dialog says every seat is in use, open invitations included, instead of the raw quota-validator error.

Diagnosis: "Dialog says" anthropomorphizes UI. "Open invitations included" is a detached participial fragment. The sentence lacks an explicit trigger.

After: When an organization exhausts its seat quota, the invitation modal now displays: "Every seat is in use (including pending invitations)." This replaces the raw quota-validator error the modal displayed before.

Phrase 3

Before: Errors raised in the 3 seconds after beforeunload aren't reported, so Firefox's aborted chunk imports stop arriving as crashes.

Diagnosis: Passive voice ("aren't reported"), unnamed monitoring destination ("arriving as crashes"), and colloquial causal conjunction ("so").

After: The frontend error reporter now ignores exceptions raised within three seconds of a beforeunload event. This suppresses benign ChunkLoadError failures caused by Firefox canceling script fetches during page transitions, preventing them from logging as unhandled exceptions in Sentry.

Phrase 4

Before: Screen readers now get an h1 on the 403 and 404 pages, and hear the help text under the notification-type select and integration settings.

Diagnosis: Category error ("screen readers hear") and vague assignment ("get an h1"). Fails to describe how the markup connects to assistive technology.

After: We added semantic <h1> elements to the 403 and 404 error pages to establish heading structure for assistive devices. We also linked help text in the notification-type dropdown and integration settings fields via aria-describedby attributes so screen readers announce guidance upon input focus.

Phrase 5

Before: A conflict-resolution choice counts as saved once its save starts, so changing filters mid-save no longer asks to discard it.

Diagnosis: Deverbal slang ("its save starts", "mid-save"), colloquial phrasing ("counts as saved"), and an inanimate action acting as a speaker ("changing filters ... asks").

After: The conflict resolution UI now optimistically marks a selected conflict-resolution choice as saved as soon as the client dispatches the network request. If the user adjusts table filters while this save request is in-flight, the view no longer prompts the user to discard unsaved changes.


AI attribution: 2/4 — AI-drafted, human-edited. What this means

Jason Vertrees is the founder of Heavy Chain Engineering, which helps lower middle-market vertical SaaS companies and PE firms turn scattered AI usage into measurable delivery leverage — 85% faster feature velocity, six-to-eight-week projects shipped in days. If you want help building an AI-native engineering organization, book an AI Delivery Assessment or email jason.vertrees@gmail.com.