## 4. Контекст проекта (РЕЗЮМЕ для нового чата)

### Что это
elmAI — Android-приложение + Python-сервер для диагностики авто через ELM327.

### Текущая версия
**v0.48.0** (APK: https://obdai.ru/elmer.apk)

### Репозитории
- Сервер: https://gitea.services.ngcloud.ru/Nail/elmer (ветка master)
- Android: https://github.com/Repinoid/elmer-android (ветка relay-only)
- Сервер живёт на 5.172.178.213 (SSH: naeel@5.172.178.213, ключ ~/.ssh/naeel_vm_id_ed25519)

### Деплой
```bash
# ВСЕГДА сначала bump версии в android/app/build.gradle.kts!
cd /home/naeel/elmer/android && git add -A && git commit -m "..." && git push origin master
cd /home/naeel/elmer && tar czf /tmp/android-src.tar.gz --exclude='.git' --exclude='build' --exclude='.gradle' android/
scp -i ~/.ssh/naeel_vm_id_ed25519 /tmp/android-src.tar.gz naeel@5.172.178.213:/tmp/
ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 \
  "cd /opt/elmer && rm -rf android && tar xzf /tmp/android-src.tar.gz && \
   cd android && gradle wrapper --gradle-version 8.7 && \
   export ANDROID_SDK_ROOT=\$HOME/android-sdk && \
   ./gradlew clean assembleDebug && \
   cp app/build/outputs/apk/debug/app-debug.apk /opt/elmer/web/static/"
```

### Структура проекта
```
elmer/
  android/          — Android-приложение (Kotlin)
    .../client/
      MainActivity.kt    — UI + приёмники
      ElmForwardService.kt — BT/TCP-реле
      TestService.kt     — автономный тест ELM
  api/              — Flask API (Python)
    db.py           — БД (sessions + device_profiles)
    routes.py       — эндпоинты
    scripts.py      — скрипты L0/L1/L2
    parser.py       — парсинг ответов
    config.py, dtc.py, ping.py
  brain/            — LLM-клиент, промпты
  obd/              — ELM-протокол (Python)
    commands.py     — каталог AT-команд
    classifier.py   — классификация ответов
    connection.py   — SerialTransport
    probe.py        — пробинг ELM
    protocol.py     — стейт-машина AndrOBD
    state.py        — состояния/ответы
    timing.py       — адаптивный таймаут
  doc/              — Документация, сессии
  web/              — Flask web, статика
```

### Что сделано (сессия 2026-06-07)

#### Сервер
- **Пробинг ELM**: трехуровневый каскад (L0/L1/L2), профили в БД по MAC
- **Fix init**: больше не шлём ATAT1/ATSTxx (вешало клоны)
- **Скрипты под уровень**: L0 (5 PIDs), L1 (8 + VIN), L2 (14 + калибровки)
- **Рефакторинг**: код разбит на независимые модули (commands, classifier, connection...)

#### Android
- **Вывод**: append вместо overwrite (строки не перекрываются)
- **Таймер**: отдельный TextView, тикает только во время обмена (Engine Time)
- **TestService**: адаптивные таймауты, ATS0, \r терминатор

### Что НЕ сделано (TODO)
- Полевой тест на машине ← СЕЙЧАС
- Разбить MainActivity.kt
- Разбить ElmChecker.kt

### Важные правила
- ELM327 v1.5 — фейк, НЕ слать ATAT1/AT@1/AT@2/ATST/ATCAF1/ATCFC1
- Все статусы через append("\n..."), не tvStatus.text =
- Таймер операций (opTimerStart/Stop), не сессии
- Версию поднимать ВЕЗДЕ: build.gradle.kts, index.html (2 места), CHANGELOG.md, resume.txt, doc/architecture.md
- В проекте elmer — НИЧЕГО не делать без прямого указания
