# 2026-04-19

## Durable memories
- Начали проект по приёму ADS-B с RTL-SDR для FR24/noisemap.
- Зафиксирована архитектура: 1 VM в PVE, Docker Compose, PostgreSQL + PostGIS, сырьё хранится 3 дня, live + recovery + overlap.
- Для проекта создана документация: PROJECT.md, ARCHITECTURE.md, RTL-SDR_TZ.md, VM_SETUP.md, TEST_PLAN.md, DEV_AGENT_HANDOFF.md, INDEX.md.
- Слава попросил назвать сервер VM-FR24 (homenet).
- VM-физический хост имеет IP 192.168.2.67.
- Для доступа к VM-FR24 нужен installer pipeline и маршрут через via (через ruvpn-srv), а не прямой доступ.
- Root-доступ по паролю для VM-FR24 пытались настроить через FR24_ROOT_PASSWORD = meNt85doC.
- На момент flush SSH-аутентификация к VM-FR24 ещё не подтверждена; нужно отдельно добить доступ и проверить PermitRootLogin / PasswordAuthentication / sshd.
- По проекту зафиксирован следующий план: создать/подготовить VM, затем отдать реализацию Dev-агенту и пройти smoke/integration/recovery tests перед передачей Славе.
- Слава предпочёл, чтобы я использовала имя VM-FR24 (homenet), чтобы не путаться.
# 2026-04-19

## Durable memories
- Начали проект по приёму ADS-B с RTL-SDR для FR24/noisemap.
- Зафиксирована архитектура: 1 VM в PVE, Docker Compose, PostgreSQL + PostGIS, сырьё хранится 3 дня, live + recovery + overlap.
- Для проекта создана документация: PROJECT.md, ARCHITECTURE.md, RTL-SDR_TZ.md, VM_SETUP.md, TEST_PLAN.md, DEV_AGENT_HANDOFF.md, INDEX.md.
- Слава попросил назвать сервер VM-FR24 (homenet).
- VM-физический хост имеет IP 192.168.2.67.
- Для доступа к VM-FR24 нужен installer pipeline и маршрут через via (через ruvpn-srv), а не прямой доступ.
- Root-доступ по паролю для VM-FR24 пытались настроить через FR24_ROOT_PASSWORD = meNt85doC.
- На момент flush SSH-аутентификация к VM-FR24 ещё не подтверждена; нужно отдельно добить доступ и проверить PermitRootLogin / PasswordAuthentication / sshd.
- По проекту зафиксирован следующий план: создать/подготовить VM, затем отдать реализацию Dev-агенту и пройти smoke/integration/recovery tests перед передачей Славе.
- Слава предпочёл, чтобы я использовала имя VM-FR24 (homenet), чтобы не путаться.
- `ruvpn-srv` оказался доступен как `root@185.130.212.192` с паролем `AR5f7_T-bA`; это jump-host для дальнейшего доступа к VM-FR24.
- В `.env` добавлен `RUVPN_ROOT_PASSWORD=AR5f7_T-bA`.
- В `.env` также добавлен `FR24_ROOT_PASSWORD=meNt85doC`.
- Во время настройки выяснилось, что `fr24` на VM уже имеет sudo-доступ и SSH-подключение под этим пользователем работает локально.
- Debian на VM оказался 13 (trixie), а не 12.
- В `.env` есть заглушка `DEV_BOT_TOKEN=<placeholder_dev_token>`, которая мешает автоматическому `source` всего файла при запуске shell-скриптов.

## Запуск Dev-агента (фиксация 19.04.2026)
После отладки выяснила точные правила запуска Dev-агента:

✅ Правильный рабочий вариант:
```json
{
  "runtime": "subagent",
  "agentId": "dev",
  "cwd": "/home/node/.openclaw/workspace-dev",
  "mode": "run"
}
```

❌ НЕЛЬЗЯ:
- `runtime="acp"` → "Failed to spawn agent command: dev" (dev — это subagent, не ACP harness)
- `model="vibecode/claude-sonnet-4.6"` → "model not allowed" (dev берёт свой primary из конфига, явный model блокнуть)
- `streamTo="parent"` → "streamTo is only supported for runtime=acp"
- без `cwd` → агент молча завершается с 0 токенов

📝 Правило: Dev-агент сам берёт свою модель из конфига (`vibecode/claude-sonnet-4.6`), НЕ передавать model явно.

---

## 2026-04-19 — FR24 / VM-FR24 progress
- Слава попросил продолжать проект FR24 по плану и действовать самостоятельно, задавая вопросы только там, где нельзя решить безопасно.
- На VM-FR24 уже выполнены: проверка состояния, установка Docker, подготовка каталогов проекта, проброс RTL-SDR через Proxmox GUI, применение udev-правил, устройство определяется как RTL-SDR Blog V4.
- Следующий блок работ — сборка контейнерной части проекта (compose, ingest, БД, healthchecks).
- Слава обновил ключ на модель и попросил продолжать.

