docs-linterlisted
Install: claude install-skill pavelzaitsau/copydesk
# Docs style gate
A convention nobody checks decays within a quarter. Everything a linter can express belongs to the linter, and stops being prose.
The writing rules this gate enforces are in the `technical-writing` skill. This skill covers the machine.
| Enforceable by a linter | Not enforceable, stays in a skill |
| --- | --- |
| Banned words and hedges | Whether a section is complete |
| Vague obligation instead of RFC 2119 | Whether an ADR had real alternatives |
| Sentence length | Whether a fact is in the right file |
| Abbreviations in prose | Whether a comment states why |
| Terminology substitutions | Whether a number is true |
The shipped config in `assets/vale/` is a starting point, not a standard. The shipped config avoids every trap listed below.
## Install
Vale is a Go binary, not a package of your language's ecosystem. Install it separately, or the hook fails to spawn instead of passing silently.
```bash
cp -r assets/vale/.vale.ini assets/vale/styles .
vale --minAlertLevel=error <docs-root>/
```
## Wiring
Pre-commit, in the `local` repo block:
```yaml
- id: vale-docs
name: docs style (Vale)
entry: vale --minAlertLevel=error
language: system
files: ^<docs-root>/.*\.md$
```
CI, as a step after the code linter:
```yaml
- name: docs
uses: errata-ai/vale-action@reviewdog
with:
files: <docs-root>
fail_on_error: true
```
`scripts/lint-docs.sh` does the same without the action,