Google Style for Repo Prose
Source: https://developers.google.com/style. Every rule cites the page that
mandates it. Where the guide is silent, this file says so — never invent a rule
and attribute it to Google. Rules are ordered by how often agent-written prose
violates them; rules 1-7 account for most of the damage.
1. Active voice — name the actor
https://developers.google.com/style/voice
Passive voice hides who does the thing, which turns a contract into a rumor.
- Wrong: "The identity is resolved and the request is forwarded to
_impl."
- Right: "The MCP wrapper resolves the identity and forwards the request to
_impl."
Passive is allowed in exactly three cases: to emphasize the object ("The file
is saved"), to de-emphasize the actor ("Over 50 conflicts were found"), or when
the actor is irrelevant ("The database was purged in January").
2. Present tense — drop "will"
https://developers.google.com/style/tense
Use present tense for behavior not tied to a point in time. Reserve "will" for
something that genuinely happens later. Never use "would".
- Wrong: "The repository will raise
NotFoundError when the tenant is missing."
- Right: "The repository raises
NotFoundError when the tenant is missing."
- Right (genuinely later): "Add the step to the formula. The atom runs the next time the lane executes."
- Wrong: "You could call the wrapper, and it would then translate the error."
3. Second person — "you", not "we"
https://developers.google.com/style/person
Address the reader as "you". "We" is only for the authoring organization, which
has no voice in task descriptions or notes. Imperative is second person with
"you" implied — prefer it in steps.
- Wrong: "We then add the guard to the allowlist, and our test catches it."
- Right: "Add the guard to the allowlist. The test catches the violation on the next
make quality run."
4. No hedging, no filler, no "easy"
https://developers.google.com/style/tone and
https://developers.google.com/style/word-list
Delete: "just", "simply", "easy", "easily", "quickly", "please", "in order to"
(use "to"), "allows you to" (use "lets you"). The guide is silent on
"obviously" and "note that" — cut them under the tone page's ban on placeholder
phrases, but don't cite a word-list entry that doesn't exist.
- Wrong: "Simply just call the repository — it's easy to plug in, and it allows you to skip the session."
- Right: "Call the repository. It manages the session for you."
5. Timeless writing — no "currently", "new", "now"
https://developers.google.com/style/timeless-documentation
Avoid: as of this writing, currently, does not yet, eventually, existing,
future, latest, new/newer, now, old/older, presently, soon.
- Wrong: "The new REST transport doesn't currently support idempotency keys."
- Right: "The REST transport doesn't support idempotency keys."
The guide's exception is time-stamped content: release notes, commit messages,
dated entries in a migration note. Not a note's body, not a task description.
6. Descriptive link text
https://developers.google.com/style/link-text
Never "here", "this document", "click here", "read more", or a bare URL as the
visible text. Use the target's title, important words first.
7. Inclusive and non-ableist terms
https://developers.google.com/style/inclusive-documentation and
https://developers.google.com/style/word-list
The complete list this repo's vocabulary actually touches:
| Avoid |
Use instead |
Source |
| abort, kill |
stop, exit, cancel, end |
word-list |
| hang |
stop responding, not responding |
word-list |
| hit (a button) |
click, press, type |
word-list |
| sanity check |
test, verification, final check |
word-list |
| dummy (variable/value) |
placeholder |
word-list |
| blacklist, graylist |
denylist, blocklist |
word-list |
| whitelist |
allowlist, trustlist, safelist |
word-list |
| master / slave |
primary, main, controller / replica, secondary |
word-list |
| native |
of people: avoid entirely; of software: built-in |
word-list |
| grandfathered |
legacy, exempt, made an exception |
word-list |
| crazy, insane, mad, bonkers, lunatic, loony |
complicated, complex, baffling, strange, unexpected |
word-list |
| cripple |
slows down, impairs |
inclusive-documentation |
| first-class citizen |
higher-order, anonymous, nested |
word-list |
| he, him, his, she, her (generic) |
they, their |
word-list |
| man-hours, manpower |
person-hours, staff, workforce |
word-list |
| mankind |
humanity |
inclusive-documentation |
| guru, ninja |
expert, teacher |
word-list |
| disabled (meaning broken) |
inactive, unavailable, turned off |
word-list |
| execute (a command) |
run |
word-list |
| leverage |
use, build on |
word-list |
| utilize |
use |
translation |
| e.g. / i.e. |
for example / that is |
word-list |
| etc., and so on |
rewrite the intro so the list reads as non-exhaustive |
word-list |
| above / below (in a document) |
earlier / preceding, later / following |
word-list |
The guide is silent on these — no Google rule exists, so do not claim one:
terminate, invalid, illegal, via, segregate, tribe, chairman,
one-click, dark pattern, obviously, note that. Use repo judgment.
8. Headings and titles
https://developers.google.com/style/headings
Sentence case, always. Task headings start with a bare infinitive; conceptual
headings are noun phrases; no -ing first word. Optional: goes in front, not
in trailing parentheses. Don't skip heading levels, number sections, or put
links in headings.
- Wrong: "Migrating The Creative Approval Workflow (Optional)"
- Right (task): "Migrate the creative approval workflow"
- Right (concept): "Creative approval workflow"
- Right (optional): "Optional: Migrate the creative approval workflow"
9. Lists and tables
https://developers.google.com/style/lists
Numbered for sequences, bulleted for non-sequences, description lists for
term/definition pairs. Never a one-item list. Introduce with a complete
sentence, not a fragment the list finishes. Keep items parallel. Capitalize each
item; end-punctuate only items containing a verb.
- Wrong intro: "The guard checks that:"
- Right intro: "The guard checks the following properties:"
- Wrong (non-parallel): "Resolves identity", "the request forwarding", "Error translation"
- Right: "Resolves the identity", "Forwards the request", "Translates the error"
Tables (https://developers.google.com/style/tables): use a table only for
three or more related data points per row; two columns of term/definition are a
description list, one column is a list. Sentence-case
headers, no trailing punctuation. Introduce with a complete sentence — screen
readers don't preannounce tables. No merged cells, no table inside a procedure.
10. Procedures
https://developers.google.com/style/procedures
One action per step, each opening with an imperative verb. State the location
or condition before the action, and the purpose before the click.
- Wrong: "Click Approve to publish the creative, after you open the tenant admin UI."
- Right: "In the tenant admin UI, to publish the creative, click Approve."
11. Code in text
https://developers.google.com/style/code-in-text
Code font for identifiers, filenames, paths, env vars, flags, HTTP verbs and
status codes, ports, and placeholders — not for product or service names. Never
inflect a code identifier; add a noun and inflect that.
- Wrong: "
MediaBuys are created by POSTing to the endpoint, and ADDRESS's value comes from settings."
- Right: "The endpoint creates
MediaBuy records from a POST request. The ADDRESS constant's value comes from the settings.h file."
12. Global audience, accessibility, and jargon
https://developers.google.com/style/translation and
https://developers.google.com/style/accessibility
Under 26 words per sentence. No idioms, humor, sports or holiday references, or
seasons. Keep "that" after a verb ("assumes that you have"), keep "then" in an
if-clause, repeat the noun rather than sharing it across a conjunction, and
prefer the positive form.
- Wrong: "A missing tenant won't prevent the ball from getting rolling on the request."
- Right: "You can process the request without a tenant."
Jargon (https://developers.google.com/style/jargon): write around
figurative jargon or define it once in parentheses — "blast radius" becomes
"affected area", "ingest" becomes "import" or "load", "off-the-shelf" becomes
"pre-built".
13. Punctuation and abbreviations
https://developers.google.com/style/commas and
https://developers.google.com/style/abbreviations
Serial comma, always: "zones, regions, and multi-regions". Comma before "which"
in a nonrestrictive clause and before a conjunction joining two independent
clauses. Spell out an abbreviation on first use, expansion first with the
abbreviation in parentheses. No periods in acronyms. Don't verb an abbreviation
("Use SSH to connect", not "SSH into the box").
Which rules bind which artifact
| Artifact |
Binding rules |
Relaxed |
| Beads task/epic title |
1, 7, 8 (sentence case, bare infinitive, no -ing) |
9-11, 13 — a title is a fragment, so no end punctuation and no serial-comma prose |
| Beads task/epic description |
1-7, 9, 10, 11, 12 |
8 — descriptions rarely carry headings |
| YAML formula step/atom name |
7, 8 (bare infinitive, lowercase kebab matches existing atoms) |
Everything prose-shaped |
| YAML formula description |
1-7, 9, 12 |
8 |
.claude/notes/*.md |
All 13 |
None |
docs/** and CLAUDE.md |
All 13 |
None |
| Commit message subject |
1, 7, 10 (imperative), 13 |
2 and 5 — a commit is time-stamped content; 8 — Conventional Commits owns the prefix and casing |
| Code comment / docstring |
1-5, 7, 11, 12 |
8-10, 13 |
Reviewer checklist
Run this against any piece of writing before you commit it.
- Does every sentence name its actor, or is it one of the three allowed passives?
- Is every "will" describing something that genuinely happens later? Is there any "would"?
- Any "we", "our", or "us" that is not the authoring organization?
- Any of: just, simply, easy, easily, quickly, please, in order to, allows you to?
- Any of: currently, now, new, latest, soon, existing, eventually?
- Does every link say what it points to without the surrounding sentence?
- Any term from the table in rule 7?
- Headings: sentence case, bare infinitive or noun phrase, no
-ing first word?
- Lists: complete-sentence intro, parallel items, more than one item?
- Serial commas present? Abbreviations expanded on first use?
- Any sentence over 26 words, any idiom, any figurative jargon?
When repo convention wins
Google's guide loses to this repo in these cases, and only these:
- Conventional Commits prefixes.
feat:, fix:, docs:, refactor:,
perf:, chore: are lowercase by mandate of release-please and
.github/workflows/pr-title-check.yml. Sentence case starts after the colon.
- AdCP spec terms and code identifiers keep their exact casing and spelling.
A format named
native, a method named execute, a Flask abort() call, a
branch named main — these are names, not prose. Rule 7 applies to the
sentence around them, never to the identifier.
- Quoted spec text is never edited for style. When you cite AdCP prose or a
storyboard step, quote it verbatim, including its "will" and its passives.
- Repo abbreviations stay unexpanded in internal artifacts. AdCP, MCP, A2A,
BDD, UoW, GAM, DRY, TDD are load-bearing vocabulary in
.claude/notes/ and
beads tasks. Expand them in docs/ and anything a contributor reads first.
- Formula atom names are lowercase kebab-case keys (
write-test,
verify-prediction), not headings.
- A design note may describe future work in future tense. Rule 2's own
exception covers it: the migration genuinely hasn't happened yet.
1---2name: google-style3description: Apply the Google developer documentation style guide to everything this repo writes in prose: beads epic/task titles and descriptions, YAML formula step names and descriptions, `.claude/notes/*.md` engineering notes, commit messages, docstrings, and code comments. Use before writing or reviewing any of those artifacts, and when asked to edit writing for style.4---56# Google Style for Repo Prose78Source: https://developers.google.com/style. Every rule cites the page that9mandates it. Where the guide is silent, this file says so — never invent a rule10and attribute it to Google. Rules are ordered by how often agent-written prose11violates them; rules 1-7 account for most of the damage.1213## 1. Active voice — name the actor1415https://developers.google.com/style/voice1617Passive voice hides who does the thing, which turns a contract into a rumor.1819- Wrong: "The identity is resolved and the request is forwarded to `_impl`."20- Right: "The MCP wrapper resolves the identity and forwards the request to `_impl`."2122Passive is allowed in exactly three cases: to emphasize the object ("The file23is saved"), to de-emphasize the actor ("Over 50 conflicts were found"), or when24the actor is irrelevant ("The database was purged in January").2526## 2. Present tense — drop "will"2728https://developers.google.com/style/tense2930Use present tense for behavior not tied to a point in time. Reserve "will" for31something that genuinely happens later. Never use "would".3233- Wrong: "The repository will raise `NotFoundError` when the tenant is missing."34- Right: "The repository raises `NotFoundError` when the tenant is missing."35- Right (genuinely later): "Add the step to the formula. The atom runs the next time the lane executes."36- Wrong: "You could call the wrapper, and it would then translate the error."3738## 3. Second person — "you", not "we"3940https://developers.google.com/style/person4142Address the reader as "you". "We" is only for the authoring organization, which43has no voice in task descriptions or notes. Imperative is second person with44"you" implied — prefer it in steps.4546- Wrong: "We then add the guard to the allowlist, and our test catches it."47- Right: "Add the guard to the allowlist. The test catches the violation on the next `make quality` run."4849## 4. No hedging, no filler, no "easy"5051https://developers.google.com/style/tone and52https://developers.google.com/style/word-list5354Delete: "just", "simply", "easy", "easily", "quickly", "please", "in order to"55(use "to"), "allows you to" (use "lets you"). The guide is silent on56"obviously" and "note that" — cut them under the tone page's ban on placeholder57phrases, but don't cite a word-list entry that doesn't exist.5859- Wrong: "Simply just call the repository — it's easy to plug in, and it allows you to skip the session."60- Right: "Call the repository. It manages the session for you."6162## 5. Timeless writing — no "currently", "new", "now"6364https://developers.google.com/style/timeless-documentation6566Avoid: as of this writing, currently, does not yet, eventually, existing,67future, latest, new/newer, now, old/older, presently, soon.6869- Wrong: "The new REST transport doesn't currently support idempotency keys."70- Right: "The REST transport doesn't support idempotency keys."7172The guide's exception is time-stamped content: release notes, commit messages,73dated entries in a migration note. Not a note's body, not a task description.7475## 6. Descriptive link text7677https://developers.google.com/style/link-text7879Never "here", "this document", "click here", "read more", or a bare URL as the80visible text. Use the target's title, important words first.8182- Wrong: "For the boundary rules, see [this doc](../CLAUDE.md) and click [here](https://developers.google.com/style)."83- Right: "See [Transport Boundary: Layer Separation](../CLAUDE.md) and the [Google developer documentation style guide](https://developers.google.com/style)."8485## 7. Inclusive and non-ableist terms8687https://developers.google.com/style/inclusive-documentation and88https://developers.google.com/style/word-list8990The complete list this repo's vocabulary actually touches:9192| Avoid | Use instead | Source |93|-------|-------------|--------|94| abort, kill | stop, exit, cancel, end | word-list |95| hang | stop responding, not responding | word-list |96| hit (a button) | click, press, type | word-list |97| sanity check | test, verification, final check | word-list |98| dummy (variable/value) | placeholder | word-list |99| blacklist, graylist | denylist, blocklist | word-list |100| whitelist | allowlist, trustlist, safelist | word-list |101| master / slave | primary, main, controller / replica, secondary | word-list |102| native | of people: avoid entirely; of software: built-in | word-list |103| grandfathered | legacy, exempt, made an exception | word-list |104| crazy, insane, mad, bonkers, lunatic, loony | complicated, complex, baffling, strange, unexpected | word-list |105| cripple | slows down, impairs | inclusive-documentation |106| first-class citizen | higher-order, anonymous, nested | word-list |107| he, him, his, she, her (generic) | they, their | word-list |108| man-hours, manpower | person-hours, staff, workforce | word-list |109| mankind | humanity | inclusive-documentation |110| guru, ninja | expert, teacher | word-list |111| disabled (meaning broken) | inactive, unavailable, turned off | word-list |112| execute (a command) | run | word-list |113| leverage | use, build on | word-list |114| utilize | use | translation |115| e.g. / i.e. | for example / that is | word-list |116| etc., and so on | rewrite the intro so the list reads as non-exhaustive | word-list |117| above / below (in a document) | earlier / preceding, later / following | word-list |118119**The guide is silent on these** — no Google rule exists, so do not claim one:120`terminate`, `invalid`, `illegal`, `via`, `segregate`, `tribe`, `chairman`,121`one-click`, `dark pattern`, `obviously`, `note that`. Use repo judgment.122123## 8. Headings and titles124125https://developers.google.com/style/headings126127Sentence case, always. Task headings start with a bare infinitive; conceptual128headings are noun phrases; no `-ing` first word. `Optional:` goes in front, not129in trailing parentheses. Don't skip heading levels, number sections, or put130links in headings.131132- Wrong: "Migrating The Creative Approval Workflow (Optional)"133- Right (task): "Migrate the creative approval workflow"134- Right (concept): "Creative approval workflow"135- Right (optional): "Optional: Migrate the creative approval workflow"136137## 9. Lists and tables138139https://developers.google.com/style/lists140141Numbered for sequences, bulleted for non-sequences, description lists for142term/definition pairs. Never a one-item list. Introduce with a complete143sentence, not a fragment the list finishes. Keep items parallel. Capitalize each144item; end-punctuate only items containing a verb.145146- Wrong intro: "The guard checks that:"147- Right intro: "The guard checks the following properties:"148- Wrong (non-parallel): "Resolves identity", "the request forwarding", "Error translation"149- Right: "Resolves the identity", "Forwards the request", "Translates the error"150151**Tables** (https://developers.google.com/style/tables): use a table only for152three or more related data points per row; two columns of term/definition are a153description list, one column is a list. Sentence-case154headers, no trailing punctuation. Introduce with a complete sentence — screen155readers don't preannounce tables. No merged cells, no table inside a procedure.156157## 10. Procedures158159https://developers.google.com/style/procedures160161One action per step, each opening with an imperative verb. State the location162or condition before the action, and the purpose before the click.163164- Wrong: "Click **Approve** to publish the creative, after you open the tenant admin UI."165- Right: "In the tenant admin UI, to publish the creative, click **Approve**."166167## 11. Code in text168169https://developers.google.com/style/code-in-text170171Code font for identifiers, filenames, paths, env vars, flags, HTTP verbs and172status codes, ports, and placeholders — not for product or service names. Never173inflect a code identifier; add a noun and inflect that.174175- Wrong: "``MediaBuy``s are created by ``POST``ing to the endpoint, and ``ADDRESS``'s value comes from settings."176- Right: "The endpoint creates `MediaBuy` records from a `POST` request. The `ADDRESS` constant's value comes from the `settings.h` file."177178## 12. Global audience, accessibility, and jargon179180https://developers.google.com/style/translation and181https://developers.google.com/style/accessibility182183Under 26 words per sentence. No idioms, humor, sports or holiday references, or184seasons. Keep "that" after a verb ("assumes that you have"), keep "then" in an185if-clause, repeat the noun rather than sharing it across a conjunction, and186prefer the positive form.187188- Wrong: "A missing tenant won't prevent the ball from getting rolling on the request."189- Right: "You can process the request without a tenant."190191**Jargon** (https://developers.google.com/style/jargon): write around192figurative jargon or define it once in parentheses — "blast radius" becomes193"affected area", "ingest" becomes "import" or "load", "off-the-shelf" becomes194"pre-built".195196## 13. Punctuation and abbreviations197198https://developers.google.com/style/commas and199https://developers.google.com/style/abbreviations200201Serial comma, always: "zones, regions, and multi-regions". Comma before "which"202in a nonrestrictive clause and before a conjunction joining two independent203clauses. Spell out an abbreviation on first use, expansion first with the204abbreviation in parentheses. No periods in acronyms. Don't verb an abbreviation205("Use SSH to connect", not "SSH into the box").206207## Which rules bind which artifact208209| Artifact | Binding rules | Relaxed |210|----------|---------------|---------|211| Beads task/epic **title** | 1, 7, 8 (sentence case, bare infinitive, no `-ing`) | 9-11, 13 — a title is a fragment, so no end punctuation and no serial-comma prose |212| Beads task/epic **description** | 1-7, 9, 10, 11, 12 | 8 — descriptions rarely carry headings |213| YAML formula **step/atom name** | 7, 8 (bare infinitive, lowercase kebab matches existing atoms) | Everything prose-shaped |214| YAML formula **description** | 1-7, 9, 12 | 8 |215| `.claude/notes/*.md` | All 13 | None |216| `docs/**` and `CLAUDE.md` | All 13 | None |217| **Commit message** subject | 1, 7, 10 (imperative), 13 | 2 and 5 — a commit is time-stamped content; 8 — Conventional Commits owns the prefix and casing |218| **Code comment / docstring** | 1-5, 7, 11, 12 | 8-10, 13 |219220## Reviewer checklist221222Run this against any piece of writing before you commit it.2232241. Does every sentence name its actor, or is it one of the three allowed passives?2252. Is every "will" describing something that genuinely happens later? Is there any "would"?2263. Any "we", "our", or "us" that is not the authoring organization?2274. Any of: just, simply, easy, easily, quickly, please, in order to, allows you to?2285. Any of: currently, now, new, latest, soon, existing, eventually?2296. Does every link say what it points to without the surrounding sentence?2307. Any term from the table in rule 7?2318. Headings: sentence case, bare infinitive or noun phrase, no `-ing` first word?2329. Lists: complete-sentence intro, parallel items, more than one item?23310. Serial commas present? Abbreviations expanded on first use?23411. Any sentence over 26 words, any idiom, any figurative jargon?235236## When repo convention wins237238Google's guide loses to this repo in these cases, and only these:239240- **Conventional Commits prefixes.** `feat:`, `fix:`, `docs:`, `refactor:`,241 `perf:`, `chore:` are lowercase by mandate of release-please and242 `.github/workflows/pr-title-check.yml`. Sentence case starts after the colon.243- **AdCP spec terms and code identifiers keep their exact casing and spelling.**244 A format named `native`, a method named `execute`, a Flask `abort()` call, a245 branch named `main` — these are names, not prose. Rule 7 applies to the246 sentence around them, never to the identifier.247- **Quoted spec text is never edited for style.** When you cite AdCP prose or a248 storyboard step, quote it verbatim, including its "will" and its passives.249- **Repo abbreviations stay unexpanded in internal artifacts.** AdCP, MCP, A2A,250 BDD, UoW, GAM, DRY, TDD are load-bearing vocabulary in `.claude/notes/` and251 beads tasks. Expand them in `docs/` and anything a contributor reads first.252- **Formula atom names are lowercase kebab-case keys** (`write-test`,253 `verify-prediction`), not headings.254- **A design note may describe future work in future tense.** Rule 2's own255 exception covers it: the migration genuinely hasn't happened yet.