diff --git a/hosts/solaria/runtime/node-agent/docker-compose.override.yml b/hosts/solaria/runtime/node-agent/docker-compose.override.yml index df9b609..2a489b9 100644 --- a/hosts/solaria/runtime/node-agent/docker-compose.override.yml +++ b/hosts/solaria/runtime/node-agent/docker-compose.override.yml @@ -1,16 +1,3 @@ -# MITYGACJA TYMCZASOWA (M1) — założona 2026-08-04. -# NODE_TYPE=lte_node wyłącza run_safe_cleanup() (niefiltrowany -# `docker container prune`) na czas backfillu embed (faza mailowa KB). -# Incydent: kb/incidents/2026-07-30-ollama-solaria-vanish.md (§7, M1). -# Bez tego każdy zatrzymany kontener na SOLARII znika w ≤60 s — również taki -# z `restart: unless-stopped`, zatrzymany świadomie przez operatora. -# Warunek zdjęcia: R1 (filtrowanie prune po restart policy / labelu compose) -# wdrożony na tym nodzie — R1–R3 są w toku po stronie subsystemu A. -# Po zdjęciu przywrócić: NODE_TYPE=ai_node. -# Zakres wyłączenia: `lte_node` pomija CAŁY cleanup, więc na czas mitygacji -# nie są też sprzątane dangling images ani build cache — pilnować miejsca -# na dysku. Monitoring, eventy i dispatch akcji działają bez zmian -# (self.node_type jest czytane wyłącznie w run_safe_cleanup i dwóch liniach logu). services: node-agent: # Docker GID on SOLARIA is 996 (not the Debian default 999 the base compose @@ -23,7 +10,11 @@ services: - "996" # host docker gid, verified 2026-07-30 (getent group docker → 996) environment: - NODE_NAME=solaria - - NODE_TYPE=lte_node # M1 (2026-08-04) — było: ai_node; przywrócić po R1 + # ai_node = dangling images + kontenery + build cache, ale NIGDY + # `image prune -a` (skasowałoby obrazy runtime Ollamy). Ustawione jawnie, + # zgodnie z konwencją pozostałych hostów, mimo że solaria jest w AI_NODES + # w node_agent.py i default dałby to samo. + - NODE_TYPE=ai_node - VPS_EVENTS_HOST=100.95.58.48 - VPS_EVENTS_USER=oskar - VPS_EVENTS_PATH=/opt/homelab/events diff --git a/hosts/vps/runtime/node-agent/docker-compose.override.yml b/hosts/vps/runtime/node-agent/docker-compose.override.yml index 2be640a..c2bd379 100644 --- a/hosts/vps/runtime/node-agent/docker-compose.override.yml +++ b/hosts/vps/runtime/node-agent/docker-compose.override.yml @@ -3,18 +3,11 @@ services: environment: - NODE_NAME=vps - CHECK_INTERVAL=60 - # TEMPORARY mitigation (M1) for the unfiltered-prune incident - # (kb/incidents/2026-07-30-ollama-solaria-vanish.md §7). node-agent runs - # `docker container prune()` with NO filters every CHECK_INTERVAL, and the - # Docker API removes EVERY non-running container regardless of restart - # policy or compose labels — this already destroyed ollama@solaria. On VPS - # the loss is worse: humanai-mailer and humanai-landing have no compose - # definition in this repo, so a pruned container cannot be recreated. - # node_type is read ONLY by run_safe_cleanup() (plus two log lines), so - # lte_node disables cleanup and nothing else — monitoring, event shipping - # and action dispatch keep working. - # REMOVE once R1 (explicit-enumeration prune) is deployed to VPS. - - NODE_TYPE=lte_node + # No NODE_TYPE here on purpose: `vps` is in none of node_agent.py's + # LTE_NODES / SD_CARD_NODES / AI_NODES sets, so _resolve_node_type() falls + # through to "standard" — dangling images + stopped containers + build + # cache, plus the control-plane filesystem rotation (that one is gated on + # node_name == VPS_NODE_NAME, not on node_type). This is the pre-M1 state. # host network mode: node-agent on VPS shares the host's network namespace # so that localhost:18180 resolves to the control-plane's exposed port. # Without this, localhost inside the container is the container's own loopback