# Checklist mise en production — missioflow-mobile

> Rédigé le 2026-06-07. État vérifié dans le code/CI réel + historique handoff MCP
> (#118/#119/#121/#122), pas spéculé. Périmètre : **Android**. iOS = hors périmètre
> pour l'instant (voir §4).

## 1. Prêt et vérifié ✅

| Domaine | État | Preuve |
|---|---|---|
| Typage | `tsc --noEmit` → 0 erreur | vérifié 2026-06-07 |
| Tests | 651 tests / 30 suites verts, ~85 % des modules couverts | `npm test` |
| Hygiène | 0 `console.log`, 0 stub / "not implemented", 0 dette bloquante | grep |
| Réseau | refresh token singleton anti-stampede, retry 401, **timeout nettoyé** (plus de timer fantôme), https forcé | `src/services/apiClient.ts` |
| Offline/sync | verrou de réentrance, classification d'erreurs, merge non destructif, watermark horloge serveur | `src/services/syncService.ts` |
| Crash observability | capture (ErrorBoundary + handlers globaux) + push backend best-effort, tolérant 404 | `src/core/crashLog.ts` |
| Vocabulaire statuts | source unique `interventionUtils.ts` (plus de copie dans `App.tsx`) | `src/shared/interventionUtils.ts` |
| Release Android | job CI `build_aab_release_signed` (AAB signé sur tag), profil EAS `production` | `.gitlab-ci.yml`, `eas.json` |
| OTA | `expo-updates` configuré (runtimeVersion = appVersion) | `app.json` |

## 2. Dépendances backend — VÉRIFIÉES FAITES ✅

Endpoint d'ingestion crash `POST /mobile/crash_report.php` livré et déployé sur **les deux** backends :

- **missioflow-app** : commit `9cea6c5b`, migration `mobile_crash_reports` appliquée demo + prod (handoff #121).
- **coolcare-app** (fork mono-tenant, sans `tenant_id`) : commit `38e34c4`, migration appliquée demo + prod par Bruno (handoff #122).

Les autres endpoints mobile (bottles, mobile-config, refresh, register_device) existent et sont commités des deux côtés (cf. `CHANTIER_ALIGNEMENT_BACKEND.md`). La tolérance 404 du mobile reste comme **filet** pour une instance déployée en retard — ce n'est pas un manque de code.

## 3. Reliquats OPS avant prod (hors code mobile)

| # | Item | Qui | État |
|---|---|---|---|
| 3.1 | **Credentials push FCM (Android)** dans le projet Expo | owner mobile | ✅ **Fait** — confirmé 2026-06-07 (push effectivement reçus sur device → la clé FCM V1 est bien configurée côté Expo). |
| 3.2 | **`GRANT SELECT ON mobile_crash_reports TO 'superadmin_ro'@'%'`** sur les DB prod | owner / Bruno | ✅ **Fait** — confirmé 2026-06-07 (vue SuperAdmin `/crashs-mobile` s'affiche sans « access denied »). Avait été signalé par le panel dans handoff #119. |
| 3.3 | Déploiement à jour de **chaque instance tenant** | owner | Filet 404 en place ; vérifier ponctuellement qu'une instance ne reste pas en retard de déploiement (fonctionnel mais dégradé sinon). |

## 4. iOS — hors périmètre (décision reportée)

- `bundleIdentifier fr.missioflow.mobile` présent, mais **aucun profil de build iOS** dans `eas.json`, la CI ne produit que l'AAB Android, et le push iOS exigerait des credentials **APNs** non configurés.
- À monter le jour où iOS entre au périmètre : profil iOS EAS + `eas credentials` APNs + compte Apple Developer.

## 5. Décisions actées

- **google-services.json reste committé** (2026-06-07). C'est l'api_key client Firebase Android, restreinte par package name + SHA-1 — pas un secret dur (position officielle Google). Le vrai secret (`*firebase-adminsdk*.json`) est, lui, gitignoré. Risque accepté ; le garder évite de casser `expo prebuild` (GitLab CI + EAS).
