docs: новое резюме для чата — raw-реле, 12 провалов, правила

This commit is contained in:
Repinoid
2026-07-10 12:54:53 +04:00
parent 129848d772
commit 15caff3204
+95 -7
View File
@@ -1,12 +1,100 @@
## 4. Контекст проекта (РЕЗЮМЕ для нового чата)
# Резюме elmAI — для нового чата
### Что это
elmAI — Android-приложение + Python-сервер для диагностики авто через ELM327.
> Создано: 2026-07-10 | Предыдущий чат: relay-отладка
### Текущая версия
<!-- !!! АКТУАЛЬНАЯ ВЕРСИЯ !!! -->
<!-- Перед деплоем bump в android/app/build.gradle.kts, index.html (2 места), CHANGELOG.md, resume.txt, doc/architecture.md -->
**v0.77.0-dev** (APK: https://obdai.ru/elmer.apk)
## Проект
elmAI — OBD2-диагностика через ELM327 + LLM (DeepSeek).
Два репо: `elmer/` (gitea, сервер) и `elmer/android/` (github, Android).
## Версии
| Компонент | Версия |
|-----------|--------|
| Основной APK (app) | v0.42.0-dev |
| Raw-реле APK (raw) | v0.4.0-dev |
## Два режима
1. **app/** — прямая диагностика: телефон→ELM→скрипт→батч→сервер→LLM
2. **raw/** — ретранслятор: Copilot→сервер→телефон→ELM→ответ. HTTP-поллинг.
## Raw-реле (raw/)
```
Copilot → POST /cmd → очередь SQLite → GET /cmd (телефон) → sendCommand() → ELM
Copilot ← GET /response?device_id=X&seq=N ← POST /response (телефон) ← ответ
```
**Ключевые файлы:**
- `ElmProtocol.kt` — 1:1 с `app/.../ElmProtocol.kt` (AndrOBD: ATSP0→ATAT1→ATST→ATS0→ATL0→ATE0)
- `ElmActor.kt` — single-thread executor
- `RawRelayService.kt` — foreground-сервис: BT→init→поллинг
- `RelayClient.kt` — HTTP к `/api/v1/elm/raw/*`
**handle()**: BUS_ERROR→ATPC+ATSP0, ERROR→ATWS, STOPPED→только state. MAX_RETRIES=3.
## Результаты тестов (клоны v1.5)
- Клон #1: 12/12 (100% первые 12), потом 13/16 (81%)
- Клон #2: 13/18 (72%)
- Закономерность: деградация после 10-12 команд
- Двигатель заглушен: PID не работают (STOPPED)
- RPM: 26882807, темп: 8488°C, дроссель: 0–1.5% — данные верны
## Сервер (obdai.ru, 5.172.178.213)
- nginx:443 → gunicorn:8000 (4 воркера)
- Flask: `web/app.py`, blueprints: routes, dtc, ping, raw_elm
- SQLite: `command_queue` (raw), `sessions` (app)
- `/api/v1/elm/raw/*`: hello, cmd×2, response×2, status
- **device_id обязателен** в `/response`
- **Flask использует** `/opt/elmer/templates/index.html` (не web/templates)
## 12 главных провалов (подробно: `doc/failures-journal.md`)
1. Не скопировал рабочий `app/ElmProtocol.kt` — писал с нуля
2. Доверял Opus вместо проверки AndrOBD
3. ATST96 убивает клон
4. ATI в init ломает порядок
5. drainInput() в write() — буферный сдвиг
6. Freeze detection через ATRV
7. AT-команды в handle()
8. Recovery ATSP0 в relayLoop
9. Дренаж 0100 после init
10. Тест без device_id
11. Версия сайта не обновлялась
12. APK не долетел до телефона
## Правила (`.github/copilot-instructions.md`)
1. НИЧЕГО не делать без прямого указания
2. На вопросы — только отвечать
3. Коммит + push после каждой правки
4. При деплое — bump версии в build.gradle.kts
5. Формат: fix/feat/refactor/bump/docs
6. ELM327 — только как AndrOBD, без самодеятельности
7. Рассуждение ≠ команда
## Деплой raw APK
```bash
cd android
sed -i 's/appVersionCode = XX/appVersionCode = YY/' raw/build.gradle.kts
sed -i 's/X.Y.Z-dev/X.Y+1.Z-dev/' raw/build.gradle.kts
git add -A && git commit -m "bump vX.Y+1.Z-dev" && git push origin opus-fixes
scp raw/build.gradle.kts raw/src/.../*.kt obdai.ru:/opt/elmer/android/raw/
ssh obdai.ru './gradlew :raw:assembleDebug && cp ...apk /opt/elmer/web/static/elm-raw-v022.apk'
# Обновить версию в /opt/elmer/templates/index.html и /opt/elmer/web/templates/index.html
```
## Ключевые документы
- `doc/failures-journal.md` — 12 провалов
- `doc/architecture.md` — полная архитектура
- `doc/diagnostic-logic.md` — режимы диагностики
- `STRUCTURE.md` — все файлы и папки
### Репозитории
- Сервер: https://gitea.services.ngcloud.ru/Nail/elmer (ветка **dynamic-tests**)