Problem: node and cross-cutting narratives lived at the repo root
(containers/, vms/, infrastructure/, host .md files), interleaved with the
machine-readable substrate.
Change:
- Move containers/ -> knowledge/wiki/containers/, vms/ -> knowledge/wiki/vms/,
infrastructure/ -> knowledge/wiki/infrastructure/, hosts/{hubris,strong}.md ->
knowledge/wiki/hosts/, infrastructure/references/ -> knowledge/sources/references/,
GLOSSARY.md -> knowledge/GLOSSARY.md.
- Add knowledge/{index.md,log.md,sources/index.md} scaffolding.
- Rewrite all relative links repo-wide via a path-resolving mapper (inbound +
outbound + between-moved-files), including .hermes/, runbooks, operations,
investigations, plans, README, AGENTS.
- Repoint inventory.yaml doc_page fields and regenerate hosts/*.yaml (which
embed doc_page); update oikos/gen-topology.py output path, candidate doc
paths, and footer links; update code-comment doc paths.
Substrate untouched in place: inventory.yaml, hosts/*.yaml (regenerated,
idempotent), oikos/ code, mcp/, secrets/, bin/.
Verification:
- Logical broken-link set identical to pre-move baseline (net 128 -> 127; the
topology regen fixed one, introduced none). Remaining are pre-existing refs
to destroyed/archived nodes, out of scope for this move.
- gen-topology.py --check exit 0 (in sync); cards carry knowledge/wiki/ doc paths.
- build_host_files.py idempotent; all inventory doc_page targets resolve.
- MCP contract verified: get_page/search_docs/get_changelog resolve moved pages.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
97 lines
5.2 KiB
Markdown
97 lines
5.2 KiB
Markdown
<!-- Generated by oikos/gen-topology.py from inventory.yaml. -->
|
|
<!-- Do NOT edit by hand - your changes will be overwritten. -->
|
|
|
|
# Topology (generated)
|
|
|
|
Source: [inventory.yaml](../../../inventory.yaml) — 2 hypervisors, 20 LXCs, 2 VMs, 2 workstations, 18 services.
|
|
Edge semantics: [oikos/ontology.yaml](../../../oikos/ontology.yaml). Operating model: [OIKOS.md](../../../.agents/OIKOS.md).
|
|
|
|
## Compute & ingress
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
subgraph hubris_sub["hubris (Proxmox)"]
|
|
trmnl["trmnl<br/>LXC 128<br/>trmnl-middleware<br/>192.168.8.211"]
|
|
nfs_export["nfs-export<br/>LXC 102<br/>storage-export<br/>192.168.8.200"]
|
|
paperless["paperless<br/>LXC 103<br/>document-archive<br/>192.168.8.130"]
|
|
gitea["gitea<br/>LXC 104<br/>git-server<br/>192.168.8.121"]
|
|
apps["apps<br/>LXC 105<br/>docker-apps<br/>192.168.8.205"]
|
|
auth_outpost["auth-outpost<br/>LXC 106<br/>authentik-gateway<br/>192.168.8.6"]
|
|
dns["dns<br/>LXC 107<br/>dns-server<br/>192.168.8.2"]
|
|
nextcloud["nextcloud<br/>LXC 114<br/>file-sync<br/>192.168.8.224"]
|
|
sophia["sophia<br/>LXC 119<br/>workshop<br/>192.168.8.109"]
|
|
mule_images["mule-images<br/>LXC 120<br/>photo-management<br/>192.168.8.136"]
|
|
caddy["caddy<br/>LXC 121<br/>reverse-proxy<br/>192.168.8.175"]
|
|
teddycloud["teddycloud<br/>LXC 131<br/>teddycloud<br/>192.168.8.150"]
|
|
zimaos["zimaos<br/>VM 100<br/>nas-frontend-eval<br/>192.168.8.195"]
|
|
haos["haos<br/>VM 108<br/>home-automation<br/>192.168.8.101"]
|
|
end
|
|
subgraph strong_sub["strong (Proxmox)"]
|
|
house["house<br/>LXC 129<br/>family-planner<br/>192.168.8.244"]
|
|
jellyfin["jellyfin<br/>LXC 101<br/>media-server<br/>192.168.8.246"]
|
|
elementsynapse["elementsynapse<br/>LXC 118<br/>matrix-server<br/>192.168.8.242"]
|
|
arriman["arriman<br/>LXC 122<br/>arr-stack<br/>192.168.8.245"]
|
|
grimmory["grimmory<br/>LXC 130<br/>book-library<br/>192.168.8.247"]
|
|
seanime["seanime<br/>LXC 133<br/>anime-media-server<br/>192.168.8.248"]
|
|
romm["romm<br/>LXC 134<br/>rom-manager<br/>192.168.8.249"]
|
|
end
|
|
rclone["rclone<br/>lxc<br/>backup"]
|
|
republic_laptop([republic-laptop<br/>workstation<br/>primary-dev])
|
|
mac_mini([mac-mini<br/>workstation<br/>dev<br/>192.168.178.182])
|
|
netbird_vps[[netbird-vps<br/>external<br/>netbird-mgmt]]
|
|
url_artifacto(["artifacto.hubris.network"]) -->|routes-to| apps
|
|
url_authentik(["auth.hubris.network"]) -->|routes-to| netbird_vps
|
|
url_gitea(["git.hubris.network"]) -->|routes-to| gitea
|
|
url_homelab_mcp(["mcp.hubris.network"]) -->|routes-to| apps
|
|
url_jellyfin(["media.hubris.network"]) -->|routes-to| jellyfin
|
|
url_matrix(["matrix.hubris.network"]) -->|routes-to| elementsynapse
|
|
url_nextcloud(["cloud.hubris.network"]) -->|routes-to| nextcloud
|
|
url_paperless(["paperless.hubris.network"]) -->|routes-to| paperless
|
|
url_photos(["photos.hubris.network"]) -->|routes-to| mule_images
|
|
url_proxmox_ui(["proxmox.hubris.network"]) -->|routes-to| hubris_sub
|
|
url_secrets_issuance(["secrets.hubris.network"]) -->|routes-to| apps
|
|
url_teddycloud(["teddy.hubris.network"]) -->|routes-to| teddycloud
|
|
url_trmnl(["trmnl.hubris.network"]) -->|routes-to| trmnl
|
|
url_zimaos(["zimaos.hubris.network"]) -->|routes-to| zimaos
|
|
```
|
|
|
|
## Storage (mounts)
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
mnt_library[("/mnt/library")]
|
|
mnt_media_local[("/mnt/media_local")]
|
|
mnt_media_local_anime[("/mnt/media_local/anime")]
|
|
apps["apps"] -->|mounts| mnt_library
|
|
arriman["arriman"] -->|mounts| mnt_media_local
|
|
gitea["gitea"] -->|mounts| mnt_library
|
|
grimmory["grimmory"] -->|mounts| mnt_media_local
|
|
hubris["hubris"] -->|mounts| mnt_library
|
|
jellyfin["jellyfin"] -->|mounts| mnt_media_local
|
|
mule_images["mule-images"] -->|mounts| mnt_library
|
|
nextcloud["nextcloud"] -->|mounts| mnt_library
|
|
paperless["paperless"] -->|mounts| mnt_library
|
|
romm["romm"] -->|mounts| mnt_media_local
|
|
seanime["seanime"] -->|mounts| mnt_media_local_anime
|
|
sophia["sophia"] -->|mounts| mnt_library
|
|
teddycloud["teddycloud"] -->|mounts| mnt_library
|
|
```
|
|
|
|
## Archaeology (destroyed nodes)
|
|
|
|
| Node | ID | Destroyed | Reason |
|
|
|---|---|---|---|
|
|
| plato | 126 | 2026-06-28 | notes workspace decommissioned; data retained at /mnt/library/documents/plato |
|
|
| claudio-bot | 123 | 2026-06-04 | replaced by Hermes Agent on mac-mini; monitoring moved to homelab-health-watchdog cron |
|
|
| mule-photos-new | 127 | 2026-05-22 | PhotoPrism test stack promoted to LXC 120 (Mulimage 2.0 merge) |
|
|
| heaper | 116 | 2026-05-14 | decommissioned; data retained at /mnt/library/heaper |
|
|
| syncthing | 109 | 2026-05-14 | decommissioned; library subtree was empty |
|
|
| seafile | 125 | 2026-05-13 | Seafile Pro evaluation rejected; files.hubris.network removed from caddy + dns |
|
|
| arr-yunohost | 100 | 2026-04-28 | migrated to docker stack on arriman (LXC 122) |
|
|
| flaresolverr | 106 | 2026-04-28 | folded into the arriman docker compose |
|
|
| marimo | 107 | 2026-04-28 | decommissioned |
|
|
| photoprism | 110 | 2026-04-28 | replaced by mule-images (LXC 120) |
|
|
| karakeep | 111 | 2026-04-28 | decommissioned |
|
|
| immich | 112 | 2026-04-28 | replaced by mule-images (LXC 120) |
|
|
| reticulum | 115 | 2026-04-28 | decommissioned |
|