Skip to content

Commit c5997b5

Browse files
committed
chore(claude): add 'inclusive language' rule to CLAUDE.md
Codifies the substitution table for whitelist/blacklist/master/etc. Allowlist/denylist/main aren't euphemisms — they're more accurate descriptions of what the lists do. Carves out exceptions for third-party APIs and vendored upstream sources where renaming would break the boundary.
1 parent c33fc08 commit c5997b5

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

CLAUDE.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,28 @@ When in doubt, sort. The cost of a sorted list that didn't need to be is approxi
190190

191191
When you spot duplication, the answer is never "update both" — the answer is "delete one and import the other." Fix the architecture, not the symptom.
192192

193+
### Inclusive Language
194+
195+
Use precise, neutral terms over historical metaphors that imply hierarchy or exclusion. The substitutes are not euphemisms — they're more *accurate* (a list of allowed values genuinely is an "allowlist"; "whitelist" is a metaphor that hides what the list does).
196+
197+
| Replace | With |
198+
| ---------------------------------------- | ----------------------------------------------------- |
199+
| `whitelist` / `whitelisted` | `allowlist` / `allowed` / `allowlisted` |
200+
| `blacklist` / `blacklisted` | `denylist` / `denied` / `blocklisted` / `blocked` |
201+
| `master` (branch, process, copy) | `main` (branch); `primary` / `controller` (process) |
202+
| `slave` | `replica`, `worker`, `secondary`, `follower` |
203+
| `grandfathered` | `legacy`, `pre-existing`, `exempted` |
204+
| `sanity check` | `quick check`, `confidence check`, `smoke test` |
205+
| `dummy` (placeholder) | `placeholder`, `stub` |
206+
207+
Apply across **code** (identifiers, comments, string literals), **docs** (READMEs, CLAUDE.md, markdown), **config files** (YAML, JSON), **commit messages**, **PR titles/descriptions**, and **CI logs** you control.
208+
209+
Two exceptions where the legacy term must remain (because changing it breaks something external):
210+
- **Third-party APIs / upstream code**: when interfacing with an external API field literally named `whitelist`, keep the field name; rename your local variable. E.g. `const allowedDomains = response.whitelist`.
211+
- **Vendored upstream sources**: don't rewrite vendored code (`vendor/**`, `upstream/**`, `**/fixtures/**`). Patch around it if needed.
212+
213+
When you encounter a legacy term during unrelated work, fix it inline — don't defer.
214+
193215
### Error Messages
194216

195217
An error message is UI. The reader should be able to fix the problem from the message alone, without opening your source.

0 commit comments

Comments
 (0)