- docs/sessions/2026-06-09-flota-recovery-lustro-register.md: flota recovery (root cause aerbot group, 3 warstwy maskujące), lustro register stan+plan, fix-event-bloat i OOM pending, worktree gotcha - docs/backlog.md: nowy plik — tech-debt tracker; wpisy: --omit-dir-times, oskar∈aerbot deklaratywnie, worktree per task, observer staleness - .claude/skills/node-onboarding/SKILL.md: step table aktualizacja (PROVEN: 20-base, 30-node-agent; WRITTEN: 40-register, 50-verify), 3 nowe gotchas (rsync perm, observer restart, worktree branch) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.5 KiB
Tech-debt backlog
Centralny tracker tech-długu i znanych usterek. Wpisy ze sesji — dodawaj z datą i kontekstem.
Aktywne
rsync --omit-dir-times (node-agent)
Data: 2026-06-09
Źródło: flota recovery session
Objaw: rsync exit code 23 po każdym push — set-times na katalogu /opt/homelab/events/
zwraca EPERM (oskar nie jest właścicielem katalogu; aerbot jest). Pliki są kopiowane poprawnie,
ale exit 23 zaśmieca logi i może maskować prawdziwe błędy.
Fix: dodać --omit-dir-times do wywołania rsync w node-agent.py.
Lokalizacja: services/node-agent/src/node_agent.py — wywołanie rsync w pętli push.
Deklaratywny zapis oskar ∈ aerbot w manifeście VPS
Data: 2026-06-09
Źródło: flota recovery — root cause: oskar spoza grupy aerbot(1000) → rsync Permission denied
Problem: przynależność do grupy jest zarządzana ręcznie (usermod -aG 1000 oskar ad-hoc).
Brak gwarancji po przeinstalowaniu VPS lub zmianie usera.
Fix: dodać do hosts/vps/host.yaml lub hosts/vps/capabilities.yaml sekcję
users: oskar: groups: [aerbot] — i wyegzekwować w deploy/bootstrap skrypcie VPS.
Alternatywa: zmienić właściciela /opt/homelab/events/ na oskar:oskar i zaktualizować
node-agent deploy skrypty.
Rozdzielenie worktree per task (agent.sh)
Data: 2026-06-09
Źródło: sesja — homelab-codex-ws-node-onboarding używany raz dla task/node-onboarding,
raz dla task/fix-event-bloat przez ręczne git checkout.
Problem: jeden worktree współdzielony przez dwa branche = anty-wzorzec. git branch
mogło wskazywać zły branch; + w listingu = pozornie "w innym worktree" ale nieprawda.
Prowadzi do commitowania na złej gałęzi.
Fix: egzekwować — jeden task = jeden worktree (agent.sh new <task-name>). Przy wejściu
do worktree zawsze git branch --show-current i weryfikacja .agent-task.
Długoterminowo: agent.sh new powinien odmawiać jeśli żądana gałąź jest już sprawdzona.
Zamknięte
Observer staleness — martwy node pokazywany NOMINAL
Data: 2026-06-08 (złapane), status: OTWARTY w sensie implementacji
Problem: observer/supervisor trzyma ostatni znany stan; brak heartbeat TTL.
Chelsty-infra milczy, ale status NOMINAL podważa zaufanie do panelu.
Fix: heartbeat TTL → po przekroczeniu oznacz status stale lub down.
Powiązane: brain-watchdog ślepy na per-node freshness.
(Otwarty jako TODO implementacyjny — przeniesiony z sesji 2026-06-08)