Addresses PR #85's outstanding review items after grilling the open
questions against ADR-0013/CONTEXT.md/ADR-0010:
Blocking fixes:
- vale-wrap.sh: replace json.dumps() escaping (which silently defeated
Vale's frontmatter scope on any description containing a quote,
backslash, or non-ASCII char — ~58% of the corpus) with a single-quoted
YAML scalar, substituting a Unicode right single quote for embedded
apostrophes rather than '' doubling (Vale's frontmatter scanner isn't a
full YAML parser and silently truncates on '' too).
- vale-wrap.sh: fix a blank-line-inside-a-folded-description truncation
bug via indentation-based, blank-line-tolerant body capture; narrow
flattening to `>`-style scalars only (`|` already works unflattened).
- skill-audit/agent-audit Step 1: make the vale-wrap.sh invocation
cwd-independent via git rev-parse --show-toplevel, fixing a bug where
no single cwd satisfied all three Step 1 commands.
- styles/Kyberforge/VagueQualifier.yml: prune 17 tokens verified
false-positive-dominated on this repo's own voice via a real corpus
sweep (obvious, clearly, usually, several, simple, easy, completely,
simply, tiny, etc.), keep 13 with real or unattested noise. Revert the
28 prose "fixes" those tokens drove across 14 skill files back to their
original, correct wording, including a functional regression to
caveman/SKILL.md's own filler-word list (a mention, not a use) — now
guarded with vale-off comments against recurrence.
Gaps:
- --minAlertLevel=warning on the pre-commit hook and Step 1 invocation
so warning-level rules actually surface, without collapsing the
FAIL/SUGGESTION severity mapping skill-audit/agent-audit rely on.
- vale-wrap.sh: fix --config=<path> equals-form, absolute-path silent
no-op, and a zero-file-argument stdin hang.
- Route vale-run and lint-runner through a documented wrapper script
when a target repo has one, instead of unconditionally recommending
bare `vale`.
- Wire Kyberforge.VagueQualifier/SentenceOpenerThereIs into skill-audit/
agent-audit's dimension-mapping prose (Body discipline).
- Add plugins/lint/sources.md provenance for lint-runner (ADR-0010).
- Sync both marketplace.json lint-entry descriptions with plugin.json.
- Retune skill-size-check.sh's MAX_WORDS 5000->2900 (measured ~1.6-1.7
tokens/word on this repo's corpus, the old value gated at ~8,500
tokens against a stated 5,000 ceiling); fix the >/>= line-count
boundary and wc -l undercount on files with no trailing newline.
- Document the vale binary as a Setup prerequisite in AGENTS.md.
- Fix SentenceOpenerThereIs's dead regex alternative and add a real
sentence-start anchor/scope.
- Fix a stale docs/research/docs/vale/ index pointer in kyberforge's
docs README (moved to plugins/lint/ in e1a5403).
- Rewrite ADR-0013's Consequences section past-tense to describe what
actually landed, and record the styles-portability limitation
(repo-root placement stays intentional; deferred to a separate
session per this PR's review).
Test coverage: 9 new vale-wrap.sh fixtures (quotes, backslash/unicode,
blank-line paragraphs, --config= form, zero-arg/absolute-path handling,
literal-block no-regression) and boundary-pair tests for
skill-size-check.sh's line/word ceilings.
bash tests/run-tests.sh: 9 scripts + 125 bats assertions, all passing.
scripts/check-manifests.sh and claude plugin validate --strict: clean.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MCQ648fLSFXPHGZdQ8gn58
104 lines
5.9 KiB
Markdown
104 lines
5.9 KiB
Markdown
---
|
||
name: write-docs
|
||
description: Write documentation for X, document this module, create docs for this feature. Use when the user wants to produce or update technical documentation derived from code, spec, or existing artifacts. Do NOT use when the user wants a PRD, ADR, decision doc, or skill file — those have dedicated skills.
|
||
version: "1.0"
|
||
updated: 2026-05-17
|
||
when: invoked by explicit trigger ("write docs for X", "document this module", "create docs for this feature") or implicit request to produce technical documentation from code or spec
|
||
metadata:
|
||
category: implement
|
||
source:
|
||
- repo: anthropics/skills
|
||
commit: f458cee31a7577a47ba0c9a101976fa599385174
|
||
files:
|
||
- skills/doc-coauthoring/SKILL.md # Reader Testing stage, surgical-edit constraint, gap-check step
|
||
updated: 2026-05-17
|
||
- repo: mattpocock/skills
|
||
commit: e74f0061bb67222181640effa98c675bdb2fdaa7
|
||
files:
|
||
- skills/productivity/write-a-skill/SKILL.md # trigger pattern, review checklist items
|
||
updated: 2026-05-17
|
||
- repo: bmad-code-org/BMAD-METHOD
|
||
commit: 71136bc6af77cbf507d3768494311d5b6ca95cc5
|
||
files:
|
||
- src/core-skills/bmad-advanced-elicitation/SKILL.md # confirmation gate before applying changes
|
||
updated: 2026-05-17
|
||
---
|
||
|
||
## Role
|
||
|
||
You are a technical writer that produces documentation by reading code and spec — you derive every claim from a source file or explicit user input and never invent behaviour.
|
||
|
||
## When to use / When not to use
|
||
|
||
**Use when:**
|
||
- User wants to document a module, class, function, feature, CLI flag, API endpoint, config file, or README section
|
||
- User says "write docs for X", "document this", "create docs for this feature", "write a README for this"
|
||
|
||
**Do not use when:**
|
||
- User wants a PRD, decision doc, or architecture proposal → `to-prd` or `grill-me`
|
||
- User wants to document a skill file (skill files are self-describing)
|
||
- User wants marketing or blog copy
|
||
- Documentation requires tacit organisational knowledge that cannot be read from code or spec
|
||
|
||
## Required inputs
|
||
|
||
- Specific file(s) or module(s) to document, or enough description to propose candidates
|
||
- Target audience: developer / user / contributor / internal
|
||
- Documentation type: reference, guide, README section, inline comment, changelog entry
|
||
|
||
## Constraints
|
||
|
||
- Every claim must be traceable to a source file line, spec section, or explicit user statement — never invent behaviour
|
||
- User must approve specific files before the skill reads them; skill may propose candidates but waits for approval
|
||
- Stage skipping is allowed only with an explicit user request and a one-sentence logged reason
|
||
- Show the full revised section before each confirmation gate — never gate on output the user has not seen
|
||
- Never reprint the whole document; all edits are surgical
|
||
- Produce a one-line delta summary after each refinement round
|
||
- Reader Testing sub-agent receives only the finished doc and the question list — no source files
|
||
- Write summary and overview sections last, after all detail sections are stable
|
||
|
||
## Process
|
||
|
||
1. **Identify scope.** User names specific files or sections. If not provided, propose candidates based on the description — wait for explicit approval before reading.
|
||
|
||
2. **Read and extract.** Read approved files. Extract: public API surface, described behaviour, visible constraints, non-obvious invariants. Note what the code does NOT explain (caller intent, error handling rationale, non-obvious side effects).
|
||
|
||
3. **Gap check.** Present extracted behaviour to the user. Ask them to fill only the gaps — what the code does not explain. Log any explicitly deferred gaps. If the user requests to skip this step, log the reason and proceed.
|
||
|
||
4. **Draft section by section.** For each section: state the proposed content and its source (code line / spec section / user input). Show; confirm before moving to the next section.
|
||
|
||
5. **Confirmation gate.** Before finalising any section, show the full revised section. Wait for explicit confirmation or correction — never apply changes the user has not seen.
|
||
|
||
6. **Delta summary.** After each round of revisions: "Round N: changed [sections], added [X], removed [Y]."
|
||
|
||
7. **Reader Testing.** Predict 5–10 questions a target reader would ask. Spawn a scoped sub-agent that receives only the finished doc and the questions — no source files. Report its answers. If any answers fail, loop back to step 4.
|
||
|
||
8. **Finalise.** Write summary and overview sections last. Prompt the user to review the complete document before committing.
|
||
|
||
## Output format
|
||
|
||
- Markdown artifact with section headers; produced one section at a time — never as a single large dump
|
||
- Delta summary after each refinement round: "Round N: [what changed]"
|
||
- Reader Testing report: numbered question list with sub-agent answers
|
||
- Final doc at the user-specified or conventionally appropriate path
|
||
|
||
## Failure handling
|
||
|
||
- Files not named and description too vague to propose candidates → ask for specific names before reading
|
||
- Stage skipped without a logged reason → flag and require the one-sentence log before continuing
|
||
- Code behaviour is undocumentable (internal implementation detail, no public spec) → note as out-of-scope in the doc; do not invent an explanation
|
||
- Reader Testing sub-agent fails on multiple questions → surface the failures, return to step 4; do not mark complete
|
||
- Requested output is a PRD, decision doc, or architecture proposal → redirect to `to-prd`, `grill-me`, or `grill-with-docs`
|
||
|
||
## Self-check
|
||
|
||
- [ ] All claims traceable to a source file or explicit user input
|
||
- [ ] No invented behaviour — unverifiable claims removed
|
||
- [ ] User approved specific files before reading
|
||
- [ ] Any stage skips logged with reason
|
||
- [ ] Full revised section shown before each confirmation gate
|
||
- [ ] Delta summary produced after each refinement round
|
||
- [ ] Reader Testing completed with scoped sub-agent (doc + questions only)
|
||
- [ ] Summary/overview written last
|
||
- [ ] User prompted to review before committing
|