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
|
accepted policy and which are defects, and whether "event emitted but
|
||||||
unroutable" should be visible anywhere. At stake: the difference between
|
unroutable" should be visible anywhere. At stake: the difference between
|
||||||
"monitored" and "logged".
|
"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ą
|
- allowlisty kształtu komend przed wykonaniem czegokolwiek na hoście — z lekcją
|
||||||
z reconu (A2): allowlist musi być **egzekwowana i celowana** (martwa stała
|
z reconu (A2): allowlist musi być **egzekwowana i celowana** (martwa stała
|
||||||
`SERVICE_NAMES` + substring-match po `docker ps` to antywzorzec),
|
`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.
|
Kod ai-clustra **nie jest** przenoszony.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue