# MeshAI Handoff — 2026-06-09 ## Container Architecture The MeshAI Docker container (`meshai`) does **not** bind-mount `/opt/meshai` into the container. The only mount is: meshai_data:/data (persistent SQLite DB + config) The Python source and frontend bundle are **baked into the image** at build time via `COPY` in the Dockerfile. ## DEPLOY (ALL changes — Python or frontend) ```bash sudo docker compose build meshai && sudo docker compose up -d ``` **Python-only shortcut does NOT exist** — the repo is not bind-mounted into the container. A bare `restart` re-execs the baked image; your `.py` change will not load. Always use `build + up`. ### Verify Python changes loaded after build ```bash sudo docker logs meshai --tail 20 ``` (look for import errors or the handler name in startup logs) ### Verify frontend bundle shipped after build ```bash sudo docker exec meshai cat /app/meshai/dashboard/static/index.html \ | grep assets/index ``` (confirm hash changed from prior build) ## Session Changes (feature/mesh-intelligence) | Commit | Description | |--------|-------------| | `ae884b9` | Avalanche multi-line wire format, danger-level re-emit, GUI panel | | `bf5b346` | Avalanche wire format — use `_meshai_precomposed` bypass | | `5624a0b` | Wire avalanche to CENTRAL_AVY — central handler + consumer routing | | `a9d4ede` | Nullsafe `broadcast_pager_alerts` in quake panel | | `8e810d6` | Enable central feed source toggle for avalanche adapter | | `376b0db` | Add `reminders_wfigs.enabled` kill switch, default disabled | | `862d2dc` | Auto-cleanup stale fires (>7d unflagged + >30d tombstones hourly) | | `45ca536` | Fire digest — tighter format, 220-byte budget, 7d freshness gate | ## Open Items - **Avalanche danger_level scale**: TODO in `avy_handler.py` — verify Central's `data.data.danger_level` uses NAADS 5-point scale before flipping `feed_source="central"`. See docstring for details.