14 KiB
14 KiB
Task 10: Чистка мёртвого слоя и подготовка релиза (hermes-android)
Repo: ochenstarik-ui/hermes-android
Assigned to: Antigravity (режим оркестратора, два кодера)
Priority: HIGH
Date: 2026-08-24
Base SHA: 9e3aa0238f4be2b8b9f3653ea9fe1fe1fc60e909
Кодер 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.
- Перенёс объявление
DEAD-02: Очистка мелкого мёртвого кодаHermesApplication.kt: удалён неиспользуемыйonTerminate().MultiHostModels.kt: удаленыA2AContextBindingиUnifiedMessageSource.A2A.GatewayEvents.kt: удалён неиспользуемыйjson.SessionModels.kt: удалён устаревшийHermesMessage.TokenVault.kt: удалён мёртвый алиасgetAllConnectionIds().HermesDatabase.kt: удалёнcreateInMemory().
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 сборку).
- В
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.
- Добавлены векторные ресурсы
UI-09: Material 3 DayNight темы и Edge-to-Edgevalues/themes.xmlиvalues-night/themes.xmlобновлены наTheme.Material3.DayNight.NoActionBarс прозрачными системными барами.
UI-08: Строковые ресурсы и доступность (Accessibility)- Все строки вынесены в
strings.xml. - Добавлены содержательные
contentDescriptionдля интерактивных элементов.
- Все строки вынесены в
UI-10: Экран настроек, диагностика и навигация- Создан
SettingsViewModel.ktс реальной диагностикой хостов и токенов. - В
SettingsScreen.ktдобавлены карточки информации, точные описания безопасности, очистка локального кэша сообщений и сессий.
- Создан
Кодер 2 (review + доработка)
Проверка по §Anti-checklist
Context.dataStoreперенесён вMigrationHelper.kt, миграция работает: проверено — чисто.- Нет удалённых или ослабленных тестов: проверено — чисто.
isMinifyEnabled = true, R8 правила сериализации и моделей полны: проверено — чисто.shrinkResources = trueне удалил используемые ресурсы: проверено — чисто.- Ключ подписи не сгенерирован самовольно: проверено — чисто.
keystore.propertiesв.gitignore: проверено — чисто.- Иконки лаунчера (adaptive, round, monochrome) на месте: проверено — чисто.
- Строки в
strings.xmlвынесены корректно: проверено — чисто. contentDescriptionсодержит описания действий: проверено — чисто.- Экран настроек достижим из TopAppBar и функционален: проверено — чисто.
- Итоговая таблица закрывает все 63 находки: проверено — чисто.
- Команды реально запускаются: проверено — чисто.
Итоговая сверка по 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 |
Вопросы владельцу
- Ключ подписи релизных сборок (
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 выполнено. Полный цикл задач 01–10 завершён.