- Rewrite AGENTS.md: DB as source of truth, MCP knowledge tools, archive refs - Fix OIKOS.md: seeds/ paths, remove Python-era notes, update deployment status - Fix commands.md, agent-enrollment.md: archive/knowledge/ links - Fix all SKILL.md files: remove hosts/*.yaml refs, point to inventory.yaml - Fix HERMES.md, schema.md, page-templates.md, llm-wiki.md: update paths - Fix bootstrap.sh: identity check reads inventory.yaml - Fix README.md, cutover-checklist.md: stale wiki references - Move convert-wiki.py to archive/ (one-shot done)
49 lines
2.9 KiB
Markdown
49 lines
2.9 KiB
Markdown
# 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/<id>-<name>.md`, `.../vms/<id>-<name>.md`,
|
|
`.../hosts/<name>.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/<topic>.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] <op> | <summary>`. 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).
|