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:
59
.ideai/skills/md/32494e70-abcd-4829-a789-cadc2e7c90c7.md
Normal file
59
.ideai/skills/md/32494e70-abcd-4829-a789-cadc2e7c90c7.md
Normal file
@ -0,0 +1,59 @@
|
||||
## Objectif
|
||||
|
||||
Builder l'APK Android du **téléphone** GameTime de manière déterministe, sans
|
||||
recalculer l'environnement de build à chaque fois.
|
||||
|
||||
## Usage obligatoire
|
||||
|
||||
Toujours lancer le script dédié depuis le project root :
|
||||
|
||||
```bash
|
||||
bash .ideai/skills/scripts/build-phone-apk.sh debug
|
||||
```
|
||||
|
||||
ou pour un build optimisé :
|
||||
|
||||
```bash
|
||||
bash .ideai/skills/scripts/build-phone-apk.sh release
|
||||
```
|
||||
|
||||
Par défaut, si aucun mode n'est donné, le script construit `debug`.
|
||||
|
||||
## Ce que le script fixe automatiquement
|
||||
|
||||
- copie un SDK Flutter writable dans `.ideai/build-env/flutter-sdk` si absent ;
|
||||
- isole `HOME`, `XDG_*` et `GRADLE_USER_HOME` dans `.ideai/build-env` ;
|
||||
- force **Java 21** via `/usr/lib/jvm/java-21-openjdk` ;
|
||||
- configure `ANDROID_HOME=/opt/android-sdk` et le `PATH` Android/Java ;
|
||||
- lance `flutter pub get` puis `flutter build apk`.
|
||||
|
||||
Ne pas utiliser `/usr/bin/flutter` ou `/opt/flutter/bin/flutter` directement tant
|
||||
que l'environnement a les mêmes contraintes de sandbox/cache : le wrapper et les
|
||||
caches système peuvent écrire dans des emplacements non utilisables.
|
||||
|
||||
## Sorties
|
||||
|
||||
- Debug : `build/app/outputs/flutter-apk/app-debug.apk`
|
||||
- Release : `build/app/outputs/flutter-apk/app-release.apk`
|
||||
|
||||
Le script affiche le chemin final de l'APK.
|
||||
|
||||
## Quand l'utiliser
|
||||
|
||||
- Après tout changement mobile Android/Flutter côté téléphone.
|
||||
- Avant une installation ADB sur le téléphone.
|
||||
- Avant de livrer un APK au user.
|
||||
|
||||
## Diagnostic rapide
|
||||
|
||||
- `Unsupported class file major version 70` :
|
||||
`JAVA_HOME` n'est pas sur Java 21.
|
||||
- `No space left on device` :
|
||||
manque d'espace dans le volume qui porte `.ideai/build-env`.
|
||||
- erreurs de dépendances Flutter :
|
||||
relancer le même script, ne pas improviser une autre séquence.
|
||||
|
||||
## Règle d'exécution
|
||||
|
||||
Pour builder l'APK téléphone, ne pas réfléchir à la recette : exécuter le script
|
||||
ci-dessus avec `debug` ou `release`, puis vérifier l'APK dans `build/app/outputs/flutter-apk/`.
|
||||
88
.ideai/skills/md/4a9abeed-e52a-4b26-aa73-eb4f63cd0398.md
Normal file
88
.ideai/skills/md/4a9abeed-e52a-4b26-aa73-eb4f63cd0398.md
Normal file
@ -0,0 +1,88 @@
|
||||
## Objectif
|
||||
|
||||
Builder et lancer le serveur GameTime (`server/`, package Dart `gametime_server`) avec sa
|
||||
base PostgreSQL, pour :
|
||||
- valider fonctionnellement les routes API (health, auth, sync, shares) sur HTTP ;
|
||||
- fournir une cible vivante aux tests fonctionnels de routes de QA ;
|
||||
- développer/débugger côté serveur.
|
||||
|
||||
Skill de pilotage — exécutable par **Main**, support pour **QA** (tests fonctionnels de
|
||||
routes). Le contrat des routes est dans `server/openapi.yaml`.
|
||||
|
||||
## Mode 1 — Docker Compose (recommandé, stack complète)
|
||||
|
||||
Depuis `server/`, créer/éditer `.env` (modèle `server/.env.example`) :
|
||||
```
|
||||
API_BIND_ADDRESS=0.0.0.0 # interface hôte publiée par Docker. 0.0.0.0 = LAN + loopback ; une IP précise restreint
|
||||
API_PORT=8080 # port hôte publié
|
||||
MIGRATE_ON_STARTUP=true # applique les migrations SQL au démarrage du conteneur api
|
||||
DATABASE_HOST=postgres # nom du service Compose (interne au réseau Docker)
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_NAME=gametime
|
||||
DATABASE_USER=gametime
|
||||
DATABASE_PASSWORD=change-me
|
||||
POSTGRES_DB=gametime
|
||||
POSTGRES_USER=gametime
|
||||
POSTGRES_PASSWORD=change-me
|
||||
```
|
||||
|
||||
Lancer :
|
||||
```bash
|
||||
cd server
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Le service `api` attend le healthcheck Postgres, exécute `/app/bin/migrate`, puis
|
||||
`/app/bin/server`. Le conteneur écoute en interne sur `0.0.0.0:8080` (log trompeur) ;
|
||||
l'adresse réellement joignable côté hôte est **`${API_BIND_ADDRESS}:${API_PORT}`**.
|
||||
|
||||
Vérifier :
|
||||
```bash
|
||||
curl http://${API_BIND_ADDRESS}:${API_PORT}/health # attendu : {"status":"ok"}
|
||||
```
|
||||
|
||||
Commandes utiles :
|
||||
```bash
|
||||
docker compose logs -f api # logs serveur temps réel
|
||||
docker compose config # config Compose interpolée (vérifier les ports publiés)
|
||||
docker compose restart api # relancer l'API sans toucher Postgres
|
||||
docker compose down # arrêter la stack (volume Postgres conservé)
|
||||
```
|
||||
|
||||
### Piège LAN (accès depuis le téléphone)
|
||||
- L'adresse publiée doit être l'IP LAN de l'hôte (ex. `192.168.1.75`), pas `localhost`.
|
||||
- Ouvrir le firewall hôte sur `API_PORT`.
|
||||
- L'app mobile pointe par défaut sur `http://localhost:8080` (codé au build via
|
||||
`GAMETIME_API_BASE_URL`) → surcharger au build de l'APK avec
|
||||
`--dart-define=GAMETIME_API_BASE_URL=http://<ip-lan>:<port>` et autoriser le HTTP en
|
||||
clair côté Android (`usesCleartextTraffic` dans `AndroidManifest.xml`).
|
||||
|
||||
## Mode 2 — Local Dart (sans Docker)
|
||||
|
||||
Nécessite un PostgreSQL joignable (hors Compose, ou le conteneur `postgres` exposé).
|
||||
```bash
|
||||
cd server
|
||||
dart pub get
|
||||
DATABASE_HOST=localhost DATABASE_PORT=5432 DATABASE_NAME=gametime \
|
||||
DATABASE_USER=gametime DATABASE_PASSWORD=gametime \
|
||||
dart run bin/migrate.dart # migrations lues depuis server/migrations/
|
||||
DATABASE_HOST=localhost DATABASE_PORT=5432 DATABASE_NAME=gametime \
|
||||
DATABASE_USER=gametime DATABASE_PASSWORD=gametime \
|
||||
PORT=8080 dart run bin/server.dart # écoute sur 0.0.0.0:$PORT
|
||||
```
|
||||
|
||||
## Lancer les tests (support QA)
|
||||
|
||||
Depuis `server/` :
|
||||
```bash
|
||||
dart test # unitaires + handlers en isolation
|
||||
TEST_DATABASE_URL=postgres://gametime:gametime@localhost:5432/gametime dart test # + intégration Postgres (sinon skippées)
|
||||
```
|
||||
Limite : les sandbox agents n'ont pas d'accès réseau à pub.dev → si `dart pub get` est
|
||||
requis, Main le passe avant ; `dart test` sur deps résolus reste jouable par QA.
|
||||
|
||||
## État courant connu (machine projet, 2026-07-25)
|
||||
|
||||
- Stack Docker validée : `GET /health` → 200, `POST /auth/register` → 201.
|
||||
- IP LAN hôte : `192.168.1.75` (interface `enp4s0`).
|
||||
- `.env` courant publie sur `192.168.1.75:8090`.
|
||||
60
.ideai/skills/md/8f126c3d-5b8c-48c0-97aa-cd9e5f0e7d5b.md
Normal file
60
.ideai/skills/md/8f126c3d-5b8c-48c0-97aa-cd9e5f0e7d5b.md
Normal file
@ -0,0 +1,60 @@
|
||||
## Objectif
|
||||
|
||||
Builder l'APK Android de la **montre Wear OS** GameTime de manière déterministe,
|
||||
sans recalculer l'environnement de build à chaque fois.
|
||||
|
||||
## Usage obligatoire
|
||||
|
||||
Toujours lancer le script dédié depuis le project root :
|
||||
|
||||
```bash
|
||||
bash .ideai/skills/scripts/build-watch-apk.sh debug
|
||||
```
|
||||
|
||||
ou pour un build optimisé :
|
||||
|
||||
```bash
|
||||
bash .ideai/skills/scripts/build-watch-apk.sh release
|
||||
```
|
||||
|
||||
Par défaut, si aucun mode n'est donné, le script construit `debug`.
|
||||
|
||||
## Ce que le script fixe automatiquement
|
||||
|
||||
- réutilise le SDK Flutter writable dans `.ideai/build-env/flutter-sdk` ;
|
||||
- isole `HOME`, `XDG_*` et `GRADLE_USER_HOME` dans `.ideai/build-env` ;
|
||||
- force **Java 21** via `/usr/lib/jvm/java-21-openjdk` ;
|
||||
- configure `ANDROID_HOME=/opt/android-sdk` et le `PATH` Android/Java ;
|
||||
- se place dans `watch_app/` ;
|
||||
- lance `flutter pub get` puis `flutter build apk`.
|
||||
|
||||
Ne pas builder la montre depuis le root téléphone, et ne pas improviser une autre
|
||||
sortie de build : l'app montre a son propre projet Flutter sous `watch_app/`.
|
||||
|
||||
## Sorties
|
||||
|
||||
- Debug : `watch_app/build/watch_app/app/outputs/flutter-apk/app-debug.apk`
|
||||
- Release : `watch_app/build/watch_app/app/outputs/flutter-apk/app-release.apk`
|
||||
|
||||
Le script affiche le chemin final de l'APK.
|
||||
|
||||
## Quand l'utiliser
|
||||
|
||||
- Après tout changement Flutter/Android dans `watch_app/`.
|
||||
- Avant une installation ADB sur la montre.
|
||||
- Avant une vérification de connexion téléphone/montre.
|
||||
|
||||
## Diagnostic rapide
|
||||
|
||||
- `Unsupported class file major version 70` :
|
||||
`JAVA_HOME` n'est pas sur Java 21.
|
||||
- `No space left on device` :
|
||||
manque d'espace dans le volume qui porte `.ideai/build-env`.
|
||||
- erreur `adb: more than one device/emulator` :
|
||||
le build est bon, le problème est au moment de l'installation ADB, pas du build.
|
||||
|
||||
## Règle d'exécution
|
||||
|
||||
Pour builder l'APK montre, ne pas réfléchir à la recette : exécuter le script
|
||||
ci-dessus avec `debug` ou `release`, puis vérifier l'APK dans
|
||||
`watch_app/build/watch_app/app/outputs/flutter-apk/`.
|
||||
Reference in New Issue
Block a user