diff --git a/.ideai/memory/MEMORY.md b/.ideai/memory/MEMORY.md index 90750aa..7553aea 100644 --- a/.ideai/memory/MEMORY.md +++ b/.ideai/memory/MEMORY.md @@ -3,3 +3,4 @@ - [gametime-product-scope](gametime-product-scope.md) — memory note gametime-product-scope - [gametime-ux-conception](gametime-ux-conception.md) — memory note gametime-ux-conception - [gametime-architecture-initial-stack-data-model](gametime-architecture-initial-stack-data-model.md) — memory note gametime-architecture-initial-stack-data-model +- [gametime-dev-environment](gametime-dev-environment.md) — memory note gametime-dev-environment diff --git a/.ideai/memory/gametime-dev-environment.md b/.ideai/memory/gametime-dev-environment.md new file mode 100644 index 0000000..69d2fae --- /dev/null +++ b/.ideai/memory/gametime-dev-environment.md @@ -0,0 +1,46 @@ +--- +name: gametime-dev-environment +description: memory note gametime-dev-environment +metadata: + type: project +--- +# GameTime — Environnement de build local + +Flutter SDK et Android SDK sont installés et opérationnels sur la machine du projet (2026-07-17). Premier APK debug buildé avec succès le 2026-07-17. + +## Flutter +- Installé via le paquet AUR `flutter-bin` (3.44.6, stable), pas `flutter` (source AUR) — ce dernier a un conflit de dépendance avec `dart` déjà présent sur le système (`dart<3.12.0` requis alors que 3.12.2 est installé). +- Binaire `flutter` disponible dans `/usr/bin/flutter` (wrapper `flutter-bin`), SDK réel monté via unionfs sous `~/.cache/flutter_sdk`. + +## Android SDK +- Installé via le paquet AUR `android-sdk-cmdline-tools-latest`, posé dans `/opt/android-sdk` (appartenait à root par défaut — il a fallu `chown -R anthony:anthony /opt/android-sdk` pour que `sdkmanager` puisse installer des composants sans sudo). +- Composants installés : `platform-tools`, `platforms;android-34/35/36`, `build-tools;34.0.0/28.0.3/36.0.0`, NDK 28.2.13676358, CMake 3.22.1 (certains installés automatiquement par Gradle au premier build). +- Licences acceptées via `sdkmanager --licenses`. +- `flutter config --android-sdk /opt/android-sdk` exécuté pour lier Flutter au SDK. + +## JDK — point de friction important +- Le JDK système par défaut est `java-26-openjdk` (trop récent : `Unsupported class file major version 70` avec Gradle 9.1 utilisé par le template Flutter). +- Installé `jdk21-openjdk` (dépôt officiel Arch, pas besoin d'AUR) en complément, sans le mettre par défaut système. +- Flutter configuré spécifiquement pour l'utiliser : `flutter config --jdk-dir=/usr/lib/jvm/java-21-openjdk`. Cette config est stockée dans la config Flutter (probablement `~/.config/flutter/settings` ou équivalent), donc persistante indépendamment du JDK système par défaut. + +## Variables d'environnement persistées +Ajoutées dans `~/.zshrc`, `~/.bashrc` et `~/.config/fish/config.fish` (le shell de login est zsh, mais les agents peuvent tourner en bash) : +``` +ANDROID_HOME=/opt/android-sdk +ANDROID_SDK_ROOT=/opt/android-sdk +PATH inclut $ANDROID_HOME/cmdline-tools/latest/bin et $ANDROID_HOME/platform-tools +``` + +## Limite connue +- Pas de Chrome installé (web toolchain Flutter indisponible), sans impact puisque la cible du projet est mobile (Android/iOS), pas web. +- Pas de device/émulateur Android connecté — seul `flutter build apk --debug` (sans device) est utilisable pour produire l'APK à transférer manuellement sur le téléphone de l'utilisateur (pas de `flutter run` direct sur device depuis cet environnement). +- **Les sandbox des agents (DevBackend, DevFrontend, etc.) n'ont pas d'accès réseau à pub.dev**, contrairement à l'environnement de Main (Bash direct). Conséquence pratique : `flutter pub get`, `flutter analyze` (si dépend de packages non encore en cache) et `flutter build apk` doivent être exécutés par Main en vérification finale après le travail de code d'un agent, pas par l'agent lui-même. Les agents peuvent en revanche modifier pubspec.yaml, écrire du code Dart, etc. + +## Commande de build APK de référence +```bash +export ANDROID_HOME=/opt/android-sdk +export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" +cd /home/anthony/Documents/Projects/GameTime +flutter pub get && flutter analyze && flutter build apk --debug +``` +APK produit : `build/app/outputs/flutter-apk/app-debug.apk`. \ No newline at end of file diff --git a/.ideai/tickets/1/carnet.md b/.ideai/tickets/1/carnet.md index 2fb4ecd..80a5199 100644 --- a/.ideai/tickets/1/carnet.md +++ b/.ideai/tickets/1/carnet.md @@ -1,7 +1,7 @@ --- issueRef: "#1" -version: 3 +version: 4 updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784301472470 +updatedAt: 1784301585782 --- Décisions à prendre par Git : nom de la branche principale de dev (ex: develop) si on ne travaille pas directement sur main, convention de nommage des branches de feature par ticket (ex: feature/#2-scaffolding-flutter). Aucune action sortante (push distant, remote) sans validation explicite de l'utilisateur — repo local pour l'instant. \ No newline at end of file diff --git a/.ideai/tickets/1/issue.md b/.ideai/tickets/1/issue.md index d0cdafb..004cd6e 100644 --- a/.ideai/tickets/1/issue.md +++ b/.ideai/tickets/1/issue.md @@ -2,7 +2,7 @@ id: "e6f0a540-055c-4b9d-9d14-3ceabf35c7d6" number: 1 title: "[Git] Initialiser le dépôt et la stratégie de branches GameTime" -status: "inProgress" +status: "closed" priority: "high" sprint: null links: [] @@ -10,7 +10,7 @@ agentRefs: [{"agentId":"8f065f64-ef6e-4a00-af9c-d00be079e3cc","role":"assigned"} createdBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} createdAt: 1784301284213 -updatedAt: 1784301472470 -version: 3 +updatedAt: 1784301585782 +version: 4 --- Mettre en place la structure de dépôt pour le projet Flutter GameTime : stratégie de branches (main protégée + branches de feature par ticket), conventions de commit, .gitignore adapté Flutter/Dart. \ No newline at end of file diff --git a/.ideai/tickets/2/carnet.md b/.ideai/tickets/2/carnet.md index 5cf2314..dfc7fe2 100644 --- a/.ideai/tickets/2/carnet.md +++ b/.ideai/tickets/2/carnet.md @@ -1,7 +1,7 @@ --- issueRef: "#2" -version: 3 +version: 5 updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784301371028 +updatedAt: 1784304100048 --- Référence : mémoire projet "gametime-architecture-initial-stack-data-model" (Architect). Stack : Flutter + Drift (SQLite). Structure hexagonale obligatoire : domain / application / infrastructure(local) / presentation, composition root séparée. Pas de schéma de tables à ce stade (ticket #3), juste la connexion Drift vide et le wiring. Cibler iOS + Android dans le pubspec/config dès le départ même si le test utilisateur se fait sur Android. \ No newline at end of file diff --git a/.ideai/tickets/2/issue.md b/.ideai/tickets/2/issue.md index d91513c..f38685f 100644 --- a/.ideai/tickets/2/issue.md +++ b/.ideai/tickets/2/issue.md @@ -2,7 +2,7 @@ id: "736ad58d-1020-438a-b563-5d0c30a05b04" number: 2 title: "[DevBackend] Scaffolding projet Flutter + architecture hexagonale" -status: "open" +status: "closed" priority: "critical" sprint: null links: [{"target":"#1","kind":"dependsOn"}] @@ -10,7 +10,7 @@ agentRefs: [{"agentId":"10ee045b-1c41-479e-ba03-dceed9edd495","role":"assigned"} createdBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} createdAt: 1784301286030 -updatedAt: 1784301371028 -version: 3 +updatedAt: 1784304100048 +version: 5 --- Initialiser le projet Flutter (cibles iOS + Android). Mettre en place la structure de dossiers domain / application / infrastructure(local) / presentation. Config lint/format. Intégration Drift de base (connexion DB vide, pas encore de schéma). Le domaine ne doit dépendre ni de Flutter ni de Drift. \ No newline at end of file diff --git a/.ideai/tickets/3/carnet.md b/.ideai/tickets/3/carnet.md index 4cf5e2e..68cd02e 100644 --- a/.ideai/tickets/3/carnet.md +++ b/.ideai/tickets/3/carnet.md @@ -1,8 +1,8 @@ --- issueRef: "#3" -version: 3 +version: 4 updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} -updatedAt: 1784301376032 +updatedAt: 1784304100173 --- Référence : mémoire "gametime-architecture-initial-stack-data-model" pour le détail des entités (Exercise, MediaAsset, Program, ProgramExercise, WorkoutTemplate, WorkoutTemplateProgram, WorkoutTemplateExerciseOverride, ActiveWorkoutSession, ActiveSetResult, ActiveRestState, WorkoutHistory, WorkoutHistorySetResult, change_log). Points de friction actés par Architect à respecter dans le schéma : diff --git a/.ideai/tickets/3/issue.md b/.ideai/tickets/3/issue.md index b2a50b7..5df45c3 100644 --- a/.ideai/tickets/3/issue.md +++ b/.ideai/tickets/3/issue.md @@ -2,7 +2,7 @@ id: "ea99a2e0-3c07-404c-95db-13818be0ee20" number: 3 title: "[DevBackend] Modèle de données Drift complet (entités + migrations)" -status: "open" +status: "inProgress" priority: "critical" sprint: null links: [{"target":"#2","kind":"dependsOn"}] @@ -10,7 +10,7 @@ agentRefs: [{"agentId":"10ee045b-1c41-479e-ba03-dceed9edd495","role":"assigned"} createdBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} createdAt: 1784301289668 -updatedAt: 1784301376032 -version: 3 +updatedAt: 1784304100173 +version: 4 --- Implémenter les tables Drift : Exercise, MediaAsset, Program, ProgramExercise, WorkoutTemplate, WorkoutTemplateProgram, WorkoutTemplateExerciseOverride, ActiveWorkoutSession, ActiveSetResult, ActiveRestState, WorkoutHistory, WorkoutHistorySetResult, change_log. Champs sync-ready sur chaque agrégat : id stable (UUIDv7/ULID), createdAt/updatedAt/deletedAt, schemaVersion, syncState, localRevision, originDeviceId. Voir mémoire projet "gametime-architecture-initial-stack-data-model" pour le détail des champs par entité et les invariants (score = valeur numérique + label/unité snapshotés, exercice jamais supprimé en dur, etc.). \ No newline at end of file diff --git a/.ideai/tickets/index.json b/.ideai/tickets/index.json index fcba8e2..0829b14 100644 --- a/.ideai/tickets/index.json +++ b/.ideai/tickets/index.json @@ -5,37 +5,37 @@ "issueRef": "#1", "path": "1", "title": "[Git] Initialiser le dépôt et la stratégie de branches GameTime", - "status": "inProgress", + "status": "closed", "priority": "high", "sprint": null, "assignedAgentIds": [ "8f065f64-ef6e-4a00-af9c-d00be079e3cc" ], - "updatedAt": 1784301472470 + "updatedAt": 1784301585782 }, { "issueRef": "#2", "path": "2", "title": "[DevBackend] Scaffolding projet Flutter + architecture hexagonale", - "status": "open", + "status": "closed", "priority": "critical", "sprint": null, "assignedAgentIds": [ "10ee045b-1c41-479e-ba03-dceed9edd495" ], - "updatedAt": 1784301371028 + "updatedAt": 1784304100048 }, { "issueRef": "#3", "path": "3", "title": "[DevBackend] Modèle de données Drift complet (entités + migrations)", - "status": "open", + "status": "inProgress", "priority": "critical", "sprint": null, "assignedAgentIds": [ "10ee045b-1c41-479e-ba03-dceed9edd495" ], - "updatedAt": 1784301376032 + "updatedAt": 1784304100173 }, { "issueRef": "#4",