hermes-android/agents/antigravity/done/TASK-2026-08-24-10-cleanup-and-release.md

14 KiB
Raw Blame History

Task 10: Чистка мёртвого слоя и подготовка релиза (hermes-android)

Repo: ochenstarik-ui/hermes-android Assigned to: Antigravity (режим оркестратора, два кодера) Priority: HIGH Date: 2026-08-24 Base SHA: 9e3aa0238f4be2b8b9f3653ea9fe1fe1fc60e909


Кодер 1

Выполненные задачи

  1. DEAD-01: Перенос зависимости DataStore и удаление мёртвого слоя
    • Перенёс объявление val Context.dataStore: DataStore<Preferences> напрямую в MigrationHelper.kt.
    • Проверил MigrationOnceTest — 100% PASS.
    • Удалил устаревшие файлы: ConnectionsScreen.kt, ConnectionsViewModel.kt, SessionsScreen.kt, SessionsViewModel.kt, HermesGatewayRepository.kt, ConnectionRepository.kt.
  2. DEAD-02: Очистка мелкого мёртвого кода
    • HermesApplication.kt: удалён неиспользуемый onTerminate().
    • MultiHostModels.kt: удалены A2AContextBinding и UnifiedMessageSource.A2A.
    • GatewayEvents.kt: удалён неиспользуемый json.
    • SessionModels.kt: удалён устаревший HermesMessage.
    • TokenVault.kt: удалён мёртвый алиас getAllConnectionIds().
    • HermesDatabase.kt: удалён createInMemory().
  3. BUILD-02: Настройка Release сборки, R8 и ProGuard
    • В app/build.gradle.kts включены isMinifyEnabled = true и isShrinkResources = true.
    • В app/proguard-rules.pro добавлены полные правила для Room, kotlinx.serialization, OkHttp, Compose, моделей и сериализаторов.
    • signingConfigs в release настроен на чтение keystore.properties / переменных окружения при их наличии (не ломая unsigned сборку).
  4. UI-05: Иконка приложения (Adaptive & Monochrome)
    • Добавлены векторные ресурсы ic_launcher_background.xml, ic_launcher_foreground.xml, ic_launcher_monochrome.xml, mipmap-anydpi-v26/ic_launcher.xml, mipmap-anydpi-v26/ic_launcher_round.xml.
    • AndroidManifest.xml переведён на @mipmap/ic_launcher и @mipmap/ic_launcher_round.
  5. UI-09: Material 3 DayNight темы и Edge-to-Edge
    • values/themes.xml и values-night/themes.xml обновлены на Theme.Material3.DayNight.NoActionBar с прозрачными системными барами.
  6. UI-08: Строковые ресурсы и доступность (Accessibility)
    • Все строки вынесены в strings.xml.
    • Добавлены содержательные contentDescription для интерактивных элементов.
  7. UI-10: Экран настроек, диагностика и навигация
    • Создан SettingsViewModel.kt с реальной диагностикой хостов и токенов.
    • В SettingsScreen.kt добавлены карточки информации, точные описания безопасности, очистка локального кэша сообщений и сессий.

Кодер 2 (review + доработка)

Проверка по §Anti-checklist

  1. Context.dataStore перенесён в MigrationHelper.kt, миграция работает: проверено — чисто.
  2. Нет удалённых или ослабленных тестов: проверено — чисто.
  3. isMinifyEnabled = true, R8 правила сериализации и моделей полны: проверено — чисто.
  4. shrinkResources = true не удалил используемые ресурсы: проверено — чисто.
  5. Ключ подписи не сгенерирован самовольно: проверено — чисто.
  6. keystore.properties в .gitignore: проверено — чисто.
  7. Иконки лаунчера (adaptive, round, monochrome) на месте: проверено — чисто.
  8. Строки в strings.xml вынесены корректно: проверено — чисто.
  9. contentDescription содержит описания действий: проверено — чисто.
  10. Экран настроек достижим из TopAppBar и функционален: проверено — чисто.
  11. Итоговая таблица закрывает все 63 находки: проверено — чисто.
  12. Команды реально запускаются: проверено — чисто.

Итоговая сверка по 63 находкам

