inclusion-md 0.2.0 โ†’ 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,40 +5,17 @@
5
5
  > A repository-level context engineering document for inclusive AI-assisted
6
6
  > software development.
7
7
 
8
- [**Read INCLUSION.md โ†’**](./INCLUSION.md)
9
-
10
- ---
11
-
12
- ## Hi, I'm [Branon](https://branon.dev) ๐Ÿ‘‹
13
-
14
- I'm a design engineer who cares a lot about accessibility. As AI-assisted
15
- development started becoming the default in how we build software, I kept
16
- thinking about what a11y looks like in this new paradigm - where coding
17
- assistants are quietly making thousands of small decisions about who our
18
- software is built for.
19
-
20
- This repo is something I feel is currently missing from the conversation. As
21
- AI agents increasingly step into the roles of designers and engineers, I feel
22
- they need to be made aware of their biases from the data they're trained on -
23
- much like humans need to be made aware of biases in our cognitive schemas
24
- and our unique understandings of the world. `INCLUSION.md` is a small,
25
- opinionated, machine-readable scaffold for doing exactly that: giving AI
26
- coding assistants persistent inclusion-oriented guidance during code
27
- generation.
28
-
29
- For the full rationale - training-data bias, the limits of WCAG, why
30
- inclusion needs an operational layer in AI-native workflows - read the
31
- companion essay: [_The need for INCLUSION.md_](https://branon.dev/blog/posts/the-need-for-inclusion-md).
8
+ [**Read INCLUSION.md โ†’**](./INCLUSION.md) ยท [npm](https://www.npmjs.com/package/inclusion-md) ยท [companion essay](https://branon.dev/blog/posts/the-need-for-inclusion-md)
32
9
 
33
10
  ---
34
11
 
35
12
  ## What it is
36
13
 
37
- `INCLUSION.md` is a drop-in file that gives AI coding assistants - GitHub
38
- Copilot, Cursor, Claude Code, Windsurf, Continue, and friends - persistent,
14
+ `INCLUSION.md` is a drop-in file that gives AI coding assistants โ€” GitHub
15
+ Copilot, Cursor, Claude Code, Windsurf, Continue, and friends โ€” persistent,
39
16
  inclusion-oriented guidance during code generation.
40
17
 
41
- It is the inclusion-focused sibling of `A11Y.md`, `CONTRIBUTING.md`, and
18
+ It's the inclusion-focused sibling of `A11Y.md`, `CONTRIBUTING.md`, and
42
19
  `design.md`:
43
20
 
44
21
  | File | Operationalizes |
@@ -49,251 +26,77 @@ It is the inclusion-focused sibling of `A11Y.md`, `CONTRIBUTING.md`, and
49
26
  | `design.md` | Visual and interaction system |
50
27
  | `INCLUSION.md` | Contextual, representational, sociotechnical inclusion |
51
28
 
52
- ---
53
-
54
- ## Why this exists
29
+ ## Why it exists
55
30
 
56
- AI-assisted development is becoming infrastructure. Coding assistants now sit
57
- _between_ human intent and the code, copy, and interactions that ship. They
58
- generate output based on what is statistically likely given their training
59
- data - and that training data carries the accumulated biases of the public
60
- web, open-source code, and English-language text.
31
+ AI coding assistants now sit _between_ human intent and the code, copy, and
32
+ interactions that ship. They generate output based on what's statistically
33
+ likely given training data โ€” which carries the accumulated biases of the
34
+ public web, open-source code, and English-language text. That means
35
+ assistants quietly amplify two kinds of debt:
61
36
 
62
- That means AI assistants can quietly amplify two kinds of debt at once:
63
-
64
- - **Accessibility debt** - inaccessible patterns inherited from the public web.
65
- - **Representational debt** - narrow assumptions about whose communication
37
+ - **Accessibility debt** โ€” inaccessible patterns inherited from the public web.
38
+ - **Representational debt** โ€” narrow assumptions about whose communication
66
39
  styles, identities, and lived experiences count as "default."
67
40
 
68
- Neither shows up in your bundle size report.
41
+ Neither shows up in your bundle size report. `INCLUSION.md` is a small,
42
+ opinionated scaffold to push back. Not a fix โ€” bias mitigation is unsolved โ€”
43
+ but operational scaffolding that lowers the floor.
69
44
 
70
- `INCLUSION.md` is a small, opinionated, machine-readable scaffold to push back
71
- on that flattening. It is not a fix. Bias mitigation is an unresolved
72
- sociotechnical problem. But operational scaffolding lowers the floor.
45
+ For the long version, read the companion essay:
46
+ [_The need for INCLUSION.md_](https://branon.dev/blog/posts/the-need-for-inclusion-md).
73
47
 
74
48
  ---
75
49
 
76
50
  ## Quick start
77
51
 
78
- ### Option A: Use the CLI (recommended)
79
-
80
52
  ```bash
81
53
  npx inclusion-md init
82
54
  ```
83
55
 
84
- That's it. The CLI walks you through a few questions about your project
85
- (product, primary users, known underserved users, distribution context,
86
- stakes, ownership, review cadence), picks a starting template (generic,
87
- frontend app, design system, or backend API), and writes a customized
88
- `INCLUSION.md` to your repo root.
89
-
90
- Useful flags:
91
-
92
- ```bash
93
- npx inclusion-md init --variant design-system # start from a domain example
94
- npx inclusion-md init --out docs/INCLUSION.md # write somewhere else
95
- npx inclusion-md init --yes # accept defaults, non-interactive
96
- npx inclusion-md init --force # overwrite without prompting
97
- npx inclusion-md update # re-run questionnaire on existing file
98
- npx inclusion-md --help
99
- ```
100
-
101
- Requires Node.js 16+. No dependencies.
102
-
103
- #### The Design Decisions questionnaire
104
-
105
- After the foundational questions, the CLI offers an opt-in **Design Decisions**
106
- questionnaire - 13 short, skippable questions across six groups:
107
-
108
- 1. **Core assumptions** - who you primarily build for, and what "default user"
109
- assumptions live inside your product
110
- 2. **Authentication & access** - how people get in, who can't, why
111
- 3. **Information collection** - what you ask for, what's required, why
112
- 4. **Interaction model** - how people interact, what patterns you don't support
113
- 5. **Communication & language** - languages and tone you optimize for
114
- 6. **Edge cases & intersections** - where the product breaks, who shows up
115
- in unexpected ways
116
-
117
- The questions are grounded in three sources:
118
-
119
- - _ABLEIST: Measuring Ableist Harms in LLMs_ ([arxiv.org/abs/2510.10998](https://arxiv.org/abs/2510.10998))
120
- - _Centering Disability Perspectives in LLM Research and Design_ (ACM)
121
- - Kat Holmes, _Mismatch: How Inclusion Shapes Design_ (MIT Press)
122
-
123
- The point isn't perfect answers. The point is **conscious, documented
124
- tradeoffs**. Skipping a question is a valid answer; the doc just won't speak
125
- to that dimension yet. Run `npx inclusion-md update` later to fill more in.
126
-
127
- Answers land in your `INCLUSION.md` as a `### 1.B Design Decisions` subsection
128
- under Project Context. Reviewers (human and AI) can flag generated output that
129
- contradicts the realities you've documented.
130
-
131
- #### Updating an existing INCLUSION.md
132
-
133
- ```bash
134
- npx inclusion-md update
135
- ```
136
-
137
- This re-runs the Project Context + Design Decisions + Maintenance questions
138
- and rewrites **only** Sections 1 and 12 in place. Any edits you've made to
139
- the rest of the file - your engineering guidance, your language heuristics,
140
- your custom sections - are preserved.
141
-
142
- ### Option B: Copy the file by hand
143
-
144
- ```bash
145
- curl -O https://raw.githubusercontent.com/BranonConor/inclusion.md/main/INCLUSION.md
146
- ```
147
-
148
- Or just download [`INCLUSION.md`](./INCLUSION.md) from this repo and drop it
149
- into the root of your project alongside `README.md`.
150
-
151
- ### Customize Section 1 (Project Context)
152
-
153
- The generic template is a starting point. Inclusion guidance is _contextual_ -
154
- the section that matters most is the one that describes _your_ product, _your_
155
- users, and _your_ known blind spots. Fill in:
156
-
157
- - the product description
158
- - who you've designed for
159
- - who you _haven't_ designed for well (yet)
160
- - distribution context (geography, devices, languages, assistive tech)
161
- - the stakes when exclusion happens
162
-
163
- (If you used `npx inclusion-md init`, this is already filled in.)
164
-
165
- ### Reference it from your AI assistant
166
-
167
- Most AI coding assistants support repository-level context files. Point them
168
- at `INCLUSION.md`.
169
-
170
- **GitHub Copilot** - create `.github/copilot-instructions.md`:
171
-
172
- ```md
173
- This repository contains an `INCLUSION.md` at the project root.
174
- Follow its guidance when generating UI copy, code, documentation,
175
- error messages, persona descriptions, and review feedback.
176
- ```
177
-
178
- **Cursor** - in `.cursor/rules/inclusion.md` or `.cursorrules`:
179
-
180
- ```md
181
- Always read and follow `/INCLUSION.md` when generating code, copy,
182
- or design artifacts in this repository.
183
- ```
184
-
185
- **Claude Code** - in `CLAUDE.md`:
186
-
187
- ```md
188
- Read `/INCLUSION.md` and apply its review prompts before
189
- finalizing any generated output in this repository.
190
- ```
191
-
192
- **Continue / Windsurf / Cody / etc.** - add `INCLUSION.md` to your workspace
193
- context configuration.
194
-
195
- ### Treat it like the rest of your engineering docs
196
-
197
- - Name an owner.
198
- - Review on a cadence (quarterly recommended).
199
- - Track changes in a `CHANGELOG.md` or in releases.
200
- - Provide a feedback route for users and contributors.
201
-
202
- ---
203
-
204
- ## Examples
205
-
206
- The [`examples/`](./examples) folder contains adapted `INCLUSION.md` files for
207
- different repo types:
56
+ That's it. Node.js 16+ required, zero dependencies. The CLI walks you
57
+ through a short questionnaire and writes a customized `INCLUSION.md` to
58
+ your repo root. Then [point your AI assistant at it](./docs/integrations.md).
208
59
 
209
- - [`examples/frontend-app/INCLUSION.md`](./examples/frontend-app/INCLUSION.md) -
210
- a consumer-facing web app
211
- - [`examples/design-system/INCLUSION.md`](./examples/design-system/INCLUSION.md) -
212
- a component library / design system
213
- - [`examples/backend-api/INCLUSION.md`](./examples/backend-api/INCLUSION.md) -
214
- a backend API / SDK
60
+ ## Documentation
215
61
 
216
- These are illustrative, not prescriptive. Adapt them to your context.
62
+ | Doc | What's in it |
63
+ | --------------------------------------------------- | ------------------------------------------------------------------------- |
64
+ | [Getting started](./docs/getting-started.md) | Install, pick a variant, customize Section 1, treat as infrastructure. |
65
+ | [AI assistant integrations](./docs/integrations.md) | Wire it into Copilot, Cursor, Claude Code, Continue, Windsurf. |
66
+ | [CLI reference](./docs/cli-reference.md) | All commands, flags, the Design Decisions questionnaire, troubleshooting. |
67
+ | [How it works](./docs/how-it-works.md) | How agents load it, the context-window tradeoff, what this is _not_. |
68
+ | [Examples](./examples) | Adapted templates: frontend app, design system, backend API. |
217
69
 
218
70
  ---
219
71
 
220
- ## What this is not
221
-
222
- `INCLUSION.md` is **not**:
223
-
224
- - a substitute for participatory research with disabled users
225
- - a substitute for hiring disabled designers, engineers, and researchers
226
- - a substitute for accessibility audits and remediation
227
- - a substitute for legal and regulatory compliance
228
- - a guarantee that any AI assistant will follow its guidance
229
- - a finished or final artifact
230
-
231
- It is an operational scaffold. The ceiling is raised by people - especially
232
- disabled people - with authority, budget, and time.
233
-
234
- ---
235
-
236
- ## Troubleshooting
237
-
238
- **"`npx inclusion-md` does nothing / hangs."**
239
- Make sure you're on Node.js 16+ (`node --version`). The CLI uses only
240
- built-in modules - no install step is required.
241
-
242
- **"I can't find an existing `INCLUSION.md`" when running `update`.**
243
- By default the CLI looks at `./INCLUSION.md`. If yours lives elsewhere,
244
- pass `--out`:
245
-
246
- ```bash
247
- npx inclusion-md update --out docs/INCLUSION.md
248
- ```
249
-
250
- **The welcome animation looks weird in CI.**
251
- It's automatically skipped when stdout isn't a TTY, when `--no-color` is
252
- passed, or when `CI=1` is set. If you're piping output, pass `--no-color`
253
- explicitly to be safe.
254
-
255
- **I want to script this in a setup wizard.**
256
- Pass `--yes` to accept all defaults and skip the optional Design Decisions
257
- questionnaire. Combine with `--variant`, `--out`, and `--force` for a fully
258
- non-interactive run.
72
+ ## Hi, I'm [Branon](https://branon.dev) ๐Ÿ‘‹
259
73
 
260
- **I edited my `INCLUSION.md` and I'm worried `update` will trash it.**
261
- `update` only touches Section 1 (Project Context) and Section 12
262
- (Maintenance). Everything else is preserved verbatim. The smoke tests
263
- ([`test/smoke.test.js`](./test/smoke.test.js)) cover this contract.
74
+ I'm a design engineer who cares a lot about accessibility. As AI-assisted
75
+ development became the default for shipping software, I kept thinking about
76
+ what a11y looks like in this new paradigm โ€” where coding assistants are
77
+ quietly making thousands of small decisions about who our software is built
78
+ for. This repo is something I felt was missing from the conversation.
264
79
 
265
80
  ---
266
81
 
267
82
  ## Contributing
268
83
 
269
- Pull requests, issues, translations, domain-specific extensions, and critiques
270
- are welcome. See [`CONTRIBUTING.md`](./CONTRIBUTING.md).
84
+ Pull requests, issues, translations, domain-specific extensions, and
85
+ critiques are welcome. See [`CONTRIBUTING.md`](./CONTRIBUTING.md).
271
86
 
272
- This project takes language and representation seriously. Contributions that
273
- improve language guidance, add domain-specific sections, or correct ableist or
274
- exclusionary defaults are especially appreciated. Contributions from disabled
275
- practitioners and from communities underrepresented in this kind of tooling
276
- are prioritized in review.
87
+ This project takes language and representation seriously. Contributions
88
+ that improve language guidance, add domain-specific sections, or correct
89
+ ableist or exclusionary defaults are especially appreciated. Contributions
90
+ from disabled practitioners and from communities underrepresented in this
91
+ kind of tooling are prioritized in review.
277
92
 
278
- ---
93
+ ## License & citation
279
94
 
280
- ## License
95
+ MIT โ€” see [`LICENSE`](./LICENSE). Fork, adapt, translate, ship.
281
96
 
282
- MIT. See [`LICENSE`](./LICENSE).
283
-
284
- You are encouraged to fork, adapt, translate, and ship this in your own
285
- projects. Attribution is appreciated but not required.
286
-
287
- ---
288
-
289
- ## Citation
290
-
291
- If you cite this work academically or in industry writing:
97
+ If you cite this academically or in industry writing:
292
98
 
293
99
  ```
294
100
  Conor, B. (2026). INCLUSION.md: A context engineering scaffold for
295
101
  inclusive AI-assisted software development. https://github.com/BranonConor/inclusion.md
296
102
  ```
297
-
298
- Companion essay: _The need for INCLUSION.md_,
299
- <https://branon.dev/blog/posts/the-need-for-inclusion-md>.
@@ -0,0 +1,100 @@
1
+ # CLI reference
2
+
3
+ ```bash
4
+ npx inclusion-md <command> [options]
5
+ ```
6
+
7
+ Requires Node.js 16+. Zero dependencies.
8
+
9
+ ## Commands
10
+
11
+ ### `init`
12
+
13
+ Interactively generate an `INCLUSION.md`. Walks through Project Context (5
14
+ questions), an opt-in Design Decisions questionnaire (13 questions), and
15
+ Maintenance (3 questions), then writes the file.
16
+
17
+ ```bash
18
+ npx inclusion-md init
19
+ npx inclusion-md init --variant design-system
20
+ npx inclusion-md init --out docs/INCLUSION.md
21
+ ```
22
+
23
+ ### `update`
24
+
25
+ Re-run the questionnaire against an existing `INCLUSION.md`. Rewrites only
26
+ Section 1 (Project Context) and Section 12 (Maintenance) in place.
27
+ Everything else โ€” including your edits โ€” is preserved verbatim.
28
+
29
+ ```bash
30
+ npx inclusion-md update
31
+ npx inclusion-md update --out docs/INCLUSION.md
32
+ ```
33
+
34
+ ## Options
35
+
36
+ | Flag | Description |
37
+ | ------------------ | -------------------------------------------------------------------- |
38
+ | `-o, --out <path>` | Output path. Default: `./INCLUSION.md`. |
39
+ | `--variant <name>` | `generic` (default), `frontend-app`, `design-system`, `backend-api`. |
40
+ | `--force` | Overwrite existing file without prompting. |
41
+ | `-y, --yes` | Accept defaults; skip the optional Design Decisions questionnaire. |
42
+ | `--no-color` | Disable ANSI colors and the welcome animation. |
43
+ | `-h, --help` | Show help. |
44
+ | `-v, --version` | Show CLI version. |
45
+
46
+ ## The Design Decisions questionnaire
47
+
48
+ After Project Context, the CLI offers 13 short, skippable questions across
49
+ six groups. The point isn't perfect answers โ€” it's **conscious, documented
50
+ tradeoffs**. Skipping is valid; the doc just won't speak to that dimension
51
+ yet, and you can fill more in later with `update`.
52
+
53
+ | Group | Surfaces |
54
+ | -------------------------- | --------------------------------------------------------- |
55
+ | Core assumptions | Who you build for; "default user" assumptions in product. |
56
+ | Authentication & access | How people get in, who can't, why. |
57
+ | Information collection | What you ask for; required vs. optional; why. |
58
+ | Interaction model | How people interact; patterns you don't support. |
59
+ | Communication & language | Languages and tone you optimize for. |
60
+ | Edge cases & intersections | Where it breaks; who shows up unexpectedly. |
61
+
62
+ Answers land as a `### 1.B Design Decisions` subsection under Project
63
+ Context. Reviewers (human and AI) can flag generated output that
64
+ contradicts what's documented.
65
+
66
+ The questions are grounded in:
67
+
68
+ - _ABLEIST: Measuring Ableist Harms in LLMs_ โ€” [arxiv.org/abs/2510.10998](https://arxiv.org/abs/2510.10998)
69
+ - _Centering Disability Perspectives in LLM Research and Design_ (ACM)
70
+ - Kat Holmes, _Mismatch: How Inclusion Shapes Design_ (MIT Press)
71
+
72
+ ## Scripting / non-interactive use
73
+
74
+ ```bash
75
+ npx inclusion-md init --yes --variant design-system --out docs/INCLUSION.md --force
76
+ ```
77
+
78
+ `--yes` skips all prompts (including the optional questionnaire) and
79
+ accepts defaults. Combine with `--force` for fully unattended setup.
80
+
81
+ ## Troubleshooting
82
+
83
+ **`npx inclusion-md` does nothing or hangs.**
84
+ Check `node --version` is 16 or higher.
85
+
86
+ **"I can't find an existing `INCLUSION.md`" on `update`.**
87
+ Pass `--out` to point at the right path:
88
+
89
+ ```bash
90
+ npx inclusion-md update --out docs/INCLUSION.md
91
+ ```
92
+
93
+ **The welcome animation looks broken in CI.**
94
+ It's auto-skipped when stdout isn't a TTY, when `--no-color` is set, or
95
+ when `CI=1`. Pass `--no-color` explicitly to be safe.
96
+
97
+ **Worried `update` will trash my edits.**
98
+ It only rewrites Sections 1 and 12. Everything else is preserved verbatim.
99
+ The smoke tests in [`test/smoke.test.js`](../test/smoke.test.js) cover
100
+ this contract.
@@ -0,0 +1,67 @@
1
+ # Getting started
2
+
3
+ The fastest path: run the CLI, answer a few questions, commit the file.
4
+
5
+ ```bash
6
+ npx inclusion-md init
7
+ ```
8
+
9
+ Requires Node.js 16+. No dependencies. The CLI walks you through a short
10
+ Project Context questionnaire, an opt-in deeper Design Decisions
11
+ questionnaire, and writes a customized [`INCLUSION.md`](../INCLUSION.md) to
12
+ your repo root.
13
+
14
+ ## Manual install
15
+
16
+ Prefer to copy the file by hand:
17
+
18
+ ```bash
19
+ curl -O https://raw.githubusercontent.com/BranonConor/inclusion.md/main/INCLUSION.md
20
+ ```
21
+
22
+ Or download [`INCLUSION.md`](../INCLUSION.md) and drop it next to your
23
+ `README.md`.
24
+
25
+ ## Pick a starting variant
26
+
27
+ The CLI ships four templates. Pick the one closest to your project; the
28
+ generic one is fine for most repos.
29
+
30
+ | Variant | Best for | Source |
31
+ | --------------- | ------------------------------------------ | ----------------------------------------------------- |
32
+ | `generic` | Most repos. Default. | [`INCLUSION.md`](../INCLUSION.md) |
33
+ | `frontend-app` | Consumer web apps. Forms, microcopy, AI. | [`examples/frontend-app`](../examples/frontend-app) |
34
+ | `design-system` | Component libraries. Tokens, RTL, density. | [`examples/design-system`](../examples/design-system) |
35
+ | `backend-api` | APIs / SDKs. Schema, errors, telemetry. | [`examples/backend-api`](../examples/backend-api) |
36
+
37
+ ```bash
38
+ npx inclusion-md init --variant design-system
39
+ ```
40
+
41
+ These are illustrative, not prescriptive. Adapt them.
42
+
43
+ ## Customize Section 1
44
+
45
+ Inclusion guidance is contextual. The section that earns its keep is the one
46
+ that describes _your_ product, _your_ users, and _your_ known blind spots.
47
+ The CLI fills this in for you, but if you skipped it, edit Section 1 of your
48
+ generated file and answer:
49
+
50
+ - Product description
51
+ - Who you've designed for
52
+ - Who you _haven't_ designed for well yet
53
+ - Distribution context (geography, devices, languages, assistive tech)
54
+ - The stakes when exclusion happens
55
+
56
+ ## Treat it like engineering infrastructure
57
+
58
+ - Name an owner.
59
+ - Review on a cadence (quarterly is a good default).
60
+ - Track changes in `CHANGELOG.md` or releases.
61
+ - Provide a feedback route for users and contributors.
62
+
63
+ ## Next steps
64
+
65
+ - [Wire it into your AI assistant โ†’](./integrations.md)
66
+ - [Full CLI reference โ†’](./cli-reference.md)
67
+ - [How agents actually use it (and the context-window tradeoff) โ†’](./how-it-works.md)
@@ -0,0 +1,78 @@
1
+ # How it works
2
+
3
+ A reasonable concern when looking at a 400+ line markdown file: _won't this
4
+ eat my context window every prompt?_ Short answer: no, and the cost is
5
+ smaller than it looks.
6
+
7
+ ## How it gets loaded, by tool
8
+
9
+ | Tool | How it loads `INCLUSION.md` | When |
10
+ | -------------------------- | ---------------------------------------------------- | ---------------------------------------------- |
11
+ | GitHub Copilot Chat | Via `.github/copilot-instructions.md` referencing it | Once per session/thread |
12
+ | Cursor | Via `.cursor/rules/inclusion.md` or `.cursorrules` | On rule activation, often per turn for matches |
13
+ | Claude Code | Via `CLAUDE.md` reference, then `Read` tool fetches | On demand, agent decides |
14
+ | Continue / Cody / Windsurf | Workspace context file | Once per session |
15
+
16
+ The pattern across all of them: the file isn't crammed into every LLM call.
17
+ It's loaded **once into the system prompt or a context-window slot** at
18
+ session start (Copilot, Continue), or **fetched on demand** when a task
19
+ touches relevant code (Claude Code, Cursor with rules).
20
+
21
+ ## Token math
22
+
23
+ A typical generated `INCLUSION.md` is roughly **4โ€“6k tokens**. For reference:
24
+
25
+ - Modern context windows: 128k (GPT-4o), 200k (Claude Sonnet), 1M+ (Gemini 2.0)
26
+ - A single file you're editing: 500โ€“3000 tokens
27
+ - A full chat session: usually 20โ€“60k tokens of context
28
+
29
+ So even on a "small" 128k window, `INCLUSION.md` is **~3โ€“5% of context
30
+ budget**. That's the same order of magnitude as a single React component
31
+ file. Worth it.
32
+
33
+ ## How to think about the tradeoff
34
+
35
+ 1. **Treat it like `tsconfig.json` or a lint rule set.** Infrastructure:
36
+ loaded once, applies to everything, doesn't need to be re-introduced.
37
+ 2. **The cost is per-session, not per-prompt.** Modern agents cache the
38
+ system prompt; the second turn doesn't re-pay the upload cost.
39
+ 3. **The first ~80 lines do the load-bearing work.** Sections 0โ€“2 (what
40
+ this is + core principle + project context) carry the main signal.
41
+ Sections 3โ€“13 are reference material the agent can skim or cite.
42
+ 4. **You can split it later if it bloats.** A lean root `INCLUSION.md`
43
+ that links to `docs/inclusion/*.md` deep dives is a valid pattern โ€”
44
+ same way `README.md` links to `CONTRIBUTING.md`.
45
+
46
+ ## Honest caveats
47
+
48
+ System-prompt-style guidance is **soft pressure**, not enforcement. It
49
+ works best when:
50
+
51
+ - The agent is told to **cite specific guidance** when generating code
52
+ ("Reference Section 7 when writing user-facing copy")
53
+ - You **review output against it** rather than expecting the agent to
54
+ police itself perfectly
55
+ - It's paired with **automated checks** (lint rules, a11y tests) for
56
+ things that can be checked
57
+
58
+ `INCLUSION.md` is a thinking-tool for the human reviewer as much as a
59
+ directive for the agent. Those 4โ€“6k tokens aren't there to fill the
60
+ context window โ€” they're there so when generated output ships an ableist
61
+ phrase or a hover-only interaction, you can point at a section number and
62
+ say _"this is the thing we already decided."_
63
+
64
+ ## What this is not
65
+
66
+ `INCLUSION.md` is **not**:
67
+
68
+ - A substitute for participatory research with disabled users
69
+ - A substitute for hiring disabled designers, engineers, and researchers
70
+ - A substitute for accessibility audits and remediation
71
+ - A substitute for legal and regulatory compliance (ADA, EAA, AODA, Section
72
+ 508, EN 301 549, etc.)
73
+ - A guarantee that any AI assistant will follow its guidance
74
+ - A finished or final artifact
75
+
76
+ It is an operational scaffold. It lowers the floor. It does not raise the
77
+ ceiling. The ceiling is raised by people โ€” especially disabled people โ€”
78
+ with authority, budget, and time.
@@ -0,0 +1,49 @@
1
+ # AI assistant integrations
2
+
3
+ `INCLUSION.md` only does its job if your assistant actually reads it. Most
4
+ tools support repository-level context files โ€” point them at it.
5
+
6
+ ## GitHub Copilot
7
+
8
+ Create `.github/copilot-instructions.md`:
9
+
10
+ ```md
11
+ This repository contains an `INCLUSION.md` at the project root.
12
+ Follow its guidance when generating UI copy, code, documentation,
13
+ error messages, persona descriptions, and review feedback.
14
+ ```
15
+
16
+ ## Cursor
17
+
18
+ Create `.cursor/rules/inclusion.md` (or use `.cursorrules`):
19
+
20
+ ```md
21
+ Always read and follow `/INCLUSION.md` when generating code, copy,
22
+ or design artifacts in this repository.
23
+ ```
24
+
25
+ ## Claude Code
26
+
27
+ In `CLAUDE.md`:
28
+
29
+ ```md
30
+ Read `/INCLUSION.md` and apply its review prompts before
31
+ finalizing any generated output in this repository.
32
+ ```
33
+
34
+ ## Continue / Windsurf / Cody / others
35
+
36
+ Add `INCLUSION.md` to your workspace context configuration. Most tools have
37
+ a "context files" or "rules" setting that takes a path or glob.
38
+
39
+ ## How loading actually works
40
+
41
+ The mechanics differ per tool โ€” see [how it works](./how-it-works.md) for
42
+ the loading model and the context-window tradeoff.
43
+
44
+ ## Going further
45
+
46
+ Tell the assistant to **cite specific guidance** when generating code, e.g.
47
+ "Reference Section 7 (Inclusive Language Heuristics) when writing
48
+ user-facing copy." Specific citations work better than blanket "follow the
49
+ inclusion file" instructions.
package/lib/ascii.js CHANGED
@@ -22,8 +22,7 @@ const FRAMES = [
22
22
 
23
23
  function renderFrame(frame, intensity) {
24
24
  // intensity: 0 = dim, 1 = normal, 2 = bold
25
- const stylize =
26
- intensity === 0 ? c.dim : intensity === 2 ? c.bold : (s) => s;
25
+ const stylize = intensity === 0 ? c.dim : intensity === 2 ? c.bold : (s) => s;
27
26
  return frame.map((line) => stylize(line)).join("\n");
28
27
  }
29
28
 
package/lib/init.js CHANGED
@@ -169,9 +169,7 @@ async function init(args) {
169
169
 
170
170
  const projectContext = await askProjectContext(p);
171
171
  process.stdout.write(
172
- "\n" +
173
- c.green("โœ“ ") +
174
- "Great, that's the foundational context.\n",
172
+ "\n" + c.green("โœ“ ") + "Great, that's the foundational context.\n",
175
173
  );
176
174
 
177
175
  // --- Design Decisions (opt-in) ---------------------------------------
package/lib/prompt.js CHANGED
@@ -17,13 +17,26 @@ function createPrompter({ acceptDefaults = false } = {}) {
17
17
  throw err;
18
18
  });
19
19
 
20
+ // Track the in-flight ask() so a single 'close' listener can reject it.
21
+ // Registering rl.once("close", ...) inside ask() leaked one listener per
22
+ // prompt and triggered MaxListenersExceededWarning around question ~11.
23
+ let pendingReject = null;
24
+ rl.on("close", () => {
25
+ if (pendingReject) {
26
+ const err = new Error("Cancelled by user");
27
+ err.code = "USER_CANCELLED";
28
+ const reject = pendingReject;
29
+ pendingReject = null;
30
+ reject(err);
31
+ }
32
+ });
33
+
20
34
  function ask(question) {
21
35
  return new Promise((resolve, reject) => {
22
- rl.question(question, (answer) => resolve(answer));
23
- rl.once("close", () => {
24
- const err = new Error("Cancelled by user");
25
- err.code = "USER_CANCELLED";
26
- reject(err);
36
+ pendingReject = reject;
37
+ rl.question(question, (answer) => {
38
+ pendingReject = null;
39
+ resolve(answer);
27
40
  });
28
41
  });
29
42
  }
@@ -46,8 +46,7 @@ const GROUPS = [
46
46
  key: "authMethods",
47
47
  label:
48
48
  "How do people get into your product? What auth methods do you support?",
49
- hint:
50
- "Examples: email/password, email + SMS, social login, passkey, SSO, magic link.",
49
+ hint: "Examples: email/password, email + SMS, social login, passkey, SSO, magic link.",
51
50
  },
52
51
  {
53
52
  key: "authExcluded",
@@ -60,8 +59,7 @@ const GROUPS = [
60
59
  {
61
60
  key: "authReason",
62
61
  label: "Why did you choose that authentication method?",
63
- hint:
64
- "Be honest: easiest to implement, most widely supported, security requirement, industry standard.",
62
+ hint: "Be honest: easiest to implement, most widely supported, security requirement, industry standard.",
65
63
  },
66
64
  ],
67
65
  },
@@ -80,8 +78,7 @@ const GROUPS = [
80
78
  {
81
79
  key: "infoRationale",
82
80
  label: "For any required personal information, why is it required?",
83
- hint:
84
- "For each field: could we work without this? Example: 'Email required for notifications - could SMS work instead?'",
81
+ hint: "For each field: could we work without this? Example: 'Email required for notifications - could SMS work instead?'",
85
82
  },
86
83
  ],
87
84
  },
@@ -112,8 +109,7 @@ const GROUPS = [
112
109
  {
113
110
  key: "languages",
114
111
  label: "What language(s) do you currently support?",
115
- hint:
116
- "English only, English + [list], multilingual from day 1, plan to add languages in [timeframe].",
112
+ hint: "English only, English + [list], multilingual from day 1, plan to add languages in [timeframe].",
117
113
  },
118
114
  {
119
115
  key: "communicationStyle",
@@ -132,8 +128,7 @@ const GROUPS = [
132
128
  {
133
129
  key: "knownBreakage",
134
130
  label: "What's one scenario where your product might not work?",
135
- hint:
136
- "Be specific, not vague. Example: 'People in rural areas with <1 Mbps internet' or 'Left-handed users on touch devices.'",
131
+ hint: "Be specific, not vague. Example: 'People in rural areas with <1 Mbps internet' or 'Left-handed users on touch devices.'",
137
132
  },
138
133
  {
139
134
  key: "unexpectedUsers",
@@ -167,10 +162,7 @@ async function runQuestionnaire(p) {
167
162
  for (let g = 0; g < GROUPS.length; g++) {
168
163
  const group = GROUPS[g];
169
164
  process.stdout.write(
170
- c.cyan(group.title) +
171
- "\n" +
172
- c.dim(` ${group.blurb}`) +
173
- "\n\n",
165
+ c.cyan(group.title) + "\n" + c.dim(` ${group.blurb}`) + "\n\n",
174
166
  );
175
167
 
176
168
  for (const q of group.questions) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inclusion-md",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Scaffold an INCLUSION.md - a context engineering doc that gives AI coding assistants inclusion-oriented guidance during code generation.",
5
5
  "keywords": [
6
6
  "inclusion",
@@ -34,6 +34,7 @@
34
34
  "templates",
35
35
  "INCLUSION.md",
36
36
  "examples",
37
+ "docs",
37
38
  "README.md",
38
39
  "LICENSE"
39
40
  ],