chore(wip): consolidation intermédiaire multi-tickets (sprints Statistiques, UI, Bug resolution, Serveur-client)

Regroupe l'état de travail en cours réalisé dans un même worktree sur
plusieurs tickets/sprints (#85, #136, #145, #155-160, #162-164),
mélangeant des tickets QA et inProgress. Ne constitue pas une feature
terminée : commit de sauvegarde avant triage/split par ticket en
branches feature/* dédiées. Exclut les dossiers d'environnement de
build locaux et le heap dump parasite (.gitignore mis à jour).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-28 16:48:54 +02:00
parent 58272e354a
commit 917777e18b
279 changed files with 13546 additions and 674 deletions

View File

@ -0,0 +1,29 @@
---
issueRef: "#100"
version: 3
updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedAt: 1785002671405
---
## Rapport de validation #91-G — 2026-07-25 (Main, QA-channel instable)
### Validé en sandbox (VERT)
- Contrat A : 8 `dart test` OK.
- Projection B (12 tests), command handler C (11), adapter D (6) : `flutter test` all passed.
- Idempotence : « advances once on retry duplicate », « deduplicates retry before dispatching ».
- Rejets : stale revision, non applicable, missing session, mismatch.
- Adapter : publish par révision, heartbeat, ack, resync reconnexion, ordre séquentiel.
- `flutter analyze` app téléphone : 0 problème sur le code watch. `flutter analyze` watch_app : No issues found.
- Revue code (Main) : la montre n'applique jamais une commande localement (recalage sur projection confirmée — `watch_session_view_model.dart:140-196`) ; haptiques sans focus audio (#92) ; démarrage commun exercice+étape via use cases existants.
### À valider on-device par l'utilisateur
1. `flutter build apk` (app téléphone) — vérifier compilation avec D (plugin Kotlin, `play-services-wearable:19.0.0`, `WatchCompanionForegroundService`, `PhoneWatchBridgeListenerService`).
2. `cd watch_app && flutter build apk` — vérifier compilation de l'app Wear OS.
3. Pairing Wearable : installer les deux APK, appairer, lancer une séance, vérifier projection reçue sur la montre.
4. Commandes depuis la montre : démarrer/pause chrono, démarrer chrono suivant prêt, passer étape/passage/série, terminer série, passer repos → effet réel côté téléphone.
5. Foreground service : téléphone verrouillé / app en background pendant séance → le canal reste vivant.
6. Latence/interpolation/resync réelles ; haptiques au ack sans couper la musique.
### Commits (feature/ticket91-wear-os-watch-sync)
cf68a72 #91-A · d1c6076 #91-B · 6c177de #91-C · 68a87d1 #91-D · c65a5a7 #91-E/#91-F · 40a2d5e server networking (séparé).
QA-agent n'a pas pu produire de final textuel (canal instable, sandbox bloquant flutter) — exécutable pris en charge par Main. Revue code par Main.

View File

@ -0,0 +1,28 @@
---
id: "f28612f6-ef2c-4a5d-a0ac-9d66afb151d6"
number: 100
title: "#91-G [QA] Validation companion watch offline/local"
status: "closed"
priority: "medium"
sprint: null
links: [{"target":"#99","kind":"dependsOn"}]
agentRefs: [{"agentId":"7efa512f-3b3a-47b5-ade0-a2dd13073055","role":"assigned"}]
createdBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
createdAt: 1784991960335
updatedAt: 1785002671405
version: 3
---
Partie #91, dépend de #91-F.
Validation end-to-end du companion montre, offline/local uniquement :
- Projection téléphone correcte pour chaque phase.
- Routing commandes + idempotence : retry/doublon n'avance jamais deux fois une étape/passage/série ; révision stale rejetée.
- Acks corrects selon contexte.
- Reconnexion + resync complet de l'état.
- Foreground service téléphone (verrouillé / background).
- Interpolation du chrono montre vs timestamps autoritaires.
- Cohérence téléphone/montre : la montre ne modifie jamais l'état localement ; le téléphone reste source de vérité ; actions simultanées -> dernier état confirmé.
- Haptiques sans couper la musique (#92).
Définition de done : rapport de validation par commande réelle (dart analyze, flutter test, build app téléphone + build watch, scénarios manuels sur émulateur/device si possible). Sortie verte ou rapport d'échec non enjolivé.