Harness DX
Audit developer experience artifacts -- README quality, API documentation coverage, getting-started guides, and example code validation. Produces a structured DX scorecard with specific improvements and scaffolds missing documentation.
When to Use
- When preparing a library, SDK, or open-source project for release and developer adoption matters
- When reviewing a PR that changes public API surface and documentation should match
- When onboarding friction is high and you need to identify where developers get stuck
- NOT for internal architecture documentation (use harness-docs-pipeline)
- NOT for user-facing product copy (use harness-ux-copy)
- NOT for API design decisions like REST vs GraphQL (use harness-api-design)
Process
Phase 1: AUDIT -- Evaluate Documentation Quality
Resolve project root. Use provided path or cwd.
Locate documentation artifacts. Search for:
- README files:
README.md, README.rst, readme.md
- Getting started:
GETTING_STARTED.md, QUICKSTART.md, docs/getting-started.md
- API docs:
docs/api/, API.md, generated docs in docs/, site/
- Examples:
examples/, demos/, samples/, code blocks in README
- Changelog:
CHANGELOG.md, CHANGES.md, HISTORY.md
- Contributing:
CONTRIBUTING.md, .github/CONTRIBUTING.md
Score README completeness. Check for the presence and quality of each section:
- Title and description (what is this project?) -- 0-2 points
- Installation/setup (how do I get it?) -- 0-3 points
- Quick example (show me it working in under 30 seconds) -- 0-3 points
- API reference or link (where is the full documentation?) -- 0-2 points
- Contributing guide or link -- 0-1 point
- License -- 0-1 point
- Total: score out of 12, grade A (10+), B (7-9), C (4-6), D (0-3)
Evaluate installation instructions. Check:
- Are all package managers covered? (npm, yarn, pnpm for JS; pip, poetry for Python; cargo for Rust)
- Are prerequisites listed? (Node version, OS requirements, system dependencies)
- Is there a one-liner to get started? (copy-paste friendly)
- Do the instructions work on all documented platforms?
Assess API documentation coverage. For every exported function, class, or endpoint:
- Is it documented?
- Does it have parameter descriptions?
- Does it have a usage example?
- Does it have return type documentation?
- Calculate coverage percentage:
documented / total * 100
Check for time-to-hello-world. Estimate the number of steps from git clone to seeing the project work. Fewer than 5 steps is good. More than 10 is a problem.
Phase 2: EXTRACT -- Identify and Validate Examples
Extract code examples from documentation. Parse all markdown files for fenced code blocks with language annotations. Track:
- File location and line number
- Language (js, ts, python, bash, etc.)
- Whether it is a complete runnable example or a fragment
Extract standalone examples. Scan examples/, demos/, samples/ for:
- Example projects with their own package.json/requirements.txt
- Single-file examples
- Example README files explaining what each example demonstrates
Validate example syntax. For each extracted code example:
- Check for syntax errors (missing imports, unclosed brackets, invalid syntax)
- Check for references to APIs that no longer exist (stale examples)
- Check that import paths match the actual package name and exports
Run executable examples. When --validate-examples is set:
- For JavaScript/TypeScript: attempt
node or tsx execution
- For Python: attempt
python execution
- For shell commands: validate they reference real scripts and flags
- Record pass/fail for each example with error output
Check example freshness. Compare examples against the current API surface:
- Are there deprecated APIs used in examples?
- Are there new APIs with no examples?
- When was each example file last modified relative to the source it demonstrates?
Build coverage map. Map examples to the APIs they demonstrate. Identify APIs with zero examples (documentation gaps).
Phase 3: SCAFFOLD -- Generate Missing Documentation
Generate README sections. For any missing README section identified in Phase 1:
- Draft installation instructions by reading
package.json, setup.py, Cargo.toml, or equivalent
- Draft a quick-start example using the project's main export
- Draft a features list from the project's exports and test descriptions
Generate API documentation stubs. For undocumented exports:
- Extract function signatures, parameter types, and return types from source
- Generate JSDoc/docstring stubs with parameter descriptions inferred from type names
- Include a usage example skeleton derived from test files when available
Generate example files. For APIs with no examples:
- Create a minimal working example in
examples/
- Include comments explaining each step
- Ensure the example is self-contained (includes imports, setup, and cleanup)
Generate getting-started guide. If no quickstart exists:
- Write a step-by-step guide from installation through first meaningful use
- Include expected output at each step
- Target under 5 minutes to complete
Propose documentation structure. If documentation is scattered or missing:
- Recommend a
docs/ directory structure
- Map content to sections (guides, reference, examples, tutorials)
- Suggest a documentation site generator if the project is large enough (Docusaurus, MkDocs, mdBook)
Phase 4: VALIDATE -- Verify Documentation Accuracy
Check link integrity. Verify all links in documentation:
- Internal links: do referenced files and anchors exist?
- External links: are they well-formed? (do not make HTTP requests)
- Badge URLs: are shields.io and similar badge URLs using the correct repo/package name?
Check version consistency. Verify documentation matches the current version:
- Does the installation section reference the correct package version?
- Do API examples use the current function signatures?
- Is the changelog up to date with the latest release?
Check cross-references. Verify README links to detailed docs, and detailed docs link back to the README and to each other where appropriate.
Output DX scorecard. Present the complete audit results:
DX Scorecard: [GRADE]
README: [score]/12 ([grade])
API Coverage: [N]% ([documented]/[total] exports)
Examples: [working]/[total] passing
Time to Hello World: ~[N] steps
Links: [valid]/[total] verified
GAPS:
- Missing: getting-started guide
- Missing: 12 undocumented exports
- Broken: examples/advanced.ts references removed API
GENERATED:
- docs/getting-started.md (draft)
- 4 API documentation stubs added
- examples/basic-usage.ts created
Verify scaffolded content compiles. If documentation was generated, verify:
- Generated code examples have valid syntax
- Generated markdown renders correctly (no broken formatting)
- Generated files are placed in the correct directories
Harness Integration
harness skill run harness-dx -- Primary command for running the DX audit.
harness validate -- Run after scaffolding documentation to verify project health.
Glob -- Used to locate README files, documentation directories, example folders, and API docs.
Grep -- Used to extract exported symbols, find documentation comments, and locate code examples in markdown.
Read -- Used to read documentation files, package manifests, and source files for API extraction.
Write -- Used to scaffold missing documentation, generate example files, and create getting-started guides.
Bash -- Used to run example validation, check link targets, and execute code snippets.
emit_interaction -- Used to present the DX scorecard and request confirmation before generating scaffolded files.
Success Criteria
- README is scored against all 6 completeness criteria with specific gap identification
- API documentation coverage percentage is calculated against actual exported surface
- All code examples in documentation are syntax-checked
- Executable examples pass when
--validate-examples is set
- Missing documentation is scaffolded with accurate, runnable content
- DX scorecard provides an at-a-glance quality grade
- Time-to-hello-world is estimated and actionable if too high
Examples
Example: Node.js SDK with Sparse Documentation
Phase 1: AUDIT
README score: 5/12 (C)
Present: title, description, license
Missing: installation, quick example, API reference link, contributing
API coverage: 23% (7/30 exports documented)
Time to hello world: ~14 steps (too many, target: <5)
Phase 2: EXTRACT
Code examples found: 3 (all in README)
examples/ directory: empty
Validation: 2/3 examples pass syntax check
Broken: README line 45 references `sdk.connect()` -- renamed to `sdk.init()` in v2.0
Phase 3: SCAFFOLD
Generated: docs/getting-started.md (5-step quickstart)
Generated: examples/basic-usage.ts (demonstrates init, query, cleanup)
Generated: 23 JSDoc stubs from TypeScript signatures
README patches: added installation section, updated broken example
Phase 4: VALIDATE
Links: 8/10 valid (2 broken anchors in README)
Generated examples: syntax valid
DX Scorecard: C -> B (projected after applying changes)
Example: Python Library with Comprehensive Docs (Sphinx)
Phase 1: AUDIT
README score: 11/12 (A)
Missing only: contributing guide link
API coverage: 89% (142/160 functions documented)
Sphinx docs at docs/_build/html: present, 45 pages
Time to hello world: ~4 steps (good)
Phase 2: EXTRACT
Code examples: 28 in docs, 12 in examples/
Validation: 37/40 pass (3 use deprecated pandas.append)
Stale examples: 3 files last modified 8 months ago, source changed since
Phase 3: SCAFFOLD
Generated: 18 docstring stubs for undocumented functions
Updated: 3 stale examples to use pandas.concat
Added: CONTRIBUTING.md link to README
Phase 4: VALIDATE
Links: 52/52 valid
DX Scorecard: A (maintained, minor freshness issues resolved)
Example: Rust CLI Tool Missing Getting Started
Phase 1: AUDIT
README score: 7/12 (B)
Present: title, description, installation (cargo install), license, API link
Missing: quick example showing actual CLI usage, contributing
API coverage: N/A (CLI tool, not library)
CLI help text: present via clap derive
Time to hello world: ~6 steps
Phase 2: EXTRACT
Code examples: 2 in README (both installation commands)
examples/ directory: 1 example config file, no runnable examples
Missing: actual usage examples showing command output
Phase 3: SCAFFOLD
Generated: docs/getting-started.md with:
1. cargo install myctl
2. myctl init
3. myctl run --config example.toml
(with expected output at each step)
Generated: examples/basic-config.toml with annotated comments
Generated: README quick-example section with terminal output
Phase 4: VALIDATE
CLI help flags match documented flags: YES
Config example matches current schema: YES
DX Scorecard: B -> A (projected after applying changes)
Rationalizations to Reject
| Rationalization |
Reality |
| "The README has an installation section but it only covers npm — yarn and pnpm users can figure it out. I'll mark installation as complete." |
Installation instructions must cover all package managers the project supports. If yarn.lock or pnpm-lock.yaml exists alongside package-lock.json, all three installers must be documented. Partial coverage is scored as partial, not complete. |
"This code example in the README uses the old sdk.connect() API — but it still parses syntactically, so it passes the syntax check." |
Stale API references are broken examples regardless of syntax validity. A syntactically valid example that calls a renamed or removed function fails the freshness check and must be flagged as broken in the scorecard. |
"The API function's behavior is complex, but I can infer what it does from the name parseAndValidate — I'll write the docstring stub based on that." |
Documentation must be derived from actual source code: type signatures, test files, and existing docs. Inferring behavior from function names produces fabricated documentation. Flag functions that cannot be documented from source as requiring developer-written docs. |
| "The getting-started guide already exists in the wiki — it's not in the repo, but I'll mark the quickstart as present." |
Documentation must be locatable from the repository root. A wiki link from the README satisfies the API reference link criterion only if the link is explicit. A guide that requires knowing where the wiki is does not meet the discoverability requirement. |
| "There are 18 undocumented exports — I'll generate all 18 JSDoc stubs and commit them without showing the user first." |
Scaffolded documentation must be presented for review before being written. Generated stubs may contain inaccurate parameter descriptions or wrong return type assumptions. Use emit_interaction to present scaffolded content and wait for approval. |
Gates
- No scaffolding without human confirmation. Generated documentation is always presented as a draft for review. Do not commit generated files automatically. Use
emit_interaction to present scaffolded content and wait for approval.
- No overwriting existing documentation. If a README section already exists, do not replace it. Only fill gaps. Existing content may have been carefully written and should not be clobbered.
- No fabricating API behavior. Generated documentation and examples must be derived from actual source code (type signatures, test files, existing docs). Do not guess what an undocumented function does based on its name alone.
- No marking stale examples as passing. If an example references a renamed or removed API, it is broken regardless of whether it happens to still parse syntactically.
Escalation
- When API documentation requires domain expertise: If function behavior cannot be inferred from types and tests alone, flag it: "These 5 functions need developer-written documentation -- their behavior is domain-specific and cannot be reliably inferred."
- When examples require external services: If running an example requires a database, API key, or external service, flag the dependency rather than failing: "This example requires a running PostgreSQL instance. Consider adding a Docker Compose file for example dependencies."
- When documentation tooling is broken: If Sphinx, TypeDoc, or other doc generators fail to build, report the error but do not attempt to fix the toolchain. That is outside this skill's scope.
- When README and API docs contradict each other: Flag the contradiction with both sources quoted. Do not choose which one is correct -- the developer must resolve the conflict: "README says
init() accepts a string, but the TypeDoc shows it accepts InitConfig. Which is current?"
1---2name: harness-dx3description: Harness DX4---5# Harness DX67> Audit developer experience artifacts -- README quality, API documentation coverage, getting-started guides, and example code validation. Produces a structured DX scorecard with specific improvements and scaffolds missing documentation.89## When to Use1011- When preparing a library, SDK, or open-source project for release and developer adoption matters12- When reviewing a PR that changes public API surface and documentation should match13- When onboarding friction is high and you need to identify where developers get stuck14- NOT for internal architecture documentation (use harness-docs-pipeline)15- NOT for user-facing product copy (use harness-ux-copy)16- NOT for API design decisions like REST vs GraphQL (use harness-api-design)1718## Process1920### Phase 1: AUDIT -- Evaluate Documentation Quality21221. **Resolve project root.** Use provided path or cwd.23242. **Locate documentation artifacts.** Search for:25 - README files: `README.md`, `README.rst`, `readme.md`26 - Getting started: `GETTING_STARTED.md`, `QUICKSTART.md`, `docs/getting-started.md`27 - API docs: `docs/api/`, `API.md`, generated docs in `docs/`, `site/`28 - Examples: `examples/`, `demos/`, `samples/`, code blocks in README29 - Changelog: `CHANGELOG.md`, `CHANGES.md`, `HISTORY.md`30 - Contributing: `CONTRIBUTING.md`, `.github/CONTRIBUTING.md`31323. **Score README completeness.** Check for the presence and quality of each section:33 - **Title and description** (what is this project?) -- 0-2 points34 - **Installation/setup** (how do I get it?) -- 0-3 points35 - **Quick example** (show me it working in under 30 seconds) -- 0-3 points36 - **API reference or link** (where is the full documentation?) -- 0-2 points37 - **Contributing guide or link** -- 0-1 point38 - **License** -- 0-1 point39 - Total: score out of 12, grade A (10+), B (7-9), C (4-6), D (0-3)40414. **Evaluate installation instructions.** Check:42 - Are all package managers covered? (npm, yarn, pnpm for JS; pip, poetry for Python; cargo for Rust)43 - Are prerequisites listed? (Node version, OS requirements, system dependencies)44 - Is there a one-liner to get started? (copy-paste friendly)45 - Do the instructions work on all documented platforms?46475. **Assess API documentation coverage.** For every exported function, class, or endpoint:48 - Is it documented?49 - Does it have parameter descriptions?50 - Does it have a usage example?51 - Does it have return type documentation?52 - Calculate coverage percentage: `documented / total * 100`53546. **Check for time-to-hello-world.** Estimate the number of steps from `git clone` to seeing the project work. Fewer than 5 steps is good. More than 10 is a problem.5556---5758### Phase 2: EXTRACT -- Identify and Validate Examples59601. **Extract code examples from documentation.** Parse all markdown files for fenced code blocks with language annotations. Track:61 - File location and line number62 - Language (js, ts, python, bash, etc.)63 - Whether it is a complete runnable example or a fragment64652. **Extract standalone examples.** Scan `examples/`, `demos/`, `samples/` for:66 - Example projects with their own package.json/requirements.txt67 - Single-file examples68 - Example README files explaining what each example demonstrates69703. **Validate example syntax.** For each extracted code example:71 - Check for syntax errors (missing imports, unclosed brackets, invalid syntax)72 - Check for references to APIs that no longer exist (stale examples)73 - Check that import paths match the actual package name and exports74754. **Run executable examples.** When `--validate-examples` is set:76 - For JavaScript/TypeScript: attempt `node` or `tsx` execution77 - For Python: attempt `python` execution78 - For shell commands: validate they reference real scripts and flags79 - Record pass/fail for each example with error output80815. **Check example freshness.** Compare examples against the current API surface:82 - Are there deprecated APIs used in examples?83 - Are there new APIs with no examples?84 - When was each example file last modified relative to the source it demonstrates?85866. **Build coverage map.** Map examples to the APIs they demonstrate. Identify APIs with zero examples (documentation gaps).8788---8990### Phase 3: SCAFFOLD -- Generate Missing Documentation91921. **Generate README sections.** For any missing README section identified in Phase 1:93 - Draft installation instructions by reading `package.json`, `setup.py`, `Cargo.toml`, or equivalent94 - Draft a quick-start example using the project's main export95 - Draft a features list from the project's exports and test descriptions96972. **Generate API documentation stubs.** For undocumented exports:98 - Extract function signatures, parameter types, and return types from source99 - Generate JSDoc/docstring stubs with parameter descriptions inferred from type names100 - Include a usage example skeleton derived from test files when available1011023. **Generate example files.** For APIs with no examples:103 - Create a minimal working example in `examples/`104 - Include comments explaining each step105 - Ensure the example is self-contained (includes imports, setup, and cleanup)1061074. **Generate getting-started guide.** If no quickstart exists:108 - Write a step-by-step guide from installation through first meaningful use109 - Include expected output at each step110 - Target under 5 minutes to complete1111125. **Propose documentation structure.** If documentation is scattered or missing:113 - Recommend a `docs/` directory structure114 - Map content to sections (guides, reference, examples, tutorials)115 - Suggest a documentation site generator if the project is large enough (Docusaurus, MkDocs, mdBook)116117---118119### Phase 4: VALIDATE -- Verify Documentation Accuracy1201211. **Check link integrity.** Verify all links in documentation:122 - Internal links: do referenced files and anchors exist?123 - External links: are they well-formed? (do not make HTTP requests)124 - Badge URLs: are shields.io and similar badge URLs using the correct repo/package name?1251262. **Check version consistency.** Verify documentation matches the current version:127 - Does the installation section reference the correct package version?128 - Do API examples use the current function signatures?129 - Is the changelog up to date with the latest release?1301313. **Check cross-references.** Verify README links to detailed docs, and detailed docs link back to the README and to each other where appropriate.1321334. **Output DX scorecard.** Present the complete audit results:134135 ```136 DX Scorecard: [GRADE]137 README: [score]/12 ([grade])138 API Coverage: [N]% ([documented]/[total] exports)139 Examples: [working]/[total] passing140 Time to Hello World: ~[N] steps141 Links: [valid]/[total] verified142143 GAPS:144 - Missing: getting-started guide145 - Missing: 12 undocumented exports146 - Broken: examples/advanced.ts references removed API147148 GENERATED:149 - docs/getting-started.md (draft)150 - 4 API documentation stubs added151 - examples/basic-usage.ts created152 ```1531545. **Verify scaffolded content compiles.** If documentation was generated, verify:155 - Generated code examples have valid syntax156 - Generated markdown renders correctly (no broken formatting)157 - Generated files are placed in the correct directories158159---160161## Harness Integration162163- **`harness skill run harness-dx`** -- Primary command for running the DX audit.164- **`harness validate`** -- Run after scaffolding documentation to verify project health.165- **`Glob`** -- Used to locate README files, documentation directories, example folders, and API docs.166- **`Grep`** -- Used to extract exported symbols, find documentation comments, and locate code examples in markdown.167- **`Read`** -- Used to read documentation files, package manifests, and source files for API extraction.168- **`Write`** -- Used to scaffold missing documentation, generate example files, and create getting-started guides.169- **`Bash`** -- Used to run example validation, check link targets, and execute code snippets.170- **`emit_interaction`** -- Used to present the DX scorecard and request confirmation before generating scaffolded files.171172## Success Criteria173174- README is scored against all 6 completeness criteria with specific gap identification175- API documentation coverage percentage is calculated against actual exported surface176- All code examples in documentation are syntax-checked177- Executable examples pass when `--validate-examples` is set178- Missing documentation is scaffolded with accurate, runnable content179- DX scorecard provides an at-a-glance quality grade180- Time-to-hello-world is estimated and actionable if too high181182## Examples183184### Example: Node.js SDK with Sparse Documentation185186```187Phase 1: AUDIT188 README score: 5/12 (C)189 Present: title, description, license190 Missing: installation, quick example, API reference link, contributing191 API coverage: 23% (7/30 exports documented)192 Time to hello world: ~14 steps (too many, target: <5)193194Phase 2: EXTRACT195 Code examples found: 3 (all in README)196 examples/ directory: empty197 Validation: 2/3 examples pass syntax check198 Broken: README line 45 references `sdk.connect()` -- renamed to `sdk.init()` in v2.0199200Phase 3: SCAFFOLD201 Generated: docs/getting-started.md (5-step quickstart)202 Generated: examples/basic-usage.ts (demonstrates init, query, cleanup)203 Generated: 23 JSDoc stubs from TypeScript signatures204 README patches: added installation section, updated broken example205206Phase 4: VALIDATE207 Links: 8/10 valid (2 broken anchors in README)208 Generated examples: syntax valid209 DX Scorecard: C -> B (projected after applying changes)210```211212### Example: Python Library with Comprehensive Docs (Sphinx)213214```215Phase 1: AUDIT216 README score: 11/12 (A)217 Missing only: contributing guide link218 API coverage: 89% (142/160 functions documented)219 Sphinx docs at docs/_build/html: present, 45 pages220 Time to hello world: ~4 steps (good)221222Phase 2: EXTRACT223 Code examples: 28 in docs, 12 in examples/224 Validation: 37/40 pass (3 use deprecated pandas.append)225 Stale examples: 3 files last modified 8 months ago, source changed since226227Phase 3: SCAFFOLD228 Generated: 18 docstring stubs for undocumented functions229 Updated: 3 stale examples to use pandas.concat230 Added: CONTRIBUTING.md link to README231232Phase 4: VALIDATE233 Links: 52/52 valid234 DX Scorecard: A (maintained, minor freshness issues resolved)235```236237### Example: Rust CLI Tool Missing Getting Started238239```240Phase 1: AUDIT241 README score: 7/12 (B)242 Present: title, description, installation (cargo install), license, API link243 Missing: quick example showing actual CLI usage, contributing244 API coverage: N/A (CLI tool, not library)245 CLI help text: present via clap derive246 Time to hello world: ~6 steps247248Phase 2: EXTRACT249 Code examples: 2 in README (both installation commands)250 examples/ directory: 1 example config file, no runnable examples251 Missing: actual usage examples showing command output252253Phase 3: SCAFFOLD254 Generated: docs/getting-started.md with:255 1. cargo install myctl256 2. myctl init257 3. myctl run --config example.toml258 (with expected output at each step)259 Generated: examples/basic-config.toml with annotated comments260 Generated: README quick-example section with terminal output261262Phase 4: VALIDATE263 CLI help flags match documented flags: YES264 Config example matches current schema: YES265 DX Scorecard: B -> A (projected after applying changes)266```267268## Rationalizations to Reject269270| Rationalization | Reality |271| ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |272| "The README has an installation section but it only covers npm — yarn and pnpm users can figure it out. I'll mark installation as complete." | Installation instructions must cover all package managers the project supports. If `yarn.lock` or `pnpm-lock.yaml` exists alongside `package-lock.json`, all three installers must be documented. Partial coverage is scored as partial, not complete. |273| "This code example in the README uses the old `sdk.connect()` API — but it still parses syntactically, so it passes the syntax check." | Stale API references are broken examples regardless of syntax validity. A syntactically valid example that calls a renamed or removed function fails the freshness check and must be flagged as broken in the scorecard. |274| "The API function's behavior is complex, but I can infer what it does from the name `parseAndValidate` — I'll write the docstring stub based on that." | Documentation must be derived from actual source code: type signatures, test files, and existing docs. Inferring behavior from function names produces fabricated documentation. Flag functions that cannot be documented from source as requiring developer-written docs. |275| "The getting-started guide already exists in the wiki — it's not in the repo, but I'll mark the quickstart as present." | Documentation must be locatable from the repository root. A wiki link from the README satisfies the API reference link criterion only if the link is explicit. A guide that requires knowing where the wiki is does not meet the discoverability requirement. |276| "There are 18 undocumented exports — I'll generate all 18 JSDoc stubs and commit them without showing the user first." | Scaffolded documentation must be presented for review before being written. Generated stubs may contain inaccurate parameter descriptions or wrong return type assumptions. Use `emit_interaction` to present scaffolded content and wait for approval. |277278## Gates279280- **No scaffolding without human confirmation.** Generated documentation is always presented as a draft for review. Do not commit generated files automatically. Use `emit_interaction` to present scaffolded content and wait for approval.281- **No overwriting existing documentation.** If a README section already exists, do not replace it. Only fill gaps. Existing content may have been carefully written and should not be clobbered.282- **No fabricating API behavior.** Generated documentation and examples must be derived from actual source code (type signatures, test files, existing docs). Do not guess what an undocumented function does based on its name alone.283- **No marking stale examples as passing.** If an example references a renamed or removed API, it is broken regardless of whether it happens to still parse syntactically.284285## Escalation286287- **When API documentation requires domain expertise:** If function behavior cannot be inferred from types and tests alone, flag it: "These 5 functions need developer-written documentation -- their behavior is domain-specific and cannot be reliably inferred."288- **When examples require external services:** If running an example requires a database, API key, or external service, flag the dependency rather than failing: "This example requires a running PostgreSQL instance. Consider adding a Docker Compose file for example dependencies."289- **When documentation tooling is broken:** If Sphinx, TypeDoc, or other doc generators fail to build, report the error but do not attempt to fix the toolchain. That is outside this skill's scope.290- **When README and API docs contradict each other:** Flag the contradiction with both sources quoted. Do not choose which one is correct -- the developer must resolve the conflict: "README says `init()` accepts a string, but the TypeDoc shows it accepts `InitConfig`. Which is current?"