docs(architecture): Etap 0 changes appendix in recon; telegram-frontend pattern in legacy doc
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 <noreply@anthropic.com>
This commit is contained in:
parent
89454ea7e1
commit
615b6ab2a8
|
|
@ -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/<node>/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/<name>` dir on
|
||||
master — their hosts entries added in etap 0 document this; actual GitOps
|
||||
cutover (compose in repo) is still pending (F20.2).
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue