Files
elmer/.github/copilot-instructions.md
T

106 lines
4.6 KiB
Markdown

# Правила для GitHub Copilot
## 1. Коммит после каждой правки
После **любого** изменения кода (исправление бага, рефакторинг, добавление фичи) — сразу делать коммит с осмысленным сообщением:
```bash
git add -A && git commit -m "краткое описание" && git push origin master
```
- Без накопления изменений
- Без "потом закоммичу"
- Один коммит = одна правка
## 2. При деплое ВСЕГДА повышать версию
Перед **каждым** деплоем APK на сервер — инкрементировать патч-версию в `android/app/build.gradle.kts`:
```
versionName = "0.42.0-dev" → versionName = "0.43.0-dev"
```
### Процедура
1. Открыть `android/app/build.gradle.kts`
2. Увеличить номер в `versionName` (только патч, Z в X.Y.Z-dev)
3. Закоммитить с сообщением `"bump vX.Y.Z-dev"`
4. Затем — сборка и деплой
### Пример
```
Было: versionName = "0.42.0-dev"
Стало: versionName = "0.43.0-dev"
```
## 3. Формат коммитов
- `fix: ...` — исправление бага
- `feat: ...` — новая фича
- `refactor: ...` — переработка кода
- `bump: ...` — повышение версии
- `docs: ...` — документация
## 4. Контекст проекта (РЕЗЮМЕ для нового чата)
### Что это
elmAI — Android-приложение + Python-сервер для диагностики авто через ELM327.
### Текущая версия
**v0.47.0-dev** (APK: https://obdai.ru/elmer.apk)
### Репозитории
- Сервер: https://gitea.services.ngcloud.ru/Nail/elmer (ветка master)
- Android: https://github.com/Repinoid/elmer-android (ветка master)
- Сервер живёт на 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)
app/src/.../elm/ — ElmProtocol.kt, ElmChecker.kt
app/src/.../ui/ — MainActivity.kt
api/ — Flask API (Python)
brain/ — LLM-клиент (Python)
obd/ — ELM-протокол (Python)
doc/ — Документация, сессии
web/ — Flask web, статика
```
### Ключевые файлы
- `android/app/build.gradle.kts` — versionName (менять при КАЖДОМ деплое)
- `android/.../elm/ElmProtocol.kt` — стейт-машина AndrOBD (init, sendCommand)
- `android/.../elm/ElmChecker.kt` — checkDevice, checkEcu, scanDtc
- `android/.../ui/MainActivity.kt` — UI (~470 строк, надо разбить)
### Что уже исправлено (сессия 2026-06-06)
- ELM v1.5 совместимость (init без ретраев, skip v2-команд)
- Статус-строка: append вместо overwrite
- BT-подключение: connect() идемпотентный
- Все таймауты сокращены (2000-3000мс вместо 5000-10000мс)
### Что НЕ сделано (TODO)
- Разбить MainActivity.kt (~470 -> <=200 строк)
- Разбить ElmChecker.kt (~270 -> <=200 строк)
- Подробные комментарии перед функциями
- Полевой тест на машине
### Важные правила
- ELM327 v1.5 — фейк (клоны v1.0/v1.4), НЕ слать ATAT1/AT@1/AT@2/ATST
- Все статусы через appendStatus("\n..."), не tvStatus.text =
- Таймер инита макс 14 секунд (было 88)
- Подробности: doc/session-2026-06-06.md