diff --git a/docs/backlog.md b/docs/backlog.md index b44cc61..7d1ee31 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -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: _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: +_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//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)