Growing Docs
Overview
A demand signal — not a sense of completeness — is what earns a new doc. bootstrapping-docs
creates the smallest high-leverage doc set and deliberately stops; this skill is the other half
of that bargain. When reality asks for more — the same fact re-derived, an incident with no
runbook — the doc set grows by exactly the artifact that absorbs the signal, and no further.
Route first: gap or drift?
| What you found |
Owner |
| An existing doc line is now false |
detecting-doc-drift → fixing-docs |
| The fact is simply absent — no doc line contradicts reality |
this skill |
Drift tooling audits claims that exist; a pure gap has nothing to flag. Do not wait for a
drift report to legitimize growth — it never will.
The second-rediscovery rule
The first time a fact is asked for or derived the hard way, answering is fine — but the
exemption costs one logged line: add - seen: <date> <one-line occurrence> under the
matching ## Deferred item in docs/doc-scope.md (create the item if absent). The second
rediscovery is usually a different session or a different person — without the log, nobody
can recognize a second occurrence as the second, and this rule never fires. The second
time, it has earned a doc — write it where the reader would have looked first (the doc they
opened, the section they scanned, the file they read). This is the positive twin of
writing-docs Rule 5: "cheaply inferable" is an empirical claim, and a second hard derivation
falsifies it.
Name the signal before writing ("second teammate this week hit exit 3", "third session
re-deriving the migrate order"). If you cannot name one, you are completeness-chasing — stop.
Signal → smallest artifact
One signal → one smallest artifact. bootstrapping-docs' STOP list (route catalogs, signature
lists, directory trees) still binds — a demand signal is not a license to catalogue.
| Signal |
Smallest artifact that absorbs it |
| Fact re-explained / re-derived |
CLAUDE.md gotcha, README section, or reference entry — whichever the reader would consult first (always-loaded placement must clear writing-docs' router rule) |
| Incident with no runbook |
runbook (writing-docs' runbooks.md) |
| Onboarding pain |
deepen README setup — or a narrative walkthrough (template below) |
| Recurring "why is it like this?" |
marked+anchored rationale section — or an ADR (template below) |
| Unit became load-bearing / repo grew multi-unit |
docs/reference/ per bootstrapping-docs' repo-shape.md |
The scope record: docs/doc-scope.md (this skill owns the format)
- On entry: if
docs/doc-scope.md exists, read it alongside the live signal — the item
may already carry a promotion condition that just fired. A Deferred item already carrying
a seen: line means the live signal is the second rediscovery: promote it.
- On exit: update it — create it if absent. Log what you wrote in Done with the signal
that fired (moving the item from Deferred if it was listed there); add any new deliberate
deferrals, each with a
promote when: signal; log any first occurrence you exempted as a
seen: line (the second-rediscovery rule above).
# Doc scope record
<!-- format: doc-lifecycle growing-docs -->
## Deferred
- <artifact>: <what> — promote when: <signal>
- seen: <date> <one-line occurrence> <!-- first-rediscovery tally -->
## Done
- <date> <artifact> ← <signal that fired>
Read on demand; never a standing section in an always-loaded agent file (CLAUDE.md/AGENTS.md)
— a pointer line is fine.
Quality routing
- Repo-tracking doc (README, runbook, CLAUDE.md/AGENTS.md, reference) → writing-docs,
the one door — exactly as bootstrapping-docs routes.
- Narrative doc (walkthrough, tutorial, ADR) → writing-docs scopes these out by design;
the template below is carried here and is REQUIRED.
Where narrative docs live
A narrative doc is a durable doc — it tracks the current repo, and must never
be mistaken for a retire-on-landing planning artifact. Its home:
- Repo with a
docs/reference/ tree: inside it, domain-grouped like everything
else (a unit's walkthrough beside its overview.md; cross-unit narrative beside
architecture.md). One containment subtree holds the whole agent doc set,
claim-style and narrative alike.
- Repo without one: under
docs/ beside the team's docs; it moves into
docs/reference/ if that tree later exists.
- Never in
docs/plans/ — that is where planning artifacts go to be distilled
once their implementation lands; a narrative doc placed there will read as one.
Narrative doc template (REQUIRED)
- First line under the title, always:
> As of <YYYY-MM-DD> (<commit or file:line anchors current at writing>)
— the staleness anchor readers can check against, and drift-audit checks it too:
the engine parses this line deterministically and emits ANCHOR-MISSING,
ANCHOR-MALFORMED, ANCHOR-STALE, ANCHOR-FUTURE-DATED, or
ANCHOR-UNRESOLVABLE-REFERENCE findings against it. This line
is also the doc's durable-narrative marker: bloat tooling classifies an
anchored doc as narrative — never as a planning artifact to distill — wherever
it sits. Every backticked path anchor is repository-relative and written in
full, each one, including siblings of the one before it: an abbreviation is
indistinguishable from a target that has moved, so the audit refuses it rather
than guess which same-named file was meant.
- Every command, path, symbol, and output inside the narrative is true of the repo now
and was actually run. Narrative structure is exempt from the claim bar; fabrication
is not.
- Still the smallest doc that absorbs the signal.
- Rationale gets one owner. If the "why" you are landing already lives as a code
comment, trim that comment to a pointer at the new doc in the same change — duplicated
rationale drifts apart; the pointer keeps the breadcrumb where the reader trips on it.
Rationalizations
| Thought |
Reality |
| "I'll just answer in chat again" |
The second answer is the signal. Write it where the reader would have looked first. |
| "Adding this violates the cut test — it's inferable" |
A second hard derivation just proved it isn't cheap. That is the falsification writing-docs Rule 5 invites. |
| "The drift report didn't flag it, so there's nothing to fix" |
Drift audits existing claims; gaps are this skill's job. |
| "The walkthrough isn't governed by writing-docs, so no rules apply" |
The narrative template above applies — anchor line first, every embedded claim true and run. |
Red flags — STOP
- Answering the same question a second time and moving on → it has earned a doc; write it.
- Answering a first-time question and moving on without a
seen: line in
docs/doc-scope.md → the second rediscovery becomes unrecognizable across sessions;
the exemption costs the log line.
- Growing docs with no nameable signal (a milestone, a release, "while I'm here") → wrong
trigger; demand grows docs, calendars don't.
- One signal producing a catalogue (routes, signatures, trees) → one smallest artifact;
bootstrapping-docs' STOP list still binds.
- A walkthrough/tutorial/ADR without the
> As of … first line → the anchor is REQUIRED.
- Finishing without updating
docs/doc-scope.md (creating it if absent) → the scope
decision evaporates with the session.
- Pasting doc-scope.md contents into CLAUDE.md/AGENTS.md → read on demand; a pointer line
at most.
1---2name: growing-docs3description: Use when a repo already has baseline docs but a demand signal says they are no longer enough — the same question answered twice, a fact re-derived the hard way across sessions, an incident with no runbook, onboarding pain, a recurring "why is it like this?", someone asking "should we document X?", or a docs/doc-scope.md item whose promotion signal has fired — and for any direct ask to write a narrative doc: an ADR, tutorial, walkthrough, or architecture overview (writing-docs scopes those out by design; their REQUIRED template lives here). The demand-driven counterpart to bootstrapping-docs, which creates the minimum for a repo with no docs.4---56# Growing Docs78## Overview910**A demand signal — not a sense of completeness — is what earns a new doc.** bootstrapping-docs11creates the smallest high-leverage doc set and deliberately stops; this skill is the other half12of that bargain. When reality asks for more — the same fact re-derived, an incident with no13runbook — the doc set grows by exactly the artifact that absorbs the signal, and no further.1415## Route first: gap or drift?1617| What you found | Owner |18|----------------|-------|19| An existing doc line is now **false** | detecting-doc-drift → fixing-docs |20| The fact is simply **absent** — no doc line contradicts reality | **this skill** |2122Drift tooling audits claims that exist; a pure gap has nothing to flag. Do not wait for a23drift report to legitimize growth — it never will.2425## The second-rediscovery rule2627The first time a fact is asked for or derived the hard way, answering is fine — but the28exemption costs one logged line: add `- seen: <date> <one-line occurrence>` under the29matching `## Deferred` item in `docs/doc-scope.md` (create the item if absent). The second30rediscovery is usually a different session or a different person — without the log, nobody31can recognize a second occurrence as the second, and this rule never fires. **The second32time, it has earned a doc — write it where the reader would have looked first** (the doc they33opened, the section they scanned, the file they read). This is the positive twin of34writing-docs Rule 5: "cheaply inferable" is an empirical claim, and a second hard derivation35falsifies it.3637Name the signal before writing ("second teammate this week hit exit 3", "third session38re-deriving the migrate order"). If you cannot name one, you are completeness-chasing — stop.3940## Signal → smallest artifact4142One signal → one smallest artifact. bootstrapping-docs' STOP list (route catalogs, signature43lists, directory trees) still binds — a demand signal is not a license to catalogue.4445| Signal | Smallest artifact that absorbs it |46|--------|-----------------------------------|47| Fact re-explained / re-derived | CLAUDE.md gotcha, README section, or reference entry — whichever the reader would consult first (always-loaded placement must clear writing-docs' router rule) |48| Incident with no runbook | runbook (writing-docs' runbooks.md) |49| Onboarding pain | deepen README setup — or a narrative walkthrough (template below) |50| Recurring "why is it like this?" | marked+anchored rationale section — or an ADR (template below) |51| Unit became load-bearing / repo grew multi-unit | `docs/reference/` per bootstrapping-docs' repo-shape.md |5253## The scope record: `docs/doc-scope.md` (this skill owns the format)5455- **On entry:** if `docs/doc-scope.md` exists, read it alongside the live signal — the item56 may already carry a promotion condition that just fired. A Deferred item already carrying57 a `seen:` line means the live signal **is** the second rediscovery: promote it.58- **On exit:** update it — create it if absent. Log what you wrote in Done with the signal59 that fired (moving the item from Deferred if it was listed there); add any new deliberate60 deferrals, each with a `promote when:` signal; log any first occurrence you exempted as a61 `seen:` line (the second-rediscovery rule above).6263```markdown64# Doc scope record65<!-- format: doc-lifecycle growing-docs -->6667## Deferred68- <artifact>: <what> — promote when: <signal>69 - seen: <date> <one-line occurrence> <!-- first-rediscovery tally -->7071## Done72- <date> <artifact> ← <signal that fired>73```7475Read on demand; never a standing section in an always-loaded agent file (CLAUDE.md/AGENTS.md)76— a pointer line is fine.7778## Quality routing7980- **Repo-tracking doc** (README, runbook, CLAUDE.md/AGENTS.md, reference) → **writing-docs**,81 the one door — exactly as bootstrapping-docs routes.82- **Narrative doc** (walkthrough, tutorial, ADR) → writing-docs scopes these out by design;83 the template below is carried here and is REQUIRED.8485### Where narrative docs live8687A narrative doc is a **durable** doc — it tracks the current repo, and must never88be mistaken for a retire-on-landing planning artifact. Its home:8990- Repo with a `docs/reference/` tree: **inside it**, domain-grouped like everything91 else (a unit's walkthrough beside its `overview.md`; cross-unit narrative beside92 `architecture.md`). One containment subtree holds the whole agent doc set,93 claim-style and narrative alike.94- Repo without one: under `docs/` beside the team's docs; it moves into95 `docs/reference/` if that tree later exists.96- **Never in `docs/plans/`** — that is where planning artifacts go to be distilled97 once their implementation lands; a narrative doc placed there will read as one.9899### Narrative doc template (REQUIRED)1001011. **First line under the title, always:**102 `> As of <YYYY-MM-DD> (<commit or file:line anchors current at writing>)`103 — the staleness anchor readers can check against, and drift-audit checks it too:104 the engine parses this line deterministically and emits ANCHOR-MISSING,105 ANCHOR-MALFORMED, ANCHOR-STALE, ANCHOR-FUTURE-DATED, or106 ANCHOR-UNRESOLVABLE-REFERENCE findings against it. This line107 is also the doc's **durable-narrative marker**: bloat tooling classifies an108 anchored doc as narrative — never as a planning artifact to distill — wherever109 it sits. **Every backticked path anchor is repository-relative and written in110 full**, each one, including siblings of the one before it: an abbreviation is111 indistinguishable from a target that has moved, so the audit refuses it rather112 than guess which same-named file was meant.1132. **Every command, path, symbol, and output inside the narrative is true of the repo now114 and was actually run.** Narrative structure is exempt from the claim bar; fabrication115 is not.1163. **Still the smallest doc that absorbs the signal.**1174. **Rationale gets one owner.** If the "why" you are landing already lives as a code118 comment, trim that comment to a pointer at the new doc in the same change — duplicated119 rationale drifts apart; the pointer keeps the breadcrumb where the reader trips on it.120121## Rationalizations122123| Thought | Reality |124|---------|---------|125| "I'll just answer in chat again" | The second answer is the signal. Write it where the reader would have looked first. |126| "Adding this violates the cut test — it's inferable" | A second hard derivation just proved it isn't cheap. That is the falsification writing-docs Rule 5 invites. |127| "The drift report didn't flag it, so there's nothing to fix" | Drift audits existing claims; gaps are this skill's job. |128| "The walkthrough isn't governed by writing-docs, so no rules apply" | The narrative template above applies — anchor line first, every embedded claim true and run. |129130## Red flags — STOP131132- Answering the same question a second time and moving on → it has earned a doc; write it.133- Answering a first-time question and moving on without a `seen:` line in134 `docs/doc-scope.md` → the second rediscovery becomes unrecognizable across sessions;135 the exemption costs the log line.136- Growing docs with no nameable signal (a milestone, a release, "while I'm here") → wrong137 trigger; demand grows docs, calendars don't.138- One signal producing a catalogue (routes, signatures, trees) → one smallest artifact;139 bootstrapping-docs' STOP list still binds.140- A walkthrough/tutorial/ADR without the `> As of …` first line → the anchor is REQUIRED.141- Finishing without updating `docs/doc-scope.md` (creating it if absent) → the scope142 decision evaporates with the session.143- Pasting doc-scope.md contents into CLAUDE.md/AGENTS.md → read on demand; a pointer line144 at most.