From 615b6ab2a8722b47027d4635d8ea541dba99f0a7 Mon Sep 17 00:00:00 2001 From: oskar Date: Thu, 30 Jul 2026 15:36:29 +0200 Subject: [PATCH] docs(architecture): Etap 0 changes appendix in recon; telegram-frontend pattern in legacy doc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RECON appendix summarizes the whole etap-0 cleanup (topology dormant status, hosts reconciliation, dead-code removal, legacy decision), carries the runbook line for the stale chelsty pending action (rm /opt/homelab/actions/pending/redeploy-chelsty-infra-ha-diag-agent.json — verified the only chelsty-targeted pending file 2026-07-30), and lists discrepancies found but out of scope: lustro watchtower, stale solaria/chelsty world-state keys, piha naming-drift duplicate keys, gokapi still down with a stuck pending redeploy, outline/joplin/umami still lacking services/ dirs. Co-Authored-By: Claude Fable 5 --- .../RECON-multiagent-2026-07-27.md | 88 +++++++++++++++++++ docs/architecture/ai-cluster-LEGACY.md | 4 +- 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/docs/architecture/RECON-multiagent-2026-07-27.md b/docs/architecture/RECON-multiagent-2026-07-27.md index 2a8f48f..7138524 100644 --- a/docs/architecture/RECON-multiagent-2026-07-27.md +++ b/docs/architecture/RECON-multiagent-2026-07-27.md @@ -549,3 +549,91 @@ Decisions a human must make; no recommendations attached. accepted policy and which are defects, and whether "event emitted but unroutable" should be visible anywhere. At stake: the difference between "monitored" and "logged". + +--- + +## Etap 0 changes (2026-07-28) + +Repo-only truth cleanup driven by this recon (commits 2026-07-28 → 2026-07-30, +branch `task/porzadki-topologia` plus earlier etap-0 commits already on master). +No runtime state was touched. + +**Topology / nodes** + +- `inventory/topology.yaml`: chelsty-infra and chelsty-ha marked + `status: dormant` (site hardware down since ~2026-06-01, pending physical + revival — F20.12 / open question 6); per-node service enumerations removed — + `hosts//services.yaml` is authoritative (F20.1-2); `deployment.mode` + corrected to `push` (F20.10); lustro added as a full monitored node with its + duty cycle documented (nightly ~23:30 power-off, one liveness cycle per day — + same pattern as solaria, F20.11). +- Supervisor reads `status: dormant` from `inventory/topology.yaml` + (`_load_dormant_nodes`) and skips desired-state loading, disk-cleanup and + node-alert generation for dormant nodes — replacing the hardcoded + chelsty-name checks (topology is readable from the supervisor's runtime + context, so no env-var fallback was needed). + +**hosts/ reconciliation (B6/F20)** + +- `hosts/solaria/services.yaml`: added stability-agent, node_exporter, and + planner-agent (`monitor: false`, legacy ai-cluster family, retirement + candidate). +- `hosts/vps/services.yaml`: added stability-agent, npm, outline, + joplin-server, umami (all verified healthy in world state 2026-07-30); + humanai-mailer / humanai-landing added as `unmanaged: true` + + `monitor: false` (hand-run, no compose labels); ai-cluster deliberately gets + NO entry — comment block points at `ai-cluster-LEGACY.md`. +- `hosts/piha/services.yaml`: single comment block enumerating the ~28 known + unmanaged containers (B5) — bringing them in is a later stage (open + question 5). +- `hosts/saturn/services.yaml`: created with an explicit empty service list + (dev workstation / orchestrator, nothing monitored — F20.4). +- `hosts/lustro/services.yaml`: added node-exporter and piper-tts (verified + running); watchtower noted as deliberately unmanaged. +- `services/stability-agent/service.yaml`: `owner_node: chelsty` → + `per-host` (B7/F20.5). +- `services/mosquitto/service.yaml`: marked NOT DEPLOYED / legacy manifest — + matches nothing that runs (C8/F20.6); kept for reference pending open + question 7. + +**Dead code** + +- `scripts/deploy/deploy-role.sh` deleted (referenced nonexistent `roles/`, + B7). +- Supervisor: `mqtt_unreachable` removed from `CONTAINER_RESTART_TRIGGERS` + (dead branch — the observer never creates incidents with that trigger_type, + D15). + +**Legacy** + +- `docs/architecture/ai-cluster-LEGACY.md`: ai-cluster is retired in place, + not migrated (bus idle since 2026-06-09, C9); branch `task/ai-cluster-solaria` + stays unmerged as documentation; surviving patterns listed; runtime + retirement runbook (stop stack on vps, observe `free -m`, remove containers) + to be executed in a separate supervised session. + +**Runbook — stale chelsty action (from 1c, do in a runtime session)** + +- On vps: `rm /opt/homelab/actions/pending/redeploy-chelsty-infra-ha-diag-agent.json` + — the only chelsty-targeted pending action as of 2026-07-30 (verified via + `grep -l chelsty /opt/homelab/actions/pending/*.json`). + +**Discrepancies found during this pass, NOT covered by etap 0** + +- lustro also runs `watchtower` (auto-updater) — undocumented anywhere; + whether unattended container updates on a monitored node are policy needs a + decision. +- World state carries stale solaria keys (`solaria/executor`, + `solaria/operator-ui`, `solaria/kb-postgres`, `solaria/paperless-worker`) for + containers that do not run there (B5 counted 5) — world state never prunes + departed services; same mechanism keeps all `chelsty-infra/*` keys alive. +- piha world state holds duplicate keys from naming drift + (`piha/node-exporter` vs `piha/node_exporter`, `immich-server` vs + `immich_server`, generic `app`/`db`/`database`/`broker` keys) — event-source + naming is not normalized. +- `gokapi` remains desired-but-down with its `redeploy` action stuck in + `pending` (F20.3); the wider undrained queue (18 pending actions) is open + question 4 — untouched here. +- `outline`, `joplin`, `umami` run on vps with no `services/` dir on + master — their hosts entries added in etap 0 document this; actual GitOps + cutover (compose in repo) is still pending (F20.2). diff --git a/docs/architecture/ai-cluster-LEGACY.md b/docs/architecture/ai-cluster-LEGACY.md index 3f04f2e..05dc685 100644 --- a/docs/architecture/ai-cluster-LEGACY.md +++ b/docs/architecture/ai-cluster-LEGACY.md @@ -32,7 +32,9 @@ z ai-clustra **wzorce projektowe**: - allowlisty kształtu komend przed wykonaniem czegokolwiek na hoście — z lekcją z reconu (A2): allowlist musi być **egzekwowana i celowana** (martwa stała `SERVICE_NAMES` + substring-match po `docker ps` to antywzorzec), -- tryb preview/diagnose przed wykonaniem. +- tryb preview/diagnose przed wykonaniem, +- frontend telegramowy jako kanał operatorski (wzorzec żyje dalej w + agent-system/telegram-bot na piha — ten zostaje). Kod ai-clustra **nie jest** przenoszony.