Repository: JoshuaKGoldberg/create-typescript-app (ts)

Issue:
🛠 Tooling: Add unit test that every option is mentioned in `Options.md`
### Bug Report Checklist

- [X] I have tried restarting my IDE and the issue persists.
- [X] I have pulled the latest `main` branch of the repository.
- [X] I have [searched for related issues](https://github.com/JoshuaKGoldberg/create-typescript-app/issues?q=is%3Aissue) and found none that matched my issue.

### Overview

This template has options added once in a while. Each should be mentioned in `docs/Options.md` so users can learn about them.

But, right now, nothing enforces those options get documented in `docs/Options.md`. So we get bugs like #1123.

Proposal: how about a `src/docs.test.ts` or something like that which:

1. Reads in the text of `docs/Options.md`
2. Ensures that, for each option as described by `optionsSchema.ts`, there's a mention

### Additional Info

_No response_

Pull request description:
docs: replace 'Options.md' with 'CLI.md' and 'Configuration Files.md'
## PR Checklist

- [x] Addresses an existing open issue: fixes #1124
- [x] That issue was marked as [`status: accepting prs`](https://github.com/JoshuaKGoldberg/create-typescript-app/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22)
- [x] Steps in [CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/.github/CONTRIBUTING.md) were taken

## Overview

Splits the existing `Options.md` into two docs:

* `CLI.md`: describing the common case of running `npx create-typescript-app`
* `Configuration Files.md`: describing the less-common case of using a `create-typescript-app.config.js`

Includes tests that each option is mentioned between the two of them.

🎁 

Patch:
diff --git a/README.md b/README.md
index 1695480..5110bc3 100644
--- a/README.md
+++ b/README.md
@@ -48,8 +48,8 @@ You can read more about the supported runtime modes in their docs pages:
 You can read more about `create-typescript-app` and the tooling it supports:
 
 1. [**Blocks**](./docs/Blocks.md): a breakdown of all the pieces this template can set up.
-2. [**Options**](./docs/Options.md): granular options to customize how the template is run.
-3. [**FAQs**](./docs/FAQs.md): frequently asked questions
+2. [**CLI**](./docs/CLI.md): providing granular options to customize how the template is run.
+3. [**FAQs**](./docs/FAQs.md): frequently asked questions and troubleshooting
 
 > [!NOTE]  
 > This template is early stage, opinionated, and not endorsed by the TypeScript team.
diff --git a/cspell.json b/cspell.json
index 924e84d..00bcb28 100644
--- a/cspell.json
+++ b/cspell.json
@@ -12,6 +12,7 @@
 	"words": [
 		"Anson",
 		"apexskier",
+		"attw",
 		"automerge",
 		"dbaeumer",
 		"infile",
diff --git a/docs/Blocks.md b/docs/Blocks.md
index f2f2fe7..350a0aa 100644
--- a/docs/Blocks.md
+++ b/docs/Blocks.md
@@ -51,7 +51,7 @@ This table summarizes each block and which base levels they're included in:
 | Vitest                       | `--exclude-vitest`                       |         | ✅     | 💯         |
 | VS Code                      | `--exclude-vs-code`                      |         |        | 💯         |
 
-See also [Options](./Options.md) for how to customize the way template is run.
+See also [CLI](./CLI.md) for customizing templated repositories when running `npx create-typescript-app`.
 
 ## "Minimal" Base Level
 
diff --git a/docs/CLI.md b/docs/CLI.md
new file mode 100644
index 0000000..b6f4b28
--- /dev/null
+++ b/docs/CLI.md
@@ -0,0 +1,85 @@
+# CLI
+
+`create-typescript-app` supports all the flags supported by [Bingo CLI](https://www.create.bingo/cli)s.
+It also provides a collection of custom flags per [Bingo CLI > Template Flags](https://www.create.bingo/cli#template-flags).
+
+```shell
+npx create-typescript-app
+```
+
+## Required Flags
+
+These options can only be inferred when running on an existing repository.
+Each will be prompted for when creating a new repository if not explicitly provided:
+
+| Flag            | Description                                    |
+| --------------- | ---------------------------------------------- |
+| `--description` | 'Sentence case.' description of the repository |
+| `--directory`   | which directory and repository name to use     |
+| `--preset`      | starting set of tooling to use                 |
+
+`npx create-typescript-app` provides three `--preset` options:
+
+1. **Minimal**: Just bare starter tooling: building, formatting, linting, and type checking.
+2. **Common**: Bare starters plus testing and automation for all-contributors and releases.
+3. **Everything**: The most comprehensive tooling imaginable: sorting, spellchecking, and more!
+
+For example, to create a new repository with the _Everything_ preset and prompt for `description` and `directory`:
+
+```shell
+npx create-typescript-app --preset everything
+```
+
+Pre-populating all required base options:
+
+```shell
+npx create-typescript-app --directory my-app --description "My app! 💖" --preset everything
+```
+
+See [Bingo > Stratum > Concepts > Templates > `--preset`](https://www.create.bingo/engines/stratum/concepts/templates#--preset) for more details on presets.
+
+## Optional Flags
+
+The following flags may be provided on the CLI to customize their values.
+Each defaults to a value based on the running system, including an repository if transitioning one.
+
+| Flag           | Type       | Description                                                                                                         | Default                                                                               |
+| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `--access`     | `string`   | Which [`npm publish --access`](https://docs.npmjs.com/cli/commands/npm-publish#access) to release npm packages with | `"public"` (TODO: file issue for `readAccess`)                                        |
+| `--author`     | `string`   | Username on npm to publish packages under                                                                           | An existing npm author, or the currently logged in npm user, or `owner.toLowerCase()` |
+| `--bin`        | `string`   | Value to set in `package.json`'s `"bin"` property, per [FAQs > How can I use `bin`?](./FAQs.md#how-can-i-use-bin)   | _(none)_                                                                              |
+| `--email`      | `string`   | Email address to be listed as the point of contact in docs and packages (e.g. `example@joshuakgoldberg.com`)        | Yours from `gh`, `git config`, or `npm whoami`                                        |
+| `--emoji`      | `string`   | decorative emoji to use in descriptions and docs                                                                    | The last emoji from `description`, or `"💖"`                                          |
+| `--funding`    | `string`   | GitHub organization or username to mention in `funding.yml`                                                         | The same as `owner`                                                                   |
+| `--keywords`   | `string[]` | Any number of keywords to include in `package.json`                                                                 | _(none)_                                                                              |
+| `--owner`      | `string`   | Organization or user owning the repository                                                                          | Yours from `gh` or `git config`                                                       |
+| `--pnpm`       | `string`   | pnpm version for `package.json`'s `packageManager` field                                                            | Existing value in `package.json` if it exists                                         |
+| `--repository` | `string`   | Name for the new repository                                                                                         | The same as `--directory`                                                             |
+| `--title`      | `string`   | 'Title Case' title for the repository                                                                               | Title-cased `repository`                                                              |
+| `--version`    | `string`   | package version to publish as and store in `package.json`                                                           | Existing value in `package.json` if it exists, or `"0.0.0"`                           |
+
+For example, customizing the npm author and funding source to different values than what would be inferred:
+
+```shell
+npx create-typescript-app --author my-npm-username --funding MyGitHubOrganization
+```
+
+Array flags can be specified as space-delineated strings and/or multiple times.
+For example, customizing keywords to three:
+
+```shell
+npx create-typescript-app --keywords eslint --keywords "javascript typescript"
+```
+
+## Block Exclusion Flags
+
+Per [Bingo > Stratum > Concepts > Templates > Exclusion Options](https://www.create.bingo/engines/stratum/concepts/templates#exclusion-options), individual "Blocks" of tooling may be excluded from running.
+Each Block may be excluded with a CLI flag whose name matches `--exclude-*`.
+
+For example, initializing with all tooling except for Renovate:
+
+```shell
+npx create-typescript-app --exclude-renovate
+```
+
+See [Blocks.md](./Blocks.md) for the list of blocks, which presets contain them, and their corresponding `--exclude-*` flags.
diff --git a/docs/Configuration Files.md b/docs/Configuration Files.md
new file mode 100644
index 0000000..fedb449
--- /dev/null
+++ b/docs/Configuration Files.md
@@ -0,0 +1,177 @@
+# Configuration Files
+
+`create-typescript-app` supports a `create-typescript-app.config.js` configuration file per [Bingo > Configuration](https://www.create.bingo/configuration).
+Bingo configuration files are generally used for describing complex options that can't be inferred from existing repositories.
+`create-typescript-app` is built on the [Stratum engine](https:://create.bingo/engines/stratum/about), so its configuration files adhere to [Bingo > Stratum > Details > Configurations](https://www.create.bingo/engines/stratum/details/configurations):
+
+- [`options`](#options): any type-safe options the template has declared
+- [`refinements`](#refinements): any customizations specified by the template
+
+> [!TIP]  
+> `create-typescript-app` defaults `options` to their values in an existing repository.
+> You most likely only need to use `refinements` to specify changes that can't be inferred.
+
+## `options`
+
+Any type-safe options the template has declared.
+This includes the options described in [CLI](./CLI.md).
+
+Some of create-typescript-app's options are rich objects, typically very long strings, or otherwise not reasonable on the CLI.
+These options are generally only programmatically used internally, but can still be specified in a configuration file:
+
+| Option           | Description                                                              | Default (If Available)                                    |
+| ---------------- | ------------------------------------------------------------------------ | --------------------------------------------------------- |
+| `contributors`   | AllContributors contributors to store in `.all-contributorsrc`           | Existing contributors in the file, or just your username  |
+| `documentation`  | any additional docs to add to `.github/DEVELOPMENT.md`                   | Extra content in `.github/DEVELOPMENT.md`                 |
+| `existingLabels` | existing labels to switch to the standard template labels                | Existing labels on the repository from the GitHub API     |
+| `explainer`      | additional `README.md` sentence(s) describing the package                | Extra content in `README.md` after badges and description |
+| `guide`          | link to a contribution guide to place at the top of development docs     | Block quote on top of `.github/DEVELOPMENT.md`            |
+| `logo`           | local image file and alt text to display near the top of the `README.md` | First non-badge image's `alt` and `src` in `README.md`    |
+| `node`           | Node.js engine version(s) to pin and require a minimum of                | Values from `.nvmrc` and `package.json`'s `"engines"`     |
+| `packageData`    | additional properties to include in `package.json`                       | Existing values in `package.json`                         |
+| `rulesetId`      | GitHub branch ruleset ID for main branch protections                     | Existing ruleset on the `main` branch from the GitHub API |
+| `usage`          | Markdown docs to put in `README.md` under the `## Usage` heading         | Existing usage lines in `README.md`                       |
+
+For example, changing `node` versions to values different from what would be inferred:
+
+```ts
+// create-typescript-app.config.js
+import { createConfig } from "create-typescript-app";
+
+export default createConfig({
+	options: {
+		node: {
+			minimum: ">=20.19.0",
+			pinned: "22.14.0",
+		},
+	},
+});
+```
+
+> [!TIP]  
+> Running `npx create-typescript-app` will apply any new `options` values to the repository.
+> You can generally remove `options` from your configuration file after running `npx create-typescript-app`.
+
+## `refinements`
+
+[Refinements](https://www.create.bingo/engines/stratum/details/configurations#refinements) can be used to modify the "Blocks" of tooling provided by create-typescript-app.
+
+See [Blocks.md](./Blocks.md) for the list of blocks, which presets contain them, and their corresponding `--exclude-*` flags.
+
+### `addons`
+
+Any additional [Addons](https://www.create.bingo/engines/stratum/concepts/blocks#addons) provided to Blocks provided by the selected Preset.
+
+For example, this configuration file adds the word `"joshuakgoldberg"` to the CSpell Block's Addons:
+
+```ts
+// create-typescript-app.config.js
+import { blockCSpell, createConfig } from "create-typescript-app";
+
+export default createConfig({
+	refinements: {
+		addons: [
+			blockCSpell({
+				words: ["joshuakgoldberg"],
+			}),
+		],
+	},
+});
+```
+
+Running `npx create-typescript-app` in a repository with that configuration file would add `"joshuakgoldberg"` to the `words` in `cspell.json`.
+
+### `blocks`
+
+Any customizations to the Blocks provided by the selected Preset.
+
+#### `add`
+
+Any Blocks to add to what the Preset provides.
+
+For example, this configuration file adds in `create-typescript-app`'s provided "arethetypeswrong" Block:
+
+```ts
+// create-typescript-app.config.js
+import { blockAreTheTypesWrong, createConfig } from "create-typescript-app";
+
+export default createConfig({
+	refinements: {
+		blocks: {
+			add: [blockAreTheTypesWrong],
+		},
+	},
+});
+```
+
+Running `npx create-typescript-app` in a repository with that configuration file would add in the created outputs from `blockAreTheTypesWrong`.
+
+#### `exclude`
+
+Any Blocks to exclude from what the Preset provides.
+
+For example, this configuration file omits the default _"This package was templated with..."_ notice that comes with `create-typescript-app`:
+
+```ts
+// create-typescript-app.config.js
+import { blockTemplatedBy, createConfig } from "create-typescript-app";
+
+export default createConfig({
+	refinements: {
+		blocks: {
+			exclude: [blockTemplatedBy],
+		},
+	},
+});
+```
+
+Running `npx create-typescript-app` in a repository with that configuration file would not include that Block, and so its generated README.md would not include the notice.
+
+#### Custom Blocks and Addons
+
+Custom Blocks can provide Addons to any other Blocks, including those provided by the package.
+This allows your repositories to blend in seamlessly with the features provided by your Template.
+
+For example, to add an [`@arethetypeswrong/cli`](https://www.npmjs.com/package/@arethetypeswrong/cli) lint task to the `package.json` file, a repository using the `create-typescript-app` Template could create and use a custom Block:
+
+```ts
+// blockLintAreTheTypesWrong.js
+import { base, blockPackageJson } from "create-typescript-app";
+
+export const blockLintAreTheTypesWrong = base.createBlock({
+	about: {
+		name: "Lint Are The Types Wrong",
+	},
+	produce() {
+		return {
+			addons: [
+				blockPackageJson({
+					properties: {
+						devDependencies: {
+							"@arethetypeswrong/cli": "0.17.3",
+						},
+						scripts: {
+							"lint:arethetypeswrong": "attw --pack .",
+						},
+					},
+				}),
+			],
+		};
+	},
+});
+```
+
+```ts
+// create-typescript-app.config.js
+import { createConfig } from "create-typescript-app";
+
+import { blockLintAreTheTypesWrong } from "./blockLintAreTheTypesWrong.js";
+
+export default createConfig({
+	refinements: {
+		blocks: {
+			add: [blockLintAreTheTypesWrong],
+		},
+	},
+});
+```
diff --git a/docs/FAQs.md b/docs/FAQs.md
index 9b15678..45edab4 100644
--- a/docs/FAQs.md
+++ b/docs/FAQs.md
@@ -164,7 +164,7 @@ The four presets correspond to what have seemed to be the most common user needs
    - Tooling added in this preset should be essential for a TypeScript repository that additionally automates useful GitHub tasks: contributor recognition, release management, and testing.
 3. **Everything**: Power users (including this repository) who want as much of the latest and greatest safety checks and standardization as possible.
 
-Note that you can always customize exactly which preset you use per [Options](./Options.md).
+Note that you can always customize exactly which preset you use per [CLI](./CLI.md).
 
 ## Why does this package include so many tools?
 
diff --git a/docs/Options.md b/docs/Options.md
deleted file mode 100644
index b31fe2c..0000000
--- a/docs/Options.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# Options
-
-`create-typescript-app` is built on top of [Bingo](https://create.bingo).
-It supports all the flags supported by [Bingo CLIs](https://www.create.bingo/cli).
-
-`npx create-typescript-app` provides three `--preset` options:
-
-1. **Minimal**: Just bare starter tooling: building, formatting, linting, and type checking.
-2. **Common**: Bare starters plus testing and automation for all-contributors and releases.
-3. **Everything**: The most comprehensive tooling imaginable: sorting, spellchecking, and more!
-
-For example, to create a new repository with the _Everything_ preset:
-
-```shell
-npx create-typescript-app --preset everything
-```
-
-`create-typescript-app` itself adds in two sections of flags:
-
-- [Base Options](#base-options)
-- [Block Exclusions](#block-exclusions)
-
-## Base Options
-
-Per [Bingo > CLI > Template Options](https://www.create.bingo/cli#template-options), options defined by `create-typescript-app` may be provided on the CLI.
-
-### Required Base Options
-
-These options can only be inferred when running on an existing repository.
-Each will be prompted for when creating a new repository if not explicitly provided:
-
-- `--description` _(`string`)_: 'Sentence case.' description of the repository
-- `--directory` _(`string`)_: which directory and repository name to use
-
-For example, pre-populating all required base options:
-
-```shell
-npx create-typescript-app --directory my-typescript-app --description "My awesome TypeScript app! 💖" --preset everything
-```
-
-That script will run completely autonomously, no prompted inputs required. ✨
-
-### Optional Base Options
-
-These optional options do not need to be provided explicitly.
-They will be inferred from the running user, and if migrating an existing repository, its files on disk.
-
-- `--access` _(`"public" | "restricted"`)_: Which [`npm publish --access`](https://docs.npmjs.com/cli/commands/npm-publish#access) to release npm packages with (by default, `"public"`)
-- `--author` _(`string`)_: Username on npm to publish packages under (by default, an existing npm author, or the currently logged in npm user, or `owner.toLowerCase()`)
-- `--bin` _(`string`)_: Value to set in `package.json`'s `"bin"` property, per [FAQs > How can I use `bin`?](./FAQs.md#how-can-i-use-bin)
-- `--repository` _(`string`)_: Name for the new repository (by default, the same as `--directory`)
-- `--email` _(`string`)_: Email address to be listed as the point of contact in docs and packages (e.g. `example@joshuakgoldberg.com`)
-- `--funding` _(`string`)_: GitHub organization or username to mention in `funding.yml` (by default, `owner`)
-- `--keywords` _(`string[]`)_: Any number of keywords to include in `package.json` (by default, none)
-  - This can be specified any number of times, like `--keywords apple --keywords "banana cherry"`
-- `--title` _(`string`)_: 'Title Case' title for the repository (by default, based on the repository name)
-
-For example, customizing the npm author and funding source:
-
-```shell
-npx create-typescript-app --author my-npm-username --funding MyGitHubOrganization
-```
-
-## Block Exclusions
-
-Per [Bingo > Stratum > Configurations > `blocks`](https://www.create.bingo/engines/stratum/details/configurations#blocks), individual Blocks may be excluded from running.
-For example, initializing with all tooling except for Renovate:
-
-```shell
-npx create-typescript-app --exclude-renovate
-```
-
-See [Blocks.md](./Blocks.md) for the list of blocks and their corresponding presets.
diff --git a/docs/Setup.md b/docs/Setup.md
index ae36930..c18d177 100644
--- a/docs/Setup.md
+++ b/docs/Setup.md
@@ -29,7 +29,7 @@ Hooray! 🥳
 ## Options
 
 You can customize which pieces of tooling are provided and the options they're created with.
-See [Options.md](./Options.md).
+See [CLI.md](./CLI.md).
 
 For example, skipping the _"This package was templated with..."_ block:
 
diff --git a/docs/Transition.md b/docs/Transition.md
index fc6e8c1..97e69e8 100644
--- a/docs/Transition.md
+++ b/docs/Transition.md
@@ -38,10 +38,10 @@ Hooray! 🥳
 > You'll want to review each of the changes.
 > There will almost certainly be some incorrect changes you'll need to fix.
 
-## Options
+## CLI Options
 
 You can customize which pieces of tooling are provided and the options they're created with.
-See [Options.md](./Options.md).
+See [CLI.md](./CLI.md).
 
 For example, skipping the _"This package was templated with..."_ block:
 
diff --git a/docs/UseThisTemplate.md b/docs/UseThisTemplate.md
index 28f8975..9395a48 100644
--- a/docs/UseThisTemplate.md
+++ b/docs/UseThisTemplate.md
@@ -21,10 +21,10 @@ You'll then need to manually go through the following two steps to set up toolin
 Your new repository will then be ready for development!
 Hooray! 🥳
 
-## Options
+## CLI Options
 
 You can customize which pieces of tooling are provided and the options they're created with.
-See [Options.md](./Options.md).
+See [CLI.md](./CLI.md).
 
 For example, skipping the _"This package was templated with..."_ block:
 
diff --git a/eslint.config.js b/eslint.config.js
index 00728aa..f191231 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -77,7 +77,11 @@ export default tseslint.config(
 			vitest: { typecheck: true },
 		},
 	},
-	{ extends: [tseslint.configs.disableTypeChecked], files: ["**/*.md/*.ts"] },
+	{
+		extends: [tseslint.configs.disableTypeChecked],
+		files: ["**/*.md/*.ts"],
+		rules: { "n/no-missing-import": "off" },
+	},
 	{
 		extends: [vitest.configs.recommended],
 		files: ["**/*.test.*"],
diff --git a/src/base.ts b/src/base.ts
index 26b5eef..29abf96 100644
--- a/src/base.ts
+++ b/src/base.ts
@@ -119,7 +119,7 @@ export const base = createBase({
 			})
 			.optional()
 			.describe(
-				"local image file in the repository to display near the top of the README.md",
+				"local image file and alt text to display near the top of the README.md",
 			),
 		node: z
 			.object({
@@ -127,10 +127,8 @@ export const base = createBase({
 				pinned: z.string().optional(),
 			})
 			.optional()
-			.describe("node.js engine version(s) to pin and require a minimum of"),
-		owner: z
-			.string()
-			.describe("GitHub organization or user the repository is underneath"),
+			.describe("Node.js engine version(s) to pin and require a minimum of"),
+		owner: z.string().describe("organization or user owning the repository"),
 		packageData: z
 			.object({
 				dependencies: z.record(z.string(), z.string()).optional(),
@@ -154,7 +152,7 @@ export const base = createBase({
 		usage: z
 			.string()
 			.optional()
-			.describe("markdown docs to put in README.md under the ## Usage heading"),
+			.describe("Markdown docs to put in README.md under the ## Usage heading"),
 		version: z
 			.string()
 			.optional()
diff --git a/src/blocks/blockESLintNode.ts b/src/blocks/blockESLintNode.ts
index 9a2fcbc..d0a4c72 100644
--- a/src/blocks/blockESLintNode.ts
+++ b/src/blocks/blockESLintNode.ts
@@ -5,7 +5,7 @@ export const blockESLintNode = base.createBlock({
 	about: {
 		name: "ESLint Node Plugin",
 	},
-	produce({ options }) {
+	produce() {
 		return {
 			addons: [
 				blockESLint({
@@ -14,14 +14,7 @@ export const blockESLintNode = base.createBlock({
 						{
 							extends: ["tseslint.configs.disableTypeChecked"],
 							files: ["**/*.md/*.ts"],
-							...(options.usage?.includes(`from "${options.repository}`) && {
-								rules: {
-									"n/no-missing-import": [
-										"error",
-										{ allowModules: [options.repository] },
-									],
-								},
-							}),
+							rules: { "n/no-missing-import": "off" },
 						},
 					],
 					imports: [{ source: "eslint-plugin-n", specifier: "n" }],


Test patch:
diff --git a/src/blocks/blockESLintNode.test.ts b/src/blocks/blockESLintNode.test.ts
index 10a4d9b..8410842 100644
--- a/src/blocks/blockESLintNode.test.ts
+++ b/src/blocks/blockESLintNode.test.ts
@@ -9,52 +9,9 @@ vi.mock("../utils/resolveBin.js", () => ({
 }));
 
 describe("blockESLintNode", () => {
-	test("when options.usage does not have a repository import", () => {
+	test("production", () => {
 		const creation = testBlock(blockESLintNode, {
-			options: { ...optionsBase, usage: `...` },
-		});
-
-		expect(creation).toMatchInlineSnapshot(`
-			{
-			  "addons": [
-			    {
-			      "addons": {
-			        "extensions": [
-			          "n.configs["flat/recommended"]",
-			          {
-			            "extends": [
-			              "tseslint.configs.disableTypeChecked",
-			            ],
-			            "files": [
-			              "**/*.md/*.ts",
-			            ],
-			          },
-			        ],
-			        "imports": [
-			          {
-			            "source": "eslint-plugin-n",
-			            "specifier": "n",
-			          },
-			        ],
-			      },
-			      "block": [Function],
-			    },
-			  ],
-			}
-		`);
-	});
-
-	test("when options.usage does have a repository import", () => {
-		const creation = testBlock(blockESLintNode, {
-			options: {
-				...optionsBase,
-				usage: `\`\`\`ts
-import { greet } from "${optionsBase.repository}";
-
-greet();
-\`\`\`
-				`,
-			},
+			options: optionsBase,
 		});
 
 		expect(creation).toMatchInlineSnapshot(`
@@ -72,14 +29,7 @@ greet();
 			              "**/*.md/*.ts",
 			            ],
 			            "rules": {
-			              "n/no-missing-import": [
-			                "error",
-			                {
-			                  "allowModules": [
-			                    "test-repository",
-			                  ],
-			                },
-			              ],
+			              "n/no-missing-import": "off",
 			            },
 			          },
 			        ],
diff --git a/src/docs.test.ts b/src/docsBlocks.test.ts
similarity index 100%
rename from src/docs.test.ts
rename to src/docsBlocks.test.ts
diff --git a/src/docsOptions.test.ts b/src/docsOptions.test.ts
new file mode 100644
index 0000000..7b89683
--- /dev/null
+++ b/src/docsOptions.test.ts
@@ -0,0 +1,45 @@
+import * as fs from "node:fs/promises";
+import { describe, expect, it } from "vitest";
+
+import { base } from "./index.js";
+
+// This test ensures all options are mentioned in either:
+// - docs/CLI.md: for options that can be used on the command line
+// - docs/Configuration Files.md: for options that can be used in a config file
+//
+// If this fails, it's likely due to adding, removing, or renaming an option.
+// You may need to manually change the docs to match those changes.
+//
+// For example, if you add an `example: z.boolean().optional` option to Base,
+// you'll need to add a row to docs/CLI.md like:
+//
+// ```md
+// | `--example` | `boolean` | same description from base.ts | `false` |
+// ```
+describe("Docs: Options", () => {
+	it("includes mentions of all options from the Base", async () => {
+		const existingOptions = new Set(
+			(
+				await Promise.all([
+					splitFileIntoOptions("docs/CLI.md"),
+					splitFileIntoOptions("docs/Configuration Files.md"),
+				])
+			).flat(),
+		);
+
+		const missingOptions = Object.keys(base.options).filter(
+			(key) => !existingOptions.has(key),
+		);
+
+		expect(missingOptions).toEqual([]);
+	});
+});
+
+async function splitFileIntoOptions(filePath: string) {
+	const text = (await fs.readFile(filePath)).toString();
+
+	return text
+		.split(/[\r\n]+/)
+		.map((line) => /`(?:--)?(\w+)` /.exec(line)?.[1])
+		.filter((line) => typeof line === "string");
+}
diff --git a/src/integration.test.ts b/src/integration.test.ts
index da900a4..78911bf 100644
--- a/src/integration.test.ts
+++ b/src/integration.test.ts
@@ -52,11 +52,12 @@ test("Producing the everything preset matches the files in this repository", asy
 					words: [
 						"Anson",
 						"apexskier",
+						"attw",
 						"dbaeumer",
+						"infile",
 						"joshuakgoldberg",
 						"markdownlintignore",
 						"mtfoley",
-						"infile",
 						"npmjs",
 					],
 				}),