---
name: doc-update
description: Update project documentation based on knowledge gaps discovered during the current session
disable-model-invocation: false
---

# Documentation Update from Session Context

Review the current session to identify knowledge gaps that caused suboptimal codebase
navigation, then update the relevant documentation.

## The quality bar

Every addition must pass this test: **"Would this save a future session at least 5 minutes
of exploration?"**

Documentation serves two purposes — know **where to look** and know **what to do**. Both
are valuable, but at different levels of detail:

- **Navigation map** (good): "Preview flow: `LivePreview.tsx` → `prepareSpecForRender()` (core) → `vega-embed`" — lists the files and their roles so you don't read a dozen files to find the right four.
- **Decision rule** (good): "The fit-mode/reference-resolution transform runs on a _copy_ of the spec — never mutate the stored spec" — captures a non-obvious convention.
- **Code walkthrough** (bad): "SnippetStore.updateDraft sets draftSpec, which a startup subscriber watches, debounces, then calls snippetStore.put… " — restates the code, goes stale on any rename.

**Navigation maps** use file/module names (stable) to show flow direction. **Decision
rules** capture "when/why" constraints. **Code walkthroughs** restate implementation
details — that's what reading the code is for.

For documentation organization, see **[CLAUDE.md](../../../CLAUDE.md)** and the doc index in
**[AGENTS.md](../../../AGENTS.md)**.

## The three documentation layers (know which one a gap belongs to)

- **`docs/spec/`** — the _what_: behavioral contract (what the app does, acceptance points).
  This is a **contract**. Only change it when product behavior genuinely changes, and do so
  deliberately — never as a casual "fill a doc gap" edit. A how-detail does NOT belong here.
- **`docs/architecture/`** — the _how_: the patterns behind each layer (state, persistence,
  modals, routing, rendering, inference, relationships). Most navigation maps and decision
  rules land here.
- **`docs/IMPLEMENTATION-PLAN.md`** — the _when_: milestone sequence and scope.

## Process

### 1. Analyze the session

Look back through the conversation and identify:

- **Missing navigation maps**: Where did you read many files to discover which 3–4 files a
  flow actually involves? A one-line map of file roles would have saved that.
- **Missing rules**: What conventions or constraints were discovered that a new session
  would violate or re-discover?
- **Non-obvious "when/why" knowledge**: What decisions require understanding intent, not
  just implementation?

Produce a brief list of gaps before proceeding. For each, state what's needed in one
sentence — a navigation map ("X flow: file → file → file") or a decision rule ("X must/must
not do Y"). If you can't state it concisely, it may be too implementation-specific to document.

### 2. Categorize and target

Map each gap to the right document:

| Gap type                                          | Target document                                                               |
| ------------------------------------------------- | ----------------------------------------------------------------------------- |
| Product behavior, capabilities, acceptance points | `docs/spec/` (the relevant 00–10 section) — **contract; change deliberately** |
| State / Zustand stores                            | `docs/architecture/01-state-and-stores.md`                                    |
| Persistence, IndexedDB, localStorage, migrations  | `docs/architecture/02-persistence.md`                                         |
| Modals, dialog lifecycle                          | `docs/architecture/03-modal-system.md`                                        |
| URL routing, keyboard/events                      | `docs/architecture/04-routing-and-events.md`                                  |
| Rendering, theming, vega-embed, preview           | `docs/architecture/05-rendering-theming-preview.md`                           |
| Type inference, dataset profiling                 | `docs/architecture/06-type-inference.md`                                      |
| Names, snippet↔dataset links, rename propagation  | `docs/architecture/07-naming-and-relationships.md`                            |
| Milestone scope, build order                      | `docs/IMPLEMENTATION-PLAN.md`                                                 |
| Project philosophy / identity                     | `SOUL.md`                                                                     |
| Onboarding, conventions, stack                    | `AGENTS.md` / `CLAUDE.md`                                                     |

If a gap fits no existing document, consider a new section in the closest one; prefer
extending over creating. A brand-new architecture topic can become `docs/architecture/08-*.md`
(add it to `docs/architecture/00-overview.md`).

### 3. Read, locate, and check for bloat

For each target document:

- Confirm the gap isn't already covered (if partially covered, extend rather than duplicate).
- Find the right insertion point.
- **Check section length**: if a section is already long (>50 lines), tighten or consolidate
  before adding. Documentation that only grows becomes noise.

### 4. Apply updates

- **Rules and constraints over descriptions**: "X must do Y because Z" beats "X works by A, B, C".
- **Matter-of-fact voice**: write what the design _is_ and the standing _why_, not the story
  of how this session arrived at it. No decision-log narration ("this bit us", "we decided",
  "supersedes the earlier plan", "used to do X"), no directives-to-future-self ("keep the
  escape"). Phrase rationale as a standing property of the system, not a resolution reached.
- **Stability over specifics**: no line numbers, no file counts, no volatile details.
- **Proportional**: a missing sentence doesn't need a new section; a missing concept does.
- **Match existing style**: follow surrounding formatting, heading levels, tone.
- **Self-contained**: never add a pointer that requires an external repository to follow.
- **Consolidate while adding**: net size increase should be minimal.

### 5. Update index (if needed)

Only update `CLAUDE.md` (or `docs/architecture/00-overview.md`) if a new document was created
or a major new section was added that should be discoverable. Not for minor additions.

## What NOT to document

- **Code walkthroughs**: prose that restates the code; goes stale on any rename. (Navigation
  maps that list file roles are fine.)
- **TS code blocks that copy current implementation**: a snippet mirroring a real module
  rots on its next rename. An illustrative _shape_ sketch is fine; for real code, point to
  the file (navigation map) or state the rule it demonstrates.
- **Stale-prone references**: positional sub-section cross-refs (`arch 07 §4` renumbers when
  a section is inserted — cite the file `arch 07` or a named section) and exact counts
  (test/file/LOC counts, one-off timings — state the qualitative fact; `codebase-metrics.md`
  owns the tracked numbers).
- **Obvious-from-code patterns**: if reading the file makes it clear, don't add docs.
- **Session-specific context**: current task details, debugging steps taken.
- **Speculative patterns**: only document conventions confirmed across multiple instances.
- **Implementation details that change with refactoring**: if renaming a variable would
  invalidate the doc, it's too specific.