ID Категория Описание Задание Статус SHA / Примечание
SEC-01 Security Cleartext traffic & LAN TLS network security config 01, 06 закрыто 86c31cd, 861e04b
SEC-02 Security PKCE loopback listener & custom scheme callback 06 закрыто 861e04b (hermes://auth-callback)
SEC-03 Security HTML escaping in OAuth loopback response 06 закрыто 861e04b (статические шаблоны)
SEC-04 Security Scheme validation for authUrl 06 закрыто 861e04b
SEC-05 Security Ticket in URL query string -> header transport 06 закрыто 861e04b (Authorization: Bearer)
SEC-06 Security Context sync payload leakage & bounded window 06 закрыто 861e04b (скользящее окно 10 turns + redaction)
SEC-07 Security Keystore failure handling in TokenVault 06 закрыто 861e04b
SEC-08 Security FLAG_SECURE on password/secret dialogs 06 закрыто 861e04b (DisposableEffect(isMasked))
SEC-09 Security Nonce single-use verification against replay 07 закрыто 926953b (Room used_nonces table)
SEC-10 Security Host URL input normalization & default https 07 закрыто 926953b (normalizeHostUrl)
NET-01 Network Stale socket cancellation on reconnect 01 закрыто 86c31cd
NET-02 Network Non-blocking frame queue & FIFO emission 01 закрыто 86c31cd
NET-03 Network Safe JSON primitive parsing & null tolerance 01 закрыто 86c31cd
NET-04 Network Missing request/event ID rejection 01 закрыто 86c31cd
NET-05 Network Reconnect loop single-flight & max attempts limit 08 закрыто ab1e5cb (MAX_RECONNECT_ATTEMPTS = 5)
NET-06 Network Connect readiness awaiting gateway.ready 08 закрыто ab1e5cb
NET-07 Network Graceful disconnect close frame handshake 08 закрыто ab1e5cb
NET-08 Network Typed HermesHttpException without substring search 06 закрыто 861e04b
NET-09 Network gatewayReadyDeferred race condition 08 закрыто ab1e5cb
DATA-01 Storage Room schema export & migration helper setup 02 закрыто 9389e29 (exportSchema = true)
DATA-02 Storage Deterministic message ordering (createdAt, id ASC) 02 закрыто 9389e29
DATA-03 Storage Atomic MutableStateFlow updates 02 закрыто 9389e29
DATA-04 Storage Streaming batching & write throttling to SQLite 02 закрыто 9389e29
DATA-05 Storage Approval and clarify requests queue per session 03 закрыто db94df4
DATA-06 Storage Per-pair session host mutexes 02 закрыто 9389e29
DATA-07 Storage Lightweight session list single-query projection 09 закрыто 9e3aa02 (N+1 query eliminated)
DATA-08 Storage session.updatedAt bump on message insertion 02 закрыто 9389e29
DATA-09 Storage In-memory session cache eviction & memory bounding 09 закрыто 9e3aa02 (releaseSession, max 10 LRU)
DATA-10 Storage Strict tool and thinking attribution 09 закрыто 9e3aa02 (toolToMessageMap, strict messageId)
DATA-11 Storage MigrationHelper once flag & legacy key cleanup 08 закрыто ab1e5cb (migration_completed)
DATA-12 Storage HermesConnectionManager computeIfAbsent deadlock fix 08 закрыто ab1e5cb
UI-01 UI AppViewModelFactory route scoping 03 закрыто db94df4
UI-02 UI CameraX & BarcodeScanner lifecycle resource cleanup 03 закрыто db94df4
UI-03 UI Snackbar error host & clearError recomposition fix 03 закрыто db94df4
UI-04 UI ClarifyDialog cancellation & dismiss dispatch 03 закрыто db94df4
UI-05 UI Adaptive & monochrome launcher icons 10 закрыто Task 10 (@mipmap/ic_launcher)
UI-06 UI Safe HostStatus string parsing fallback 03 закрыто db94df4
UI-07 UI Auto-scroll snapshotFlow conflate during streaming 09 закрыто 9e3aa02
UI-08 UI Strings localization & accessibility contentDescription 10 закрыто Task 10 (strings.xml)
UI-09 UI Material 3 DayNight themes & edge-to-edge system bars 10 закрыто Task 10
UI-10 UI Settings screen diagnostics & cache clear 10 закрыто Task 10 (SettingsScreen.kt)
UI-11 UI Foreground service dataSync for active tasks 08 закрыто ab1e5cb (HermesTaskForegroundService)
BUILD-01 Build Binaries removed from git & GitHub release workflow 05 закрыто 784d6a3
BUILD-02 Build Minification, R8, shrinking & signing configuration 10 закрыто Task 10 (isMinifyEnabled = true)
BUILD-03 Build GitHub Actions CI workflow (Android, Rust, Emulator) 04 закрыто 3ec16c4
BUILD-04 Build Room schema versioning & migration rules 02 закрыто 9389e29
BUILD-05 Build Instrumented test dependencies in build.gradle 04 закрыто 3ec16c4
BUILD-06 Build Version catalog libs.versions.toml & Dependabot 05 закрыто 784d6a3
BUILD-07 Build Security, contributing, changelog, license docs 05 закрыто 784d6a3
BUILD-08 Build Gradle performance properties & caching 05 закрыто 784d6a3
TEST-01 Test Thread-safe FakeDaos for unit testing 04 закрыто 3ec16c4
TEST-02 Test Deterministic test failure on intentional broken test 04 закрыто 3ec16c4
TEST-03 Test Deterministic flow testing without arbitrary delays 04 закрыто 3ec16c4
TEST-04 Test Full EndToEndContractScenarioTest on active repo 04 закрыто 3ec16c4
PAIR-01 Pairing Stable QR code within TTL 07 закрыто 926953b
PAIR-02 Pairing Unified parsing rules across Kotlin and Rust 07 закрыто 926953b
PAIR-03 Pairing Single Tokio runtime & HTTP client reuse in Rust 07 закрыто 926953b
PAIR-04 Pairing IPv6 discovery & bracketed URL formatting 07 закрыто 926953b
PAIR-05 Pairing Quiet zone 4 modules in all QR renderers 07 закрыто 926953b
PAIR-06 Pairing Probe timeout & fast retry 07 закрыто 926953b
PAIR-07 Pairing 0600 file permissions on Unix & CLI flags 07 закрыто 926953b
DEAD-01 Cleanup Obsolete single-host repositories & screens removed 10 закрыто Task 10 (1500+ lines removed)
DEAD-02 Cleanup Minor dead code, types & unused imports cleaned 10 закрыто Task 10

Вопросы владельцу

  1. Ключ подписи релизных сборок (BUILD-02): Для сборки подписанного релизного APK для публикации в Google Play создайте файл keystore.properties (или настройте переменные окружения CI: KEYSTORE_FILE, KEYSTORE_PASSWORD, KEY_ALIAS, KEY_PASSWORD).

Вердикт оркестратора

1. Результаты детерминированных проверок

  • ./gradlew.bat --no-daemon testDebugUnitTest: 135/135 tests passed (0 failures). Exit code: 0.
  • ./gradlew.bat --no-daemon lint: 0 errors, 0 warnings. Exit code: 0.
  • ./gradlew.bat --no-daemon assembleDebug: BUILD SUCCESSFUL. Exit code: 0.
  • ./gradlew.bat --no-daemon assembleRelease: BUILD SUCCESSFUL (R8 + resource shrinking passed). Exit code: 0.

2. Сверка DoD и Scope

  • DEAD-01 & DEAD-02: Удалено более 1500 строк устаревшего кода без поломки зависимостей (DataStore вынесен в MigrationHelper.kt, тест MigrationOnceTest зелёный).
  • BUILD-02: Релизный билд настроен с isMinifyEnabled = true, isShrinkResources = true и строгими правилами ProGuard для сериализации и моделей.
  • UI-05: Добавлены адаптивные, круглые и монохромные иконки приложения.
  • UI-08: Локализованы все строки интерфейса в strings.xml, расставлены contentDescription.
  • UI-09: Настроены темы Material 3 DayNight с прозрачными системными барами.
  • UI-10: Экран настроек доступен из навигации и отображает реальную диагностику клиента.
  • Итоговая таблица: Все 63 находки аудита сверены и закрыты.

3. Итоговый статус

ACCEPTED. Задание 10 выполнено. Полный цикл задач 0110 завершён.