---
paths: ["documentation/**"]
---

# Documentation — routing and register discipline

`documentation/` is the **authoritative design home for the whole Felhom system**, not just this
repo. Sibling repos point here; this is where the pointed-at thing must actually be.

## Where a fact goes — one home each

| Fact | Home |
|---|---|
| the locked design | `architecture/01..05-*.md` |
| capability status + its evidence | `architecture/00-capability-map.md` |
| host addresses, routes, node names, break-glass, what is provisioned | `operations/nodes.md` |
| Tailscale topology, accept-dns/accept-routes | `operations/tailscale.md` |
| which box may be broken, and what may be done to it | `runbooks/target-selection.md` |
| an operational procedure | `runbooks/RUNBOOK-*.md` |
| logging levels and phrasing | `runbooks/logging-conventions.md` |
| a spike or campaign result | `audits/` |
| every open finding | `backlog/OPEN-ITEMS.md` |
| the operator's one-screen view | root `STATUS.md` |

**Do not restate a fact that has a home** — point at it. Re-check an address rather than trusting one
written down.

## Register discipline

The end-of-session register rules (`OPEN-ITEMS.md` first, `STATUS.md` is a view, nothing exists only
in a report) are in the repo core `CLAUDE.md` **deliberately** — they apply to every session that
ships or decides something, not only to sessions that touch `documentation/`, so they must load
unconditionally. This file adds only the routing above.

## The coupling rule

**A recipe or contract section is a TWO-REPO change.** If a document here defines something a sibling
consumes — a DR recipe's producers, an allow-list, an event type — the consumer's code and this
document move in the same session, or the hub silently drops what it does not recognise.

## Version literals

**No component version literal in any instruction file, and none in a doc that reads as current
fleet state.** Versions change several times a day and the fleet is not uniform. A *historical*
citation ("fixed in hub v<X>") is fine in an audit or an HTML comment beside the rule it justifies —
it cannot go stale the way "this box currently runs agent v<Y>" can.
