# Sesja 2026-06-10/11 — lustro SSH shipping fix + ha-diag-agent piha

## Cel

Naprawa shippingu eventów lustro → VPS; domknięcie deploy-configu ha-diag-agent na piha;
zachowanie poison-quarantine (Codex) do osobnego review.

---

## GŁÓWNE: LUSTRO event shipping — NAPRAWIONY (merged `a5a1352`)

### Root cause

`_ship_events_to_vps()` (`services/node-agent/src/node_agent.py`) woła `ssh` **bez `-i`**,
więc klucz jest szukany w `$HOME/.ssh` = `/home/homelab/.ssh` (kontener działa jako
uid 1000 `homelab` od dodania `user: "1000:1000"` do bazowego
`services/node-agent/docker-compose.yml`). Override lustra montował klucz w `/root/.ssh`
— **ślepy mount**, ssh tam nie patrzy → `oskar@100.95.58.48: Permission denied`.

### Fix

`hosts/lustro/runtime/node-agent/docker-compose.override.yml`:

```yaml
- /home/pi/.ssh:/home/homelab/.ssh:ro   # było: /root/.ssh — ślepe
```

Klucz `pi@pimirror2` dodany do `authorized_keys` `oskar@VPS`.
uid match (pi=1000 = homelab=1000) spełnia strict ownership check OpenSSH.

### Weryfikacja

- 5 nodów NOMINAL w world state; lustro w `/opt/homelab/world/nodes.json` (online, świeży `last_seen`)
- 7600+ eventów backlogu spłynęło na VPS (`/opt/homelab/events/lustro/`)
- Staging na lustrze drenowany do zera (`--remove-source-files` działa)
- "Permission denied" zniknął z logów node-agenta

### Diagnoza — lekcja verify-before-fix

Oba agenty (Claude Code, Codex) błędnie wskazały observer (poison event / race)
na **nieaktualnym stanie** (`events=2` z ręcznego testu). Verify-before-fix obalił
obie hipotezy: `events/lustro` na VPS było puste → problem w warstwie **dostarczania**
(klucz SSH), nie w observerze.

---

## ha-diag-agent piha — deploy config merged (`5e9db5c`), deploy NIEDOKOŃCZONY

- `.env` utworzony na piha: `/opt/homelab/config/ha-diag-agent/.env`, chmod 600
- **ALE token = PLACEHOLDER** — chelsty-ha offline → brak tokenu i połączenia
- Przed `shadow_mode=false`: target restartu w supervisorze = nazwa kontenera
  `homeassistant5`; curl endpointu z tokenem musi dać HTTP 200
- Decyzja PENDING: cel HA = chelsty-ha vs HA Ken (`homeassistant5` na piha —
  z kontenera NIE `localhost`)

---

## observer poison-quarantine (Codex)

Zachowany na branchu `task/observer-poison-quarantine` (`78c9e4a`) — **NIE w master**.
Do osobnego review: czy observer realnie wiesza się na malformed evencie
(poison NIE był przyczyną lustra; hipoteza niezweryfikowana).
Realny bug → merge; inaczej → drop.

---

## 🔴 FLOTA-BOMBA — odkryta, NIE naprawiona (backlog, BLOKUJĄCE)

solaria / piha / chelsty to wciąż **stare root kontenery** node-agenta
(piha Created 2026-05-27, uid 0). Ich mount `/root/.ssh` działa tylko dlatego,
że kontenery są sprzed `user: "1000:1000"`. Pierwszy `--force-recreate` / reboot
hosta / update obrazu przełączy je na uid 1000 i shipping padnie jak na lustrze.
**NIE RECREATE bez fixu.** Szczegóły i fix: `docs/backlog.md`.

---

## Tech-debt złapany w sesji

→ wpisany do `docs/backlog.md` (flota-bomba, ha-diag-agent blocked,
poison-quarantine review, `--omit-dir-times`, stale komentarz node_agent.py,
shipping success na `logger.debug`, event-bloat lustro na VPS).

## Session 20:19

### Commits
fa59625 docs(ha-diag-agent): replace curl verify commands with docker exec
d7e0d31 fix(ha-diag-agent): remove host port mapping for 8087

### Files changed
 services/ha-diag-agent/DEPLOY.md          | 4 ++--
 services/ha-diag-agent/README.md          | 4 ++--
 services/ha-diag-agent/docker-compose.yml | 3 ---
 services/ha-diag-agent/service.yaml       | 3 ---
 4 files changed, 4 insertions(+), 10 deletions(-))

### Deploys
None recorded

### Narrative
> _user-provided summary_

## Session 20:35

### Commits
(brak nowych — commity d7e0d31 i fa59625 z tej sesji trafiły do mastera przed tym wpisem)

### Files changed
(bez zmian — zob. Session 20:19)

### Deploys
None recorded

### Narrative
> _user-provided summary_
