Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .claude/skills/audit-docs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Act as a **Strictly Factual Technical Writer and Auditor**. Make the project's d

## Context resolution

Some agents resolve the references below automatically. Any agent that does not resolves each one itself, using the equivalent listed here, before starting. If a source is unavailable, say so in the output and continue with what is available.
Some agents resolve the references below automatically. Where yours does not, resolve each one yourself, using the equivalent listed here, before starting. If a source is unavailable, say so in the output and continue with what is available.

| Reference | What it refers to | Resolve it yourself with |
| -------------------- | --------------------------- | ----------------------------------------------------------------------- |
Expand Down Expand Up @@ -109,7 +109,7 @@ Every statement must be grounded in code you have **opened and read in full duri

**Do not infer behaviour** from a name, type, file location, config key, comment, or familiar pattern. Read the body: `deleteUser()` might only set a flag, a `utils/` folder might hold core logic, and a comment can be stale (when code and comment conflict, the code wins).

**The "prove it" test:** before writing any statement, name the file, the symbol, and a short string copied character for character from the source that shows the behaviour. If you cannot, do not write it. **A line number is not proof.** It cannot be checked without opening the file, it drifts on the next edit, and it can be produced without reading anything; copying a string requires retrieval. The quote is for your own verification and does not go on the page: published prose cites the file and symbol through a link and nothing more. Where the proving string holds a credential value, such as a token, a password, an API key, a private key, or a session identifier, record the string with that value replaced by `[REDACTED]`; a redacted quote still proves the claim, and no credential value reaches a note, a report, or anything published.
**The "prove it" test:** before writing any statement, name the file, the symbol, and a short string from the source that shows the behaviour, copied as it reads there except for any credential value in it, such as a token, a password, an API key, a private key, or a session identifier, which is replaced by `[REDACTED]` as you record it. A redacted string still proves the claim, and no credential value reaches a note, a report, or anything published. If you cannot produce such a string at all, do not write the statement. **A line number is not proof.** It cannot be checked without opening the file, it drifts on the next edit, and it can be produced without reading anything; copying a string requires retrieval. The quote is for your own verification and does not go on the page: published prose cites the file and symbol through a link and nothing more.

- ❌ "The system validates user input." (assumption)
- ❌ "After reading [`validation.ts`](../src/validation.ts) lines 45-67, user input is validated against the schema." (a line range is not evidence)
Expand Down Expand Up @@ -187,6 +187,7 @@ Write as a careful human technical writer: formal and neutral, never robotic. Th

### Formatting

- **A table's structure is load-bearing, and an edit inside a cell is where it breaks.** Every row carries the same number of `|`-separated cells as the header and the delimiter row beneath it. A cell holds one line: never a newline, a bullet list, or a fenced block. A literal `|` inside a cell is written `\|`, or the column count silently changes. Changing the text in a cell does not license re-flowing, re-padding, or re-wrapping the table around it, so leave a cell long rather than breaking it across lines. Restructuring a table, or turning one into a list, is a deliberate change you report, never a side effect of a wording edit. After editing any table, re-read it whole and count the cells in every row against the header.
- Always use relative links, including `../` paths, for GitHub compatibility. Some style guides prefer repository-root-absolute paths; those do not resolve on GitHub, which reads them against the site root. New directories must have an entry-point file, named as the project's existing directories name theirs.
- A document opens with a single H1 named for its file, then a one to three sentence introduction written for a reader who does not yet know the subject or why they would use it, then H2s. Later headings are unique and fully descriptive, sub-sections included ("Retry backoff limits", not "Limits"), because anchors are generated from heading text and other documents link to them. Use sentence case.
- Prefer standard markup to raw HTML. If the markup cannot express it, reconsider whether the document needs it.
Expand Down Expand Up @@ -230,5 +231,5 @@ Then confirm:
- Architecture flows include only significant steps (§4); every diagram has `accTitle` and `accDescr`, and every image has real alt text.
- No em-dashes (`—`) or en-dashes (`–`) anywhere you wrote; new or changed prose uses Canadian English.
- Every public symbol you touched carries a documentation comment written from its implementation, not from its name, and no comment narrates a change, names something that no longer exists, argues the code is safe, or sits commented out. No comment you added sits above a usage site rather than a declaration, and every comment you removed as a repetition either said no more than the declaration's or had what it added folded into the declaration first.
- Rendered output was checked, not only the source: diagrams parse, nested lists and tables render, and documentation comments display the intended text.
- Rendered output was checked, not only the source: diagrams parse, nested lists render, and documentation comments display the intended text. Every table you touched was re-read whole, with each row's cell count matching its header and no cell broken across lines.
- Phase 3 ran and its result is reported.
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ Substitute the plain word, which carries the same meaning and does not pattern-m
| `utilize` | use |
| `facilitate` | name what it actually does |

**A substitution inside a Markdown table cell is where this catalogue does its damage.** The mapping above changes the length of a cell, and re-padding the row to match is what breaks the table. Leave the cell ragged. Every row keeps the same number of `|`-separated cells as the header and the delimiter row, a cell stays on one line with no newline or bullet list inserted into it, a literal `|` inside a cell is written `\|`, and no substitution is a reason to re-flow, re-wrap, or restructure the table around it. Prefer leaving a cell as its author wrote it over making a table you then have to repair, and count the cells in every row after any edit inside one.

Do not run the table as a find-and-replace, because several entries are also ordinary technical terms and removing one would make the sentence wrong. A word stays when it names something that exists in the system: a test `harness` is a component, an OAuth `realm` is a protocol field, a library or module whose name happens to be one of these words keeps its name, and a word inside a quoted specification or error string stays as quoted. A word goes when it modifies something to make it sound larger than it is. The replacement for `seamless` is almost always a concrete negative fact, which is what makes the claim checkable.

- Before: "The adapter leverages the connection pool to facilitate seamless failover across regions."
Expand Down Expand Up @@ -127,7 +129,9 @@ Put the conclusion in the first sentence of the paragraph, then the qualificatio

## Self-check for a paragraph you just wrote

Run these over the paragraph before moving on. Every yes is an edit, not a note for later.
Run these over a paragraph **you wrote or rewrote this run**, before moving on. Every yes is an edit to that paragraph, not a note for later, and not a licence to reach into prose the scope limit above puts out of bounds.

**Two places these questions do not reach.** Accurate existing prose, which stays as its author wrote it. And the inside of a table cell, where the answer is to leave the cell alone: a cell is terse by design, so questions 1, 5, and 6 misfire on one, and editing it risks the table for a rhythm gain no reader gets.

1. Does the opening sentence announce, preview, or wind up, instead of stating the point?
2. Is a copula (`serves as`, `stands as`, `plays a role in`) standing in for a verb that names a behaviour?
Expand Down
Loading