docs(backlog): zamknij deploy.sh vps bug + 2 nowe wpisy (prom-reload, chelsty node_exporter)

- 🔴 deploy.sh vps↔control-plane → Zamknięte (fix 3b71707, guard deploy-local.sh)
- krok 2 planu floty (targety 100.x) → ZROBIONE (7d4014e)
- NOWE: deploy-node.sh nie reloaduje config-driven serwisów (cicha rozbieżność deploy↔config)
- NOWE: zbadać chelsty/chelsty-infra node_exporter DOWN z VPS
- Problem B (ghost kontenery) pozostaje otwarty osobno

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Oskar Kapala 2026-06-26 17:30:26 +02:00
parent 39ab34643d
commit 48107ef2c1

View file

@ -22,7 +22,9 @@ historia incydentów, out-of-band watchdog.
wzorzec `services/vikunja/`): compose + `env.example` + `service.yaml` + README +
`healthcheck.sh`; rejestracja w `hosts/vps/services.yaml` + `inventory/topology.yaml`;
exposure `tailscale-internal`; pusty scrape na start (self + lokalny `node_exporter` VPS).
2. Inwentaryzacja nodów floty `100.x` do scrape (osobny krok).
2. ✅ ZROBIONE (2026-06-26, commit `7d4014e`) — Inwentaryzacja nodów floty `100.x` do
scrape. Dodane: piha/solaria/lustro (`node:` label), vps zachowany. Saturn pominięty
(workstation), chelsty/chelsty-infra pominięte (node_exporter down z VPS → osobny wpis).
3. Container-layer exporter (cAdvisor lub lekki docker-state) — `node_exporter` nie widzi
kontenerów.
4. Reguły liveness (`up==0 for: 5m`) w Prometheusie.
@ -37,25 +39,48 @@ historia incydentów, out-of-band watchdog.
## Aktywne
### 🔴 KRYTYCZNY — `deploy.sh vps` niszczy control-plane (project-name divergence)
### `deploy-node.sh` nie reloaduje config-driven serwisów (cicha rozbieżność deploy↔config)
**Data**: 2026-06-24 (wykryte), 2026-06-25 (incydent potwierdzony w produkcji)
**Źródło**: sesja 2026-06-24 + sesja 2026-06-25 (`docs/sessions/2026-06-25.md`)
**Problem A — deploy.sh vps niszczy mózg**: `control-plane` jest w `hosts/vps/services.yaml`
jako zwykły serwis pętli `deploy-node.sh`. Pętla używa innego `COMPOSE_PROJECT_NAME` niż
`deploy-local.sh` (który ma `cwd=services/control-plane`). Niezgodność → Recreate →
`No such container: <hash>_control-plane-observer``set -e` przerywa pętlę →
observer/supervisor/executor/ui znikają. **Każdy `deploy.sh vps` rozkłada mózg.**
**Problem B — ghost kontenery w panelu**: martwe kontenery ze starych project-name'ów
**Data**: 2026-06-26
**Źródło**: sesja 2026-06-26 (`docs/sessions/2026-06-26.md`)
**Problem**: po zmianie `prometheus.yml` (bez zmiany obrazu) `deploy-node.sh` NIE
recreate'uje kontenera. Compose widzi "kontener działa, obraz ten sam" → zostawia
Running, NIE podmienia configu → Prometheus trzyma stary config w pamięci. **Deploy
raportuje green, a zmiana configu nie wchodzi w życie.** Dziś wymagało ręcznego
`docker compose ... up -d --force-recreate`. Dotyczy KAŻDEGO serwisu config-driven bez
zmiany obrazu (nie tylko Prometheus).
**Fix**: po zmianie configu serwisu albo `--force-recreate`, albo POST `/-/reload` dla
serwisów z lifecycle API (fleet-prometheus ma `--web.enable-lifecycle`). Rozważyć
wykrywanie zmiany plików config w deploy i wymuszanie recreate.
---
### Zbadać: chelsty + chelsty-infra `node_exporter` DOWN z VPS
**Data**: 2026-06-26
**Źródło**: sesja 2026-06-26 (`docs/sessions/2026-06-26.md`)
**Problem**: przy inwentaryzacji targetów floty do fleet-prometheusa, `node_exporter`
na chelsty i chelsty-infra był nieosiągalny z VPS — pominięte w scrape. To LTE edge
(intermittent uplink), więc DOWN może być normą, ale wymaga rozróżnienia: brak
node_exportera vs odcięty uplink vs zablokowany port.
**Fix**: ustalić, czy node_exporter w ogóle działa na obu chelsty (compose/proces),
czy jest osiągalny po Tailscale z VPS, i czy ma sens go scrape'ować mimo LTE
(prawdopodobnie tak — `up==0` na LTE = sygnał dla anomaly detection, nie fałszywy alarm).
---
### Ghost kontenery w panelu (Problem B — pozostałość po project-name divergence)
**Data**: 2026-06-24 (wykryte), pozostaje otwarte po fixie Problemu A (2026-06-26)
**Źródło**: sesja 2026-06-24 + 2026-06-25 + 2026-06-26
**Problem**: martwe kontenery ze starych project-name'ów
(`8547b46c0317_control-plane-supervisor`, `12bd3059a70f_control-plane-observer` itp.)
są raportowane przez observera jako `error``System Status ERROR` w panelu mimo
zdrowego realnego mózgu.
**Incydent 2026-06-25**: mózg VPS zniknął, odtworzony ręcznie:
`ssh -t vps 'cd ~/homelab-codex-ws && git pull && cd services/control-plane && bash deploy-local.sh'`
**⚠️ NIE uruchamiać `deploy.sh vps` do czasu fixu — używać `deploy.sh control-plane`
lub `deploy-local.sh` bezpośrednio.**
**Fix**: usunąć `control-plane` z pętli `hosts/vps/services.yaml` ALBO dodać skip
w `deploy-node.sh` dla serwisów z własnym `deploy-local.sh`; potem `docker rm` ghostów.
**Status**: destrukcyjny deploy (Problem A) NAPRAWIONY (`3b71707`, patrz Zamknięte), ale
ghosty z poprzednich rozjazdów wciąż wiszą.
**Fix**: `docker rm` ghostów na VPS; rozważyć czyszczenie kontenerów z obcym
project-name przy deployu.
---
@ -192,6 +217,24 @@ Długoterminowo: `agent.sh new` powinien odmawiać jeśli żądana gałąź jest
## Zamknięte
### 🔴 KRYTYCZNY — `deploy.sh vps` niszczył control-plane — NAPRAWIONE (commit `3b71707`)
**Data**: 2026-06-24 (wykryte), 2026-06-25 (incydent w produkcji), 2026-06-26 (naprawione)
**Źródło**: sesja 2026-06-24 + 2026-06-25 + 2026-06-26 (`docs/sessions/2026-06-26.md`)
**Było (Problem A)**: `control-plane` w `hosts/vps/services.yaml` jako zwykły serwis
pętli `deploy-node.sh`. Pętla używała innego `COMPOSE_PROJECT_NAME` niż `deploy-local.sh`
(cwd=`services/control-plane`). Niezgodność → Recreate → `No such container:
<hash>_control-plane-observer` → `set -e` przerywa pętlę → observer/supervisor/executor/ui
znikają. Każdy `deploy.sh vps` rozkładał mózg (potwierdzone w produkcji 2026-06-25).
**Naprawione**: guard w `deploy-node.sh` pomijający serwisy z własnym
`services/<svc>/deploy-local.sh`. `control-plane` ZOSTAJE w `services.yaml` (gate
pytest+build nadal go testuje), pomijana jest tylko destrukcyjna pętla deployu.
**Potwierdzone w boju**: `deploy.sh vps` wypisał `Skipping control-plane: ma własną
ścieżkę deployu`, mózg `Up 25h healthy`, nietknięty.
**Pozostało osobno**: ghosty z poprzednich rozjazdów (Problem B — patrz Aktywne).
---
### Flaky testy control-plane — state-leak w pytest — NAPRAWIONE (commit `992ff7c`)
**Data**: 2026-06-24 (zgłoszone), 2026-06-25 (naprawione)