Files
coder/docs/.style/style-guide
Nick Vigilante 83cb587c3f docs(docs/.style/style-guide): add directional-language and contractions rules (#26729)
Adds two new accessibility-and-voice rules to the style guide.

**Directional language**
(`docs/.style/style-guide/accessibility-and-inclusion.md`).
Screen-reader users navigate documents linearly and cannot follow
spatial references like "see below" or "the menu on the left". The rule
prescribes anchor links, section headings, document order ("the previous
section", "the following section"), and named UI elements instead. A
replacement table covers the common cases.

**Contractions are the default**
(`docs/.style/style-guide/voice-and-tone.md`). Prefer contractions in
body prose for the same reason the docs use second person and present
tense. Three exceptions: auxiliary contractions (`you'd`, `there's`,
`it's`, `we'd`, `they're`) need an explicit complement and cannot end a
sentence; contractions join exactly two words (no `you'd've` or
`wouldn't've`); spell out for emphasis and high-stakes operations like
deletion or data loss (`do not`, `cannot`, `will not`).

The PR also sweeps the existing style-guide subpages so the existing
prose comply with both rules.

Resolves
[DOCS-462](https://linear.app/codercom/issue/DOCS-462/add-screen-reader-aware-directional-language-rule-and-sweep-existing).

<details>
<summary>Directional-language sweep targets</summary>

| File | Change |
| --- | --- |
| `docs/.style/style-guide/README.md` | "pages below" becomes "linked
pages" |
| `docs/.style/style-guide/accessibility-and-inclusion.md` | "top of the
page" becomes "beginning of the page". Captions "follow" instead of "go
below". Latin abbreviation table cells drop "as described below". Sample
captions name widgets instead of panel positions. |
| `docs/.style/style-guide/audience-and-scope.md` | Don't example
rewritten without "below". "Above the first paragraph" becomes "before
the first paragraph". "At the top of the page" becomes "at the beginning
of the page". |
| `docs/.style/style-guide/capitalization-and-punctuation.md` |
"Exceptions above" becomes "exceptions listed earlier". |
| `docs/.style/style-guide/formatting.md` | Captions "follow" instead of
"go below". Sample captions renamed by widget. Don't example "as shown
above" becomes "as shown in the screenshot". |
| `docs/.style/style-guide/numbers-units-and-dates.md` | "10th and up"
becomes "10th and higher". |

Idiomatic stack metaphors like "built on top of Terraform" and phrasal
verbs like "set up", "back up", "log in", and "shut down" are explicitly
carved out as not directional and stay as-is.

</details>

<details>
<summary>Contractions rule scope</summary>

The rule lands as `## Contractions are the default` in
`voice-and-tone.md`, placed between `Present tense by default` and
`Trailing prepositions are a judgment call` because all three rules sit
in the natural-phrasing cluster.

The sweep applies the rule across all eight style-guide subpages: 76
lines updated where the spelled-out form (`does not`, `is not`,
`cannot`, `you have`, `there is`, `that is`) reads more naturally as a
contraction.

Skipped:

- Don't blocks inside the contractions rule that intentionally
demonstrate the wrong form.
- Do blocks inside the emphasis sub-rule that intentionally model `do
not`, `cannot`, and `will not` for high-stakes operations.
- The Churchill joke inside the trailing-prepositions Don't blocks.
- The "that is" dictionary definition of `i.e.` in the Latin
abbreviations table.
- `may not` (no contraction in modern English).
- `that has` relative clauses where `'s` could read as possessive.

</details>

<details>
<summary>Lints</summary>

- `make lint/markdown`: 0 errors across 495 files.
- `make lint/prose`: only the pre-existing intentional `[Demo]`
annotations in `docs/.style/_vale-annotation-demo.md` fire.

</details>

---

*Filed via [Coder Agents](https://coder.com/docs/ai-coder/agents) on
Nick's behalf.*
2026-07-08 12:05:24 -04:00
..

Coder documentation style guide

This is the canonical prose style guide for the Coder documentation. It tells you how to write the words that go in the docs. For decisions about what belongs in the docs and what doesn't, refer to content-guidelines.md.

Each rule on the linked pages is a policy decision the Coder docs team has made. Where a Vale rule already enforces the policy, the rule name is listed in a parenthetical so you can reproduce the warning locally. Where the rule is documentation-only, the parenthetical says so. The doctrine for adding Vale rules lives in README.md.

How to use this guide

  • Contributors: read the section that matches what you're writing. Each rule includes a brief rationale and Do / Don't examples.
  • Reviewers: cite the section in a review comment. Reviews are easier when the guidance lives in one place.
  • AI agents: read every section before editing anything under docs/. The Coder Agents and Claude Code guides (AGENTS.md, .claude/docs/DOCS_STYLE_GUIDE.md) link here.

Sections

Page Covers
Audience and scope One audience per page; one outcome per page; declare both up front; Coder personas
Voice and tone Second person; no first-person singular; "we" as the company, not the software; active voice; present tense
Word choice Canonical brand and product names; "refer to" over "see"; "select" over "click"; weasel words; plain English for product actions; keep internal-only references out of published docs
Accessibility and inclusion WCAG target; inclusive pronouns and substitutions; descriptive link text; alt text; page descriptions; heading structure; reading level
Capitalization and punctuation Sentence-case headings; no gerund leads; no em-dashes; commas; US-style quotation
Formatting Bold for UI; italics for emphasis; code font for identifiers; language fences on code blocks; callouts; tabs; lists; tables; links; images; screenshots sparingly
Numbers, units, and dates Digits everywhere; non-breaking space between number and unit; Month Day, Year dates; 12-hour time with AM/PM
Editor setup Vale editor integration for VS Code, Cursor, JetBrains, and Neovim (placeholder)

Conventions for editing Coder docs

These conventions apply to every Markdown file under docs/. The style guide subpages dogfood them so contributors can see the rules in action.

One sentence per line

Source lines in Coder documentation follow a one-sentence-per-line policy. Each sentence sits on its own Markdown source line. Sentences aren't split across lines, and lines don't wrap to a fixed column width.

The rendered Markdown joins lines inside a paragraph back together, so the source line breaks don't appear in the rendered output. Reviewers reading the diff do encounter them, and they make diffs land cleanly at the sentence level.

markdownlint's MD013 (line length) is already disabled, so the convention is editorial. Editors that auto-wrap on save should be configured to leave the source alone.

Incremental adoption

The Coder docs corpus predates this convention. Much of the existing prose still wraps to a fixed column width or runs on a single long line, and some paragraphs on the other pages of this style guide still carry semantic line breaks (sembr) from earlier commits in this PR. The convention is adopted incrementally.

When a contributor edits any line inside a paragraph, the entire paragraph is reformatted to one sentence per line as part of the same edit. The contributor doesn't reformat surrounding paragraphs they didn't otherwise touch.

For this rule, a bullet item, a numbered list entry, and a blockquote line are each their own paragraph. Headings, fenced code blocks, and tables are out of scope: headings are single lines by convention, code blocks render their source verbatim, and table rows are governed by markdown-table-formatter.

The style guide doesn't use "see" for navigation

The Word choice page bans "see" as a navigational verb across all docs. The style guide itself follows the rule: "refer to" for formal cross-references, "check out" for informal pointers in tutorial-style passages, "visit" for external URLs. Reserve "see" for the rare case where the prose describes what a reader observes in the product UI.

Vale enforcement

The repo-root .vale.ini loads only the Coder rule package by default. Third-party rules from Google, alex, and write-good aren't enabled until a per-rule PR brings each back in.

Each enabled rule lands via a dedicated PR that:

  1. Cleans the corpus to zero baseline findings.
  2. Adds the rule line in .vale.ini at the rule author's chosen severity.
  3. Adds the corresponding section to the appropriate subpage of this guide.

Severity is a deliberate per-rule choice from the three-tier ladder:

  • error blocks merge in CI. Use for hard policy where any violation is wrong.
  • warning surfaces an annotation without failing CI. Use for strong guidance with legitimate human-judgment exceptions.
  • suggestion surfaces a notice annotation. Use for soft guidance where the right fix is contextual.

The full doctrine, including the false-positive policy, lives in README.md. Run make lint/prose to reproduce the baseline locally.

Relationship to docs/about/contributing/documentation.md

A public-facing prose summary lives today at docs/about/contributing/documentation.md. A follow-up PR will redirect that page to this guide. Until then, follow the public summary for anything the subpages of this guide don't cover. New prose rules land here. The public page is frozen pending the redirect.

Third-party references

When this guide doesn't cover something, consult:

Type of guidance Reference
Spelling Merriam-Webster
Style, nontechnical The Chicago Manual of Style
Style, technical Microsoft Writing Style Guide
Style, developer-focused Google developer documentation style guide