You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
233
233
234
+
### Inclusive Language
235
+
236
+
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).
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.
249
+
250
+
Two exceptions where the legacy term must remain (because changing it breaks something external):
251
+
-**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`.
252
+
-**Vendored upstream sources**: don't rewrite vendored code (`vendor/**`, `upstream/**`, `**/fixtures/**`). Patch around it if needed.
253
+
254
+
When you encounter a legacy term during unrelated work, fix it inline — don't defer.
255
+
234
256
### Sorting
235
257
236
258
Sort lists alphanumerically (literal byte order, ASCII before letters). Apply this to:
0 commit comments