# Knowledge domain — schema The knowledge domain is the durable, authoritative current-state documentation of the homelab: one page per node and per cross-cutting system, synthesized from live state and evidence. It answers "what exists and how does it work right now." It follows the [LLM Wiki layer model](../../shared/llm-wiki.md) and the [writing-style](../../shared/writing-style.md) and [page-templates](../../shared/page-templates.md) rules. ## The narrative / substrate split The knowledge wiki is **narrative**. It sits alongside a **machine-readable substrate** that it describes but never contains. The split is load-bearing: several programs read the substrate at fixed paths, so the wiki reorganization never moves it. | Layer | Location | Consumed by | |-------|----------|-------------| | Substrate — source of truth | `inventory.yaml` (root) | MCP server, `homelab` CLI, `oikos/` scheduler/drift/relations/gen-topology | | Substrate — generated host records | `inventory.yaml` (root) | Go `internal/mcp/` server, `bin/homelab`; the single source of truth | | Substrate — kernel + context cards | `oikos/` (code, `oikos/cards/`, `oikos/state.json`) | MCP `explain`, scheduler | | Narrative — synthesized wiki | `archive/knowledge/{hosts,containers,vms,infrastructure}/` | humans, agents via MCP `get_page` / `search_docs` | | Evidence — immutable sources | `knowledge/sources/` (references + investigations) | synthesis into wiki pages | ## Wiki pages - **Node pages** (`archive/knowledge/containers/-.md`, `.../vms/-.md`, `.../hosts/.md`) follow the container/host template in [page-templates.md](../../shared/page-templates.md): opening definition, `## At a glance`, `## Role`, service/port map, storage, auto-deploy, `## Related`, `## Changelog`. - **Cross-cutting pages** (`archive/knowledge/infrastructure/.md`) follow the cross-cutting template: `## Why`, `## Components`, `## How to apply`, `## Gotchas`, `## Related`, `## Changelog`. - Each `inventory.yaml` host entry carries a `doc_page:` field pointing at its narrative page. Changing where a page lives means updating that field (read by `bin/homelab`). ## The two logs - The per-page **`## Changelog`** records infrastructure changes and is machine-parsed (`get_changelog`, the Oikos ledger). Keep the `### YYYY-MM-DD — title` shape. - **`knowledge/log.md`** is append-only and records *documentation-maintenance* operations only (restructures, source ingests, lint sweeps): `## [YYYY-MM-DD] | `. It never duplicates the Oikos change ledger (`oikos/ledger.py`). ## Same-session update rule A change to a node updates every page that references it in the same session — the node page, the section `README.md` table, the root `README.md`, the Caddy/DNS/ingress pages, the host page, and `inventory.yaml`. See [page-templates.md](../../shared/page-templates.md#same-session-update-rule).