montana/Android/Внешний-аудит/12-Phase3-PlayStore.md

158 lines
7.1 KiB
Markdown
Raw Normal View History

2026-05-21 03:44:38 +03:00
# 12. Phase 3 — Production Release + Play Store Readiness (v6.7.0)
**Дата:** 2026-05-18, продолжение Phase 2.
## Что закрыто в этой фазе
### Закрытые findings
| Finding | Closure | Verification |
|---------|---------|--------------|
| **F-3.1** Automated purge cron | `systemd timer` daily через `mt-vpn-balance-purge.timer` | `systemctl list-timers \| grep mt-vpn` |
| **F-4 mitigation** SPOF Moscow | rsync replication каждые 5 мин на 3 узла (Helsinki/Frankfurt/US) через `mt-vpn-balance-replicate.timer` | `ssh montana-finland ls /var/lib/mt-vpn-balance-replica/state.json` |
| **F-7** Backup confirmation flow | Новый экран `s-backup-verify` между создания и активации — пользователь вводит случайное слово из 24 для подтверждения | Reproducible в app v6.7.0 |
| **Production release build** | R8 minification + shrinkResources + proper signing config + ProGuard rules | APK 29 MB (vs 32 MB debug), Genesis-signed |
| **Privacy Policy** | RU + EN опубликованы на `https://montana.quest/privacy` (HTTP 200) | curl probe |
| **Data Safety declaration** | `Play-Store-Pack/data-safety.md` — готовая выгрузка для Play Console | review |
| **Store listing** | RU + EN descriptions, screenshots refs, release notes | `Play-Store-Pack/store-listing.md` |
### Phase 3 deployment status
| Компонент | Status | Доказательство |
|-----------|--------|----------------|
| **Production APK release** | ✅ `montana-6.7.0-release.apk` (29 MB) подписан Genesis-keystore | SHA-256 fingerprint `305bc99b…3ce4d` |
| **На сайте** | ✅ `montana.quest/vpn/montana.apk``montana-v6.7.0-release.apk` symlink | curl headers |
| **Privacy URL** | ✅ `https://montana.quest/privacy` живой | HTTP 200 |
| **Backend Rust** | ✅ `mt-vpn-balance.service` active, port 5009, signed_accounts > 0 | systemctl |
| **VPN cascade** | ✅ haproxy + 3 xray-pinned active enabled | systemctl |
| **Daily purge** | ✅ `mt-vpn-balance-purge.timer` enabled | next run 00:03 UTC |
| **State replication** | ✅ `mt-vpn-balance-replicate.timer` every 5min | rsync to 3 nodes |
---
## Google Play Store submission checklist
### Перед загрузкой APK
- [x] APK signed with **non-debug** keystore (Genesis-keystore)
- [x] versionCode incrementally increasing (60700 > 60600)
- [x] versionName semver (`6.7.0`)
- [x] targetSdk = 34 (Android 14, max actual)
- [x] minSdk = 24 (Android 7.0)
- [x] ABI splits: arm64-v8a, armeabi-v7a, x86, x86_64 (universal APK)
- [x] R8 / ProGuard включен с правильными keep rules
- [x] No debug code / log spam в release build
- [x] Foreground service permission decorated `specialUse` (Android 14+ требование)
- [x] WebView allowed cleartext только к `https://montana.local/` synthetic baseURL
### Play Console submission
- [x] Privacy Policy URL: `https://montana.quest/privacy` ← готова и HTTP 200
- [x] Data Safety declaration текст готов — `Play-Store-Pack/data-safety.md`
- [x] App content rating answers: `Play-Store-Pack/store-listing.md` § Content rating
- [x] Store listing RU + EN: `Play-Store-Pack/store-listing.md`
- [ ] Feature graphic 1024×500 — **TODO**: создать в графическом редакторе
- [x] Phone screenshots: использовать `m626-*.png`, `m640-*.png`, `m660-*.png` из `/tmp/` сессии
- [ ] Promo video — **optional**, можно отложить
- [ ] Google Developer Account ($25) — **требует автора**
- [ ] Privacy policy compliance verified by Google — после submission
### Ответы на Google Play обязательные вопросы
#### App access
**Q:** Is any part of your app or game restricted by a login, password, or other authentication mechanism?
**A:** No. Wallet creation is anonymous, no login required.
#### Ads
**Q:** Does your app contain ads?
**A:** No.
#### Target audience
**Q:** Select target age groups
**A:** Ages 18 and over (финансовый функционал — Ɉ accumulation).
#### News apps
**A:** No.
#### COVID-19 contact tracing & status
**A:** No.
#### Data Safety section
См. `Play-Store-Pack/data-safety.md`.
---
## Что осталось до полного mainnet (Phase 4)
| Задача | Severity | Cost |
|--------|----------|------|
| **CF-Phase2-1** Falcon-512 замена Ed25519 (post-quantum) | Средний | 2-3 недели (Android NDK + JNI bridge) |
| **F-6** Encrypted seed через user passcode (Android Keystore wrap) | Высокий | 1 неделя |
| **CF-Phase2-2** TOFU revocation flow | Средний | 1 неделя |
| **TimeChain consensus opcode `0x06 VpnHeartbeat`** | Низкий (текущая защита достаточна для MVP) | 3-4 недели (spec patch v35.26 + mt-account + montana-node) |
| **CF-recovery-tests** Automated unit + instrumented tests | Высокий | 2 дня |
| **F-8** SLIP-44 + BIP44 cross-wallet compatibility | Средний (UX warning достаточно для MVP) | 1 неделя |
---
## Готовность к Play Store submission
**Готово к internal testing track:** ✅ Yes
**Готово к closed/open testing:** ✅ Yes
**Готово к production submission:** ⚠️ Зависит от:
- Подтверждение от автора что keystore backup надёжен
- Подтверждение что hosting providers согласны с публичной публикацией infrastructure
- Feature graphic (1024×500) создан
**Не блокирует submission:** все остальные Phase 4 задачи — это улучшения безопасности post-launch, не блокеры для Play Store guidelines.
---
## Команды для submission (для автора)
### 1. Создать Google Developer Account
```
URL: https://play.google.com/console/u/0/signup
Cost: $25 one-time
```
### 2. Upload APK в Internal testing
```
Play Console → All apps → Create app
→ Name: Montana VPN
→ Default language: Russian (RU)
→ App or game: App
→ Free or paid: Free
→ Declarations: всё подписать
Release management → Internal testing
→ New release → Upload APK
→ File: /Users/kh./Python/Ничто/Montana/Android/build/montana-6.7.0-release.apk
→ Release notes: см. Play-Store-Pack/store-listing.md
```
### 3. Заполнить Store listing
```
Store presence → Main store listing
→ Подгрузить тексты из Play-Store-Pack/store-listing.md
→ Загрузить screenshots
```
### 4. Заполнить Data Safety
```
Policy → App content → Data safety
→ Использовать `Play-Store-Pack/data-safety.md` как guide
```
### 5. Privacy Policy URL
```
Already live: https://montana.quest/privacy
Вставить URL в Store presence → Privacy policy
```
### 6. Promote через testing → production
```
Internal → Closed → Open → Production
```
Время от submission до approval: обычно 1-3 дня для нового app.