# Правила для 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