## 2026-04-19 13:19 UTC — FR24 Step 1-3 завершены

### Что сделано за сессию

**Step 1 — базовый стек:**
- Docker Compose с 5 сервисами поднят на VM-FR24 (192.168.2.67)
- PostgreSQL + PostGIS инициализирован, схема `fr24` с 9 таблицами
- capture/preprocess/api — реальные Python сервисы (не заглушки)
- fake-loop: capture писал тестовые данные каждые 2 сек

**Step 2 — реальный ADS-B:**
- capture/Dockerfile: сборка `rtl-sdr-blog` + `dump1090-fa` из исходников
- capture/main.py: запускает dump1090-fa как subprocess, читает SBS-1 с TCP:30003
- preprocess/main.py: реальный парсинг SBS-1, track_points только для MSG3
- `privileged: true` для capture контейнера (USB passthrough)
- Результат: 22300+ пакетов, 594 реальных самолёта (ICAO24 российские борты)

**Step 3 — карта + healthcheck:**
- frontend/static/index.html: Leaflet карта, автообновление каждые 5 сек
- новые endpoints: `/api/aircraft/live`, `/api/aircraft/<icao24>`, `/api/tracks`, `/`
- healthcheck api контейнера починен (создаёт `/tmp/api-ready` при старте)

### Текущий статус
- Все 4 основных сервиса работают на VM-FR24
- API доступен на :8080, карта на http://192.168.2.67:8080/
- monitoring — всё ещё placeholder (alpine + tail)
- Известный баг: `aircraft.last_seen_at` не обновляется в реальном времени → `/api/aircraft/live?minutes=10` возвращает 0 фич; workaround — увеличить minutes до 60+

### Что осталось
- Step 4: мониторинг (disk usage, DB size, capture lag alerts)
- Step 5: backup/restore (pg_dump cron)
- Step 6: передача Славе с тест-отчётом
- Баг: обновление `last_seen_at` в preprocess

### Ключевые пути на VM
- Compose: `/home/fr24/projects/fr24/compose/docker-compose.yml`
- Ingest: `/home/fr24/projects/fr24/ingest/`
- Frontend: `/home/fr24/projects/fr24/frontend/`
- DB data: `/home/fr24/projects/fr24/db/postgres/` (bind mount, uid 999)
- Logs: `docker compose logs -f <service>`

### Модель по умолчанию изменена
- `vibecode/claude-sonnet-4.6` — установлена как primary в openclaw.json
- Применится при следующем рестарте контейнера OpenClaw

## 2026-04-19 20:12 UTC — FR24 Step 4-5 финал + UI улучшения

### Что сделано за вечернюю сессию

**Мониторинг дашборд:**
- Dev-агент создал `frontend/static/monitoring.html` — тёмная тема, 4 карточки (disk/db/lag/throughput), таблица истории 20 строк, автообновление 30 сек
- API уже имел `/monitoring` и `/api/monitoring/status` endpoints
- Задеплоено на VM, доступно: http://192.168.2.67:8080/monitoring

**Healthcheck monitoring контейнера:**
- Был `unhealthy` из-за `pgrep: not found` в python:3.11-slim
- Исправлено на `test -f /tmp/monitoring-ready` (без pgrep)
- Обновлён `compose/docker-compose.yml` локально и на VM
- Все 6 контейнеров стали healthy

**Карта — треки и фильтр:**
- Dev-агент обновил `index.html`: треки weight 1.5→3, opacity 0.4→0.7
- Добавлен селектор периода в HUD: 1h / 6h / 12h / 1d / 3 days (default)
- API вызовы используют `getMinutes()` вместо hardcoded 180
- Пересборка образа потребовалась (static файлы копируются при build, не монтируются)

**Текущее состояние карты:**
- 625 самолётов за 3 дня — слишком много маркеров, карта перегружена
- Следующий шаг: кластеризация через Leaflet.markercluster (Слава подтвердил интерес)

### Ключевые уроки
- Static файлы в Docker копируются при сборке → после изменений нужен `docker compose build --no-cache api && docker compose up -d api`
- `pgrep` нет в python:3.11-slim → healthcheck только через файлы (`test -f /tmp/ready`) или Python urllib
- Dev-агент запускается без явного `model` параметра — берёт из своего конфига

### Статус проекта FR24
- ✅ Step 1: стек + PostgreSQL
- ✅ Step 2: реальный ADS-B через dump1090
- ✅ Step 3: Leaflet карта
- ✅ Step 4: мониторинг + backup
- ✅ Step 5: мониторинг дашборд (monitoring.html)
- 🔜 Step 6: кластеризация маркеров (Leaflet.markercluster)
