Writing Styleguide
Writing Styleguide
Section titled “Writing Styleguide”Prose rules for everything BoB authors — GitHub issues, commit messages, PR descriptions, journal entries, code comments, and docs. Each rule is short and concrete enough to apply mid-write and check against after. Cite a rule by its ID (
WS-1) instead of restating the style inline. (Back to reference index.)
This is reference mode — look up the rule you need, don’t read end-to-end. It is the single place commands, agents, hooks, and reviewers point at when they invoke a prose rule.
Scope, and the line with the documentation standard. The
documentation standard (DS) owns how docs/ are
structured — Diátaxis mode, directory taxonomy, frontmatter — and the writing
principles for docs (§4: inverted pyramid, scannability, controlled vocabulary,
single-source-of-truth, the bare-#N rule). This styleguide is broader in artifact
and narrower in concern: it governs prose across all authored artifacts, not just
docs. To avoid duplication (DS §4.4, applied to itself), it owns the cross-artifact
rules below and references DS for the principles DS already owns — it never restates
them. When a rule lives in DS, cite DS; when it lives here, cite WS-N.
How to cite a rule
Section titled “How to cite a rule”Reference a rule by its stable ID, never by paraphrasing the style into your own text:
-
In a review comment, command, agent, or hook: “see WS-1”, optionally linking to this doc. The
WS-NID is the contract — it never changes, so a citation stays valid even when the rule’s wording is refined. -
For a DS-owned principle, cite “DS §4.1” and link
documentation-standard.md. -
Programmatically, resolve a rule’s text with the lookup tool (so tooling cites the canonical wording rather than embedding a copy):
Terminal window node ~/.claude/scripts/styleguide/cite.js list # all rule IDs + titlesnode ~/.claude/scripts/styleguide/cite.js WS-1 # print one rule
Rules (owned here)
Section titled “Rules (owned here)”Each rule has a stable WS-N ID, a one-line statement, and a concrete do/don’t. IDs are
append-only — a rule is never renumbered, so a citation never goes stale.
WS-1 — Write for the artifact’s reader, not the editing session
Section titled “WS-1 — Write for the artifact’s reader, not the editing session”A finished artifact must stand on its own for someone encountering it fresh. They did not watch you write it and cannot see any earlier draft.
- Don’t reference the editing or correction process, or a prior version of the text the reader can’t see (“accurate framing”, “now corrected”, “as revised”, “to clarify the above”).
- Don’t negate a claim the reader was never shown (“it does not give up on tests” when nothing said it did) — describe the present state directly instead.
- Don’t contrast against an external source the reader doesn’t have in front of them as if they do (“unlike the previous approach…”).
- Prefer plain present-state description over editorial meta-commentary.
Do: “The loop pushes after each chunk.” Don’t: “To correct the earlier claim, the loop now actually does push after each chunk (it does not skip the push).”
WS-2 — Say why, not just what, in commit and PR bodies
Section titled “WS-2 — Say why, not just what, in commit and PR bodies”The subject line states the change; the body exists to explain the motivation and the
trade-offs. A bare subject is enough only for a trivial, self-evident change. Reviewers
and git log archaeologists read the body to recover intent the diff can’t show.
- Lead the body with the problem or motivation, then the approach, then any alternative considered and rejected.
- Don’t restate the diff in prose (“changed X to Y”) — the diff already says that; say why X became Y.
Do: “Rebase before ff-merge: the release bot auto-pushes to master on feat pushes, so a plain merge would fail fast-forward.” Don’t: “Updated the merge step.”
WS-3 — State it plainly; cut hedges and filler
Section titled “WS-3 — State it plainly; cut hedges and filler”Confident present-tense prose reads faster and ages better. Hedge words and filler add length without information.
- Drop “basically”, “just”, “simply”, “obviously”, “of course”, “in order to” (→ “to”), and “we should probably”.
- Don’t soften a definite fact into a maybe; if it’s true, state it.
Do: “
bob provision refreshre-links the manifest.” Don’t: “Basically,bob provision refreshshould just re-link the manifest, more or less.”
Web-read rules (WS-4 to WS-10)
Section titled “Web-read rules (WS-4 to WS-10)”For anything Paul reads on a screen: todos, chunk and session reports, briefings,
/journal and /status --file issues. Each is one checkable line. The evidence and
where critics qualified it: Writing for the web.
Also apply DS §4.1 (answer first) and DS §4.2 (headings that stand alone, lists and
tables for parallel items, front-loaded titles). Checked by todo-contract.js: WS-4, WS-5, WS-6 (warnings).
WS-4 — The first line is the answer or the ask, in 25 words or fewer
Section titled “WS-4 — The first line is the answer or the ask, in 25 words or fewer”Do: “Deploy to farm-01 is blocked: the Cloudflare token expired.” Don’t: “This todo was filed during the warp-drive run because…”
WS-5 — Each numbered step starts with a verb and does one thing
Section titled “WS-5 — Each numbered step starts with a verb and does one thing”Do: “1. Run
bob doctor.” Don’t: “1. The doctor command should be run, then check the output and redeploy.”
WS-6 — Link text names where it goes, never “here” or “this”
Section titled “WS-6 — Link text names where it goes, never “here” or “this””Do: “see the todo format contract” Don’t: “see here”
WS-7 — Plain words; gloss or link every internal term, never drop an identifier
Section titled “WS-7 — Plain words; gloss or link every internal term, never drop an identifier”Do: “the preflight gate (the check before work starts)” Don’t: “AC-3’s rung-2 surface” — or “the token” for
CLOUDFLARE_API_TOKEN
WS-8 — Commands, paths and identifiers are copyable as-is
Section titled “WS-8 — Commands, paths and identifiers are copyable as-is”Do: a code block with every value filled in. Don’t:
<your-account-id>, a command split across prose, a shortened issue or file name.
WS-9 — State is visible at a glance: done, doing, needs you
Section titled “WS-9 — State is visible at a glance: done, doing, needs you”Do: a first line or heading that says “Needs you:”, “Done:”, “Running:”. Don’t: a state the reader must infer from paragraph three.
WS-10 — Cut happy talk and instructions about the instructions
Section titled “WS-10 — Cut happy talk and instructions about the instructions”Do: start with the content. Don’t: “This report summarises…”, “Below you will find…”, “Please read the following carefully.”
Principles referenced (owned by the documentation standard)
Section titled “Principles referenced (owned by the documentation standard)”These apply to all artifacts, not only docs — but the canonical statement lives in DS §4, so cite DS rather than restating them here.
| Cite | Principle | Applied beyond docs |
|---|---|---|
| DS §4.1 | Inverted pyramid — answer first | A commit subject is the conclusion; an issue’s first sentence is the ask; a comment’s first line is the point. |
| DS §4.2 | Scannability — write for the skim | Issue/PR bodies use headings, tables, and short lists, not walls of prose. |
| DS §4.3 | Controlled vocabulary — one name per thing | Use the canonical term (warp-drive, requirement, BOB_SOURCE) in issues and comments too. |
| DS §4.4 | Single source of truth — one owner per fact | Link to the owning doc from an issue/comment; don’t paste a copy that will drift. |
| DS §4.5 | Reserve bare #N for real issue/PR references |
Use C1/H2/“item 1” for intra-body item numbers — enforced by make check. |
Adding a rule
Section titled “Adding a rule”The doc is living — rules accrete as prose feedback recurs. To add one without restructuring:
- Append a new
### WS-N — <title>section under Rules (owned here), taking the next freeN. Never renumber an existing rule (citations are permanent). - Give it a one-line statement, do/don’t bullets, and a
Do:/Don't:example pair. - If the rule is really a DS principle applied to a new artifact, don’t add a
WS-N— add a row to the referenced-principles table instead.
The lookup tool (cite.js) reads these headings directly, so a newly appended rule is
immediately citable with no other change.
See also
Section titled “See also”- Writing for the web — the evidence behind WS-4 to WS-10 and where BoB departs from its sources.
- Documentation Standard — owns doc structure and the §4 writing principles this styleguide references.
- Memory conventions — the archive-on-supersede rule for preserving why a preference changed (the same “write for the reader” instinct, applied to memory history).