diff --git a/README.md b/README.md index 1936e9b..1a6c649 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ Encode topology, architectural decisions, and lessons. You read them before plan | Contract | Description | |---|---| -| `infrastructure-control` | Full topology and control pattern: 5-node Proxmox cluster, 3 Docker ecosystems, NFS storage, network verification, IP-first configuration doctrine. Live-state fields marked `VERIFY-BEFORE-USE`. | +| `infrastructure-control` | Full topology and control pattern: 6-node Proxmox cluster, 3 Docker ecosystems, NFS storage, network verification, IP-first configuration doctrine. Live-state fields marked `VERIFY-BEFORE-USE`. | | `pi-approval-architecture` | pi's approval model vs Hermes, available commands, architectural constraints. | | `zulip-adapter-lessons` | Failure modes, fixes, and patterns from building the pi Zulip extension and Hermes Zulip plugin. | diff --git a/disk-gc-threat-response.prose.md b/disk-gc-threat-response.prose.md index 51cdab4..8124f46 100644 --- a/disk-gc-threat-response.prose.md +++ b/disk-gc-threat-response.prose.md @@ -286,7 +286,7 @@ one-off GPU builds. No automated post-migration cleanup was in place. | 111 | tdunna | amdpve | ✅ reachable | | 112 | tanko | amdpve | ✅ reachable | | 113 | baggy | amdpve | ✅ reachable | -| 114 | mumuni | minipve | ✅ reachable | +| 114 | mumuni | hwepve | ✅ reachable | | 115 | scottdenya | amdpve | ✅ reachable | | 116 | syslog-api | minipve | ✅ reachable | | 117 | zulip | storepve | ✅ reachable | diff --git a/docs/AUTHORING-GUIDE.md b/docs/AUTHORING-GUIDE.md index cf74f8c..b9e3533 100644 --- a/docs/AUTHORING-GUIDE.md +++ b/docs/AUTHORING-GUIDE.md @@ -185,7 +185,7 @@ what, and why should I care? ``` ❌ "Monitors infrastructure health" -✅ "Scans all 5 Proxmox nodes and 19 CTs for disk pressure, checks Docker +✅ "Scans all 6 Proxmox nodes and 19 CTs for disk pressure, checks Docker container health on .7/.116/.17, alerts via Telegram DM on RED/CRITICAL" ``` diff --git a/infrastructure-control.prose.md b/infrastructure-control.prose.md index a29412c..b13245f 100644 --- a/infrastructure-control.prose.md +++ b/infrastructure-control.prose.md @@ -3,7 +3,7 @@ kind: pattern name: infrastructure-control description: > Full infrastructure monitoring and control pattern covering the - 5-node Proxmox cluster, 3 Docker ecosystems (22 containers), + 6-node Proxmox cluster, 3 Docker ecosystems (22 containers), NFS storage, and network services. Defines monitors, remediations, and the access matrix for all environments. @@ -42,8 +42,8 @@ description: > │ │ │ │ │ ┌────┘ ┌────┘ ┌────┘ ┌────┘ ┌────┘ ▼ ▼ ▼ ▼ ▼ - minipve amdpve storepve acerpve ocupve - (.12) (.15) (.6) (.9) (.5) + minipve amdpve storepve acerpve ocupve hwepve + (.12) (.15) (.6) (.9) (.5) (.4) ▼ ┌─────────────────────────────────────────────┐ @@ -95,15 +95,16 @@ description: > ## Section 2: Proxmox Cluster — Monitoring -### Nodes (5) +### Nodes (6) | Node | IP | CPU | RAM | VMs/CTs | Role | |------|----|-----|-----|---------|------| -| minipve | .12 | 16C | 30GB | authentik, gitea, mumuni, syslog-api, jitsi | Auth, git, messaging | +| minipve | .12 | 16C | 30GB | authentik, gitea, syslog-api, jitsi | Auth, git, messaging | | amdpve | .15 | 32C | 62GB | abiba, kagentz, tanko, tdunna, baggy, scottdenya | Agents, compute | | storepve | .6 | 28C | 31GB | docker-vm, ra-h-os, PBS, media, zulip | Docker, storage, chat | | acerpve | .9 | 28C | 31GB | llm-gpu, adguard | GPU VMs | | ocupve | .5 | 12C | 14GB | ocu-llm | GPU VMs | +| hwepve | .4 | 12C | 15GB | mumuni | Huawei Matebook 16, agent host | ### Checks (every 5 min) @@ -117,7 +118,7 @@ description: > ## Checks -- For each node in [minipve, amdpve, storepve, acerpve, ocupve]: +- For each node in [minipve, amdpve, storepve, acerpve, ocupve, hwepve]: - GET /api2/json/nodes/{node}/status → check status == "online" - GET /api2/json/nodes/{node}/status → cpu < 0.80 - GET /api2/json/nodes/{node}/status → free_mem > 10% @@ -589,7 +590,7 @@ ssh root@192.168.68.110 "systemctl restart llama-server" | 111 | tdunna | amdpve | .129 | Hermes agent | ✅ | | 112 | tanko | amdpve | .122 | Hermes agent | ✅ | | 113 | baggy | amdpve | ? | Hermes agent | ✅ | -| 114 | mumuni | minipve | .123 | Hermes agent | ✅ | +| 114 | mumuni | hwepve | .123 | Hermes agent | ✅ | | 115 | scottdenya | amdpve | — | ? | ❌ | | 116 | syslog-api | minipve | .116 | LiteLLM + Grafana | ❌ | | 117 | zulip | storepve | — | Chat | ❌ | @@ -621,7 +622,7 @@ Source of truth: `/root/scripts/pct-run.sh` or `prose-contracts/scripts/pct-run. | 115 | scottdenya | amdpve | `pct-run 115` | | 104 | authentik | minipve | `pct-run 104` | | 110 | gitea | minipve | `pct-run 110` | -| 114 | mumuni | minipve | `pct-run 114` | +| 114 | mumuni | hwepve | `pct-run 114` | | 116 | syslog-api | minipve | `pct-run 116` | | 106 | ra-h-os | storepve | `pct-run 106` | | 107 | proxmox-backup | storepve | `pct-run 107` | diff --git a/infrastructure-update.prose.md b/infrastructure-update.prose.md index 301e48c..2b2e5c4 100644 --- a/infrastructure-update.prose.md +++ b/infrastructure-update.prose.md @@ -2,7 +2,7 @@ kind: responsibility name: infrastructure-update description: > - Autonomous system-wide update contract covering all 5 Proxmox nodes, + Autonomous system-wide update contract covering all 6 Proxmox nodes, 15+ containers/VMs, and 4 Docker ecosystems. Updates apt packages, Docker images, and container stacks in safe waves with health checks and automatic rollback on failure. @@ -56,10 +56,11 @@ Before ANY update wave: | amdpve (.15) | Proxmox node | `apt update && apt upgrade -y` | 5 min | | acerpve (.9) | Proxmox node | `apt update && apt upgrade -y` | 5 min | | ocupve (.5) | Proxmox node | `apt update && apt upgrade -y` | 5 min | +| hwepve (.4) | Proxmox node | `apt update && apt upgrade -y` | 5 min | | CT 100 (.24) | Abiba (pi) | `apt update && apt upgrade -y` | 3 min | | CT 116 (.116) | syslog-api (LiteLLM host) | `apt update && apt upgrade -y` | 3 min | | CT 112 (tanko, amdpve) | Tanko | `apt update && apt upgrade -y` | 3 min | -| CT 114 (mumuni, minipve) | Mumuni | `apt update && apt upgrade -y` | 3 min | +| CT 114 (mumuni, hwepve) | Mumuni | `apt update && apt upgrade -y` | 3 min | | VM 101 (.8) | llm-gpu (RTX 3090) | `apt update && apt upgrade -y` | 3 min | | VM 103 (.110) | ocu-llm (RTX 5070) | `apt update && apt upgrade -y` | 3 min | @@ -183,7 +184,7 @@ When LiteLLM is upgraded to a version supporting per-key MCP grants: ## Success Criteria -- [ ] All 5 PVE nodes updated, no reboot-loop +- [ ] All 6 PVE nodes updated, no reboot-loop - [ ] All VMs/CTs running post-update - [ ] All Docker containers healthy (VM 109 + CT 116 + CT 117) - [ ] LiteLLM inference passing (syslog-auto test) @@ -199,7 +200,7 @@ After completion, send Zulip DM: ``` 📋 Infrastructure Update — YYYY-MM-DD -Updated: 5 PVE nodes, 12 CTs/VMs, 30+ containers +Updated: 6 PVE nodes, 12 CTs/VMs, 30+ containers Security fixes: N CVEs patched Downtime: Failures: none /
diff --git a/mumuni-delegation-prose-contract.prose.md b/mumuni-delegation-prose-contract.prose.md index 7da0df5..7cc0a22 100644 --- a/mumuni-delegation-prose-contract.prose.md +++ b/mumuni-delegation-prose-contract.prose.md @@ -82,7 +82,7 @@ it asks the manager (via relay) — it doesn't go find it on its own. **This is a hard rule, not a recommendation.** Violating it produces the exact type of discrepancy the kanban pipeline exists to prevent: a review worker finds -"5 nodes present" in the raw data but "5/5 online" in the report — even though +"6 nodes present" in the raw data but "5/6 online" in the report — even though one of those nodes was unreachable. The report lied because it used data the raw data never provided. diff --git a/scripts/pct-run.sh b/scripts/pct-run.sh index e5fbf09..486a5ab 100755 --- a/scripts/pct-run.sh +++ b/scripts/pct-run.sh @@ -17,10 +17,11 @@ declare -A CT_NODES=( [112]=amdpve # tanko [113]=amdpve # baggy [115]=amdpve # scottdenya + # hwepve (192.168.68.4) — Huawei Matebook 16 + [114]=hwepve # mumuni (migrated from minipve 2026-07-20) # minipve (192.168.68.12) [104]=minipve # authentik [110]=minipve # gitea - [114]=minipve # mumuni [116]=minipve # syslog-api # storepve (192.168.68.6) [106]=storepve # ra-h-os @@ -48,6 +49,7 @@ declare -A NODE_IPS=( [storepve]=192.168.68.6 [acerpve]=192.168.68.9 [ocupve]=192.168.68.5 + [hwepve]=192.168.68.4 ) resolve_node() { diff --git a/scripts/prose-ai-review.sh b/scripts/prose-ai-review.sh index bda62ea..d8b311e 100755 --- a/scripts/prose-ai-review.sh +++ b/scripts/prose-ai-review.sh @@ -46,12 +46,13 @@ You are a code reviewer for OpenProse infrastructure contracts in the Syslog Sol The infrastructure-control.prose.md contract is the canonical reference for the cluster topology: -**Proxmox Cluster "Tabiri" (5 nodes):** +**Proxmox Cluster "Tabiri" (6 nodes):** - amdpve (192.168.68.15): abiba, kagentz, tanko, tdunna, baggy, scottdenya -- minipve (192.168.68.12): authentik, gitea, mumuni, syslog-api, jitsi +- minipve (192.168.68.12): authentik, gitea, syslog-api, jitsi - storepve (192.168.68.6): docker-vm, ra-h-os, PBS, media, zulip - acerpve (192.168.68.9): llm-gpu, adguard - ocupve (192.168.68.5): ocu-llm +- hwepve (192.168.68.4): mumuni (migrated from minipve 2026-07-20, Huawei Matebook 16, 12C/15GB) **CT IDs (verified 2026-07-04 against PVE API):** 100:abiba 102:adguard 104:authentik 105:kagentz 106:ra-h-os diff --git a/scripts/prose-lint.sh b/scripts/prose-lint.sh index 6874267..f681465 100755 --- a/scripts/prose-lint.sh +++ b/scripts/prose-lint.sh @@ -90,16 +90,12 @@ echo "── 3. Cross-contract consistency ──" # Check that contracts referencing each other have correct names if [ -f "infrastructure-control.prose.md" ]; then - # Any contract that claims to check "all 5 PVE nodes" should name them + # Any contract that claims to check "all 6 PVE nodes" should name them for f in *.prose.md; do [ -f "$f" ] || continue - if grep -q "5-node\|5 node\|5 Proxmox\|all.*PVE.*node" "$f" 2>/dev/null; then - for node in amdpve minipve storepve acerpve ocupve; do - grep -q "$node" "$f" || { - echo " ⚠️ $f: references 5 nodes but '$node' not mentioned" - WARNINGS=$((WARNINGS + 1)) - } - done + if grep -qE "\b5-node\b|\b5 node\b|\b5 Proxmox\b|all 5 PVE" "$f" 2>/dev/null; then + echo " ⚠️ $f: still references 5-node cluster (migrated to 6 nodes 2026-07-20)" + WARNINGS=$((WARNINGS + 1)) fi done fi