Files
coder/.vale.ini
T
Nick Vigilante 4d4d2575e4 fix: exempt docs/.style/ prose from Vale's own Coder rules (#27192)
## Problem

The repo-root `.vale.ini` lints all of `docs/**/*.md`, including the
style guide under `docs/.style/style-guide/`. The guide deliberately
contains the constructs the Coder rules ban:

- Don't examples in blockquotes and in the Don't column of Do/Don't
tables.
- Banned terms named in prose and headings (a rule about "Next steps"
must write "Next steps").

`Coder.BrandNames` already fired on the Brand names table's Don't column
(`Hashicorp`, `HASHICORP`), and each future `Coder.*` rule would fire on
its matching section's examples. Vale runs advisory, so these surface as
non-blocking annotations, exactly the standing backlog the README warns
against, and they break the documented "zero baseline findings"
doctrine.

## Change

Option B, narrowed after review to the style-guide subtree:

- `.vale.ini`: clear `BasedOnStyles` for `docs/.style/style-guide/**`
(the guide subpages only). The annotation demo and the rest of
`docs/.style/` stay linted; the demo keeps firing its `Coder.Demo*`
rules by inheriting `Coder` from `[*.md]`, with no re-include. Also
corrects the `error`-tier doctrine line to reflect advisory-only Vale.
- `docs/.style/README.md`: "What still runs" / "What does not run"
describe the narrowed exemption, and record that it holds only for paths
that resolve to `docs/.style/style-guide/...` (repo-root-relative), not
absolute or subdirectory-relative invocations.
- `docs/.style/style-guide/README.md`: exemption note scoped to
`docs/.style/style-guide/**`.
- `docs/.style/styles/Coder/BrandNames.yml`,
`docs/.style/styles/Coder/README.md`: fix the remaining dead
`style-guide.md` links (the `BrandNames.yml` one was a live 404 surfaced
in Vale annotations).

## Validation

- `make lint/prose` reports only the 3 intended `Coder.Demo*` findings
across the corpus; the guide's `BrandNames` findings are gone.
- `content-guidelines.md`, the landing `README.md`, and
`styles/Coder/README.md` are now linted and clean (0). Injecting a
miscased `Hashicorp` into `content-guidelines.md` fires
`Coder.BrandNames`; reverted.
- The guide subpages stay exempt (0); the annotation demo still fires
its 3 findings via `[*.md]`.
- Invocation-path behavior verified against
`docs/.style/style-guide/word-choice.md`: repo-root-relative `docs/...`
is exempt (0), while `docs/`-relative and absolute-path invocations
still fire 2 `Coder.BrandNames` errors.
- `markdownlint-cli2` clean on the changed READMEs.

## Decision log

Considered three options from the issue:

- **A. Surgical in-file suppression** (`vale off`/`vale on` comment
blocks, backticking banned terms). Rejected as primary: noisy in source,
repeated per example, bare-term headings still fire, and every new rule
can re-break the guide. It is path-independent, so it would have covered
the editor case noted in Option B's limitation.
- **B. Config-level subtree exemption** (chosen; narrowed to the guide
subtree after round-2 review). One place, zero source noise,
future-proof for the guide subpages.
- **Scope.** The clear applies to `docs/.style/style-guide/**` only.
Round-2 review (three reviewers converged, verified end-to-end) showed
the original directory-wide clear over-reached: `content-guidelines.md`
and the landing `README.md` are ordinary contributor prose that lints
clean today (`content-guidelines.md` uses `HashiCorp` correctly), so
they should stay linted. Narrowing to the guide subtree preserves the
exact 3-finding baseline, relints those two pages, removes the
last-match-wins ordering hazard, and drops the whole-package demo
re-include. The demo sits at the `.style/` root and keeps firing via
`[*.md]`.
- **Tradeoff.** The guide's own prose under `style-guide/` is no longer
auto-linted by Vale. Acceptable because the guide must contain banned
terms by design, one-sentence-per-line is enforced by markdownlint, and
human review covers the rest.
- **Limitation.** The exemption holds only for invocations whose path
resolves to `docs/.style/style-guide/...` (repo-root-relative
`docs/...`, what `make lint/prose` and CI pass). Absolute paths
(editors/LSP) and subdirectory-relative paths still flag the guide.
Recorded in `docs/.style/README.md`.
- **C. Restructure examples into fenced code blocks.** Rejected: changes
the guide's rendered format and doesn't cover Do/Don't tables or
headings.

## Notes

- `.vale.ini` is outside `docs/`, so this PR modifies repo-wide lint
config; the clear is scoped to `docs/.style/style-guide/` only.
- Linear: DOCS-543.

---
Opened via Coder Agents on behalf of @nickvigilante.
2026-07-18 13:41:27 -04:00

43 lines
1.9 KiB
INI

# Vale configuration for Coder documentation.
#
# Rule rollout doctrine. Every rule listed below ships clean: zero
# baseline findings across `docs/` (excluding `docs/.style/style-guide/`,
# which is exempt by design; see docs/.style/README.md) at enable time.
# Severity is a deliberate per-rule choice:
#
# - `error` top annotation tier; surfaces a GitHub `error`. Vale
# runs advisory, so it does not block merge today.
# - `warning` strong guidance; surfaces annotations without
# failing CI.
# - `suggestion` soft guidance; surfaces `notice` annotations.
#
# To add a rule, follow the per-rule PR template in
# docs/.style/README.md ("Adding a Vale rule"). Third-party rules
# from Google, alex, and write-good are not enabled by default; each
# returns via the same per-rule PR pattern after its corpus is clean.
#
# About Vale's exit code: Vale exits non-zero only when error-level
# alerts are found. Warning and suggestion annotate without
# affecting exit. Real runtime failures (bad config, missing files)
# propagate regardless of severity.
#
# The Coder rule package lives under docs/.style/styles/Coder/ and is
# the single source loaded by default.
StylesPath = docs/.style/styles
MinAlertLevel = suggestion
[*.md]
BasedOnStyles = Coder
# The style guide under docs/.style/style-guide/ deliberately demonstrates the
# violations the Coder rules ban (Don't examples in blockquotes and Do/Don't
# tables, banned terms named in headings and prose). Linting it would surface a
# standing backlog of intentional findings, which erodes trust in the annotation
# channel and breaks the zero-baseline doctrine. The rest of docs/.style/ (the
# landing page, content-guidelines.md, the annotation demo, and the Coder rule
# docs) is ordinary prose and stays linted; the annotation demo keeps firing its
# Coder.Demo* rules with no re-include. See docs/.style/README.md.
[docs/.style/style-guide/**]
BasedOnStyles =