007-reports-directory-for-generated-snapshots
Type: adr · Status: proposed · Tags: architecture
Status: proposed Date: 2026-03-24
Context
The KB currently has two primary homes for non-source content:
kb/notes/— durable claims and insights. Value accumulates. Authored by humans or agents making knowledge claims.kb/work/— temporal work-in-flight. Value is consumed. Workshop artifacts have lifecycles and expiration.
A third category is emerging: generated analytical snapshots — computed from the current state of the KB, not authored as claims. Examples:
- Promotion candidates report — text files with enough connection pressure to warrant
/convert, seedlings with enough incoming links to warrant promotion tocurrent. - Orphan report — notes with no incoming or outgoing links.
- Stale link report — links pointing to moved or deleted files.
- Coverage report — areas or tags with few notes, gaps in index coverage.
These don't fit either existing home:
- They're not notes — they make no claim, carry no insight. They're derived from the graph, not from reasoning. Putting them in
kb/notes/pollutes search results and inflates the index with non-knowledge artifacts. - They're not workshop artifacts — they have no lifecycle or state machine. They're not work-in-flight that gets consumed. They're snapshots that get regenerated — the old version is simply replaced, not archived or completed.
Decision
Create kb/reports/ for generated, regenerable analytical snapshots.
Properties that distinguish reports from other artifact types:
| Property | Notes | Workshop | Reports |
|---|---|---|---|
| Value model | Accumulates | Consumed | Replaced |
| Authorship | Authored (claim) | Authored (work) | Generated (computed) |
| Lifecycle | Permanent | Temporal → archive/discard | Regenerate in place |
| Staleness | Bug | Feature (urgency) | Expected (regenerate) |
| Git tracking | Yes | Yes | Optional — can be gitignored if regeneration is cheap |
Reports are generated by scripts or skills that read KB state and produce a snapshot. The generation command should be documented in the report itself (or in a companion script) so any agent can regenerate it.
The existing reviews/ directory — individual review files, summaries, and ranked CSV tables produced by review sweeps — moves to kb/reports/reviews/. These are the prototypical report: generated by scripts, regenerable in place, no authored claims.
The next report will be a promotion candidates report covering:
- Text files (no frontmatter) that have been mentioned in connection reports or linked from notes — candidates for /convert
- Seedling notes with high incoming link counts or load-bearing relationships — candidates for promotion to current
Consequences
Easier:
- Generated snapshots have a clear home. No more question about where an orphan report or coverage analysis goes.
- kb/notes/ stays clean — search over notes returns knowledge, not diagnostics.
- Reports can be gitignored without losing anything — they're regenerable. This keeps the repo focused on authored content.
- The /connect skill's "Raw text" subsection feeds directly into the promotion report — connection reports accumulate evidence, the promotion report aggregates it.
Harder:
- Another top-level directory under kb/. The routing table in CLAUDE.md needs updating.
- Reports that reference notes by path are fragile to renames. But they're regenerable, so this is a minor inconvenience, not data loss.
- The boundary between "report" and "workshop artifact" can blur — a report that triggers manual review starts to feel like a task. The distinction is: reports are stateless snapshots (regenerate replaces), workshop artifacts have state (in-progress, completed).
Relevant Notes:
- a functioning KB needs a workshop layer — establishes the library/workshop distinction that reports sit outside of; reports are neither accumulated knowledge nor consumed work
- distillation status determines directory placement — parallel: proposes directory boundaries based on artifact nature; reports are a third nature (generated/computed) alongside procedures (instructions) and reasoning (notes)
- stale indexes are worse than no indexes — reports face the same staleness risk, but regenerability is the mitigation — a stale report is replaced, not maintained