docs(ideai): met à jour les tickets #65/#67 après le partage client, ajoute le ticket #71

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 21:54:52 +02:00
parent 010e055404
commit 334d40cd1d
8 changed files with 56 additions and 19 deletions

View File

@ -1,6 +1,9 @@
--- ---
issueRef: "#65" issueRef: "#65"
version: 1 version: 3
updatedBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedAt: 1784488343589 updatedAt: 1784490128397
--- ---
SyncUseCases.synchronize() implémenté avec push/pull LWW réel, changement silencieux d'état (success/failure) sans jamais laisser remonter d'exception, réutilise la table change_log déjà présente (écrite mais jamais lue jusqu'ici). 119/119 tests verts, flutter analyze clean, APK debug buildé.
Point de nettoyage identifié, non bloquant : `AppDependencies` expose toujours l'ancien port `SyncGateway`/`NoOpSyncGateway` (vestige du ticket #12) EN PLUS du nouveau `SyncUseCases` réel — les deux coexistent, rien n'appelle plus `syncGateway.synchronize()` de façon utile puisque #68 branchera l'UI sur `syncUseCases.synchronize()` directement. À évaluer en QA (#70) si `SyncGateway`/`NoOpSyncGateway` doivent être supprimés pour éviter la confusion entre deux abstractions de sync.

View File

@ -2,15 +2,15 @@
id: "f0c554b7-e388-49b3-aa74-0a47886961ad" id: "f0c554b7-e388-49b3-aa74-0a47886961ad"
number: 65 number: 65
title: "[DevBackend] Sync client incrémentale LWW vers API serveur" title: "[DevBackend] Sync client incrémentale LWW vers API serveur"
status: "open" status: "qa"
priority: "medium" priority: "medium"
sprint: null sprint: null
links: [{"target":"#63","kind":"relatesTo"},{"target":"#64","kind":"dependsOn"}] links: [{"target":"#63","kind":"relatesTo"},{"target":"#64","kind":"dependsOn"}]
agentRefs: [{"agentId":"10ee045b-1c41-479e-ba03-dceed9edd495","role":"assigned"}] agentRefs: [{"agentId":"10ee045b-1c41-479e-ba03-dceed9edd495","role":"assigned"}]
createdBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} createdBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"}
updatedBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
createdAt: 1784488343589 createdAt: 1784488343589
updatedAt: 1784488343589 updatedAt: 1784490128397
version: 1 version: 3
--- ---
Remplacer le `NoOpSyncGateway` par une orchestration réelle offline-first. Mapper Exercise, Program, WorkoutTemplate, WorkoutHistory et MediaAsset metadata vers `resourceType/clientId/schemaVersion/clientUpdatedAt/deletedAt/payload`. Utiliser `change_log`, `syncState`, `updatedAt` et `localRevision` pour pousser les mutations, stocker localement `serverCursor`, appliquer `/sync/pull` LWW sans résolution interactive, puis marquer les ressources acceptées comme synced. Les erreurs réseau restent silencieuses et déclenchent retry différé. Remplacer le `NoOpSyncGateway` par une orchestration réelle offline-first. Mapper Exercise, Program, WorkoutTemplate, WorkoutHistory et MediaAsset metadata vers `resourceType/clientId/schemaVersion/clientUpdatedAt/deletedAt/payload`. Utiliser `change_log`, `syncState`, `updatedAt` et `localRevision` pour pousser les mutations, stocker localement `serverCursor`, appliquer `/sync/pull` LWW sans résolution interactive, puis marquer les ressources acceptées comme synced. Les erreurs réseau restent silencieuses et déclenchent retry différé.

View File

@ -1,6 +1,6 @@
--- ---
issueRef: "#67" issueRef: "#67"
version: 1 version: 2
updatedBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedAt: 1784488354627 updatedAt: 1784490111791
--- ---

View File

@ -2,15 +2,15 @@
id: "961d38c4-a124-47da-8118-be8b559fc617" id: "961d38c4-a124-47da-8118-be8b559fc617"
number: 67 number: 67
title: "[DevFrontend] Profil et écrans auth optionnels" title: "[DevFrontend] Profil et écrans auth optionnels"
status: "open" status: "qa"
priority: "medium" priority: "medium"
sprint: null sprint: null
links: [{"target":"#63","kind":"relatesTo"},{"target":"#64","kind":"dependsOn"}] links: [{"target":"#63","kind":"relatesTo"},{"target":"#64","kind":"dependsOn"}]
agentRefs: [{"agentId":"9933c93a-b8a1-4164-a3bb-7063fdad747d","role":"assigned"}] agentRefs: [{"agentId":"9933c93a-b8a1-4164-a3bb-7063fdad747d","role":"assigned"}]
createdBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} createdBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"}
updatedBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
createdAt: 1784488354627 createdAt: 1784488354627
updatedAt: 1784488354627 updatedAt: 1784490111791
version: 1 version: 2
--- ---
Ajouter l'entrée `Profil` sur l'accueil et les surfaces UX connecté/déconnecté. Créer les écrans `Créer un compte`, `Se connecter`, confirmation logout. La connexion reste optionnelle, jamais affichée au démarrage. Erreurs serveur/réseau uniquement inline dans les formulaires, jamais popup globale. Profil affiché depuis cache local même hors ligne. Ajouter l'entrée `Profil` sur l'accueil et les surfaces UX connecté/déconnecté. Créer les écrans `Créer un compte`, `Se connecter`, confirmation logout. La connexion reste optionnelle, jamais affichée au démarrage. Erreurs serveur/réseau uniquement inline dans les formulaires, jamais popup globale. Profil affiché depuis cache local même hors ligne.

View File

@ -0,0 +1,6 @@
---
issueRef: "#71"
version: 3
updatedBy: {"kind":"user"}
updatedAt: 1784490850142
---

View File

@ -0,0 +1,16 @@
---
id: "b7216520-cf5b-4e65-aeed-1839980d1fe6"
number: 71
title: "[Bug] selection de score par défaut à 0"
status: "open"
priority: "critical"
sprint: null
links: []
agentRefs: [{"agentId":"57695b92-24d0-4876-837c-76116e70a6ae","role":"assigned"}]
createdBy: {"kind":"user"}
updatedBy: {"kind":"user"}
createdAt: 1784490730564
updatedAt: 1784490850142
version: 3
---
Je dois pouvoir mettre un score par défaut à 0 lors de la création d'un exercice. Actuellement quand je met un score à 0, l'application me retourne une StateException car il y avisiblement un check qui se fait un le score > 0

View File

@ -1,3 +1,3 @@
{ {
"nextNumber": 71 "nextNumber": 72
} }

View File

@ -727,13 +727,13 @@
"issueRef": "#65", "issueRef": "#65",
"path": "65", "path": "65",
"title": "[DevBackend] Sync client incrémentale LWW vers API serveur", "title": "[DevBackend] Sync client incrémentale LWW vers API serveur",
"status": "open", "status": "qa",
"priority": "medium", "priority": "medium",
"sprint": null, "sprint": null,
"assignedAgentIds": [ "assignedAgentIds": [
"10ee045b-1c41-479e-ba03-dceed9edd495" "10ee045b-1c41-479e-ba03-dceed9edd495"
], ],
"updatedAt": 1784488343589 "updatedAt": 1784490128397
}, },
{ {
"issueRef": "#66", "issueRef": "#66",
@ -751,13 +751,13 @@
"issueRef": "#67", "issueRef": "#67",
"path": "67", "path": "67",
"title": "[DevFrontend] Profil et écrans auth optionnels", "title": "[DevFrontend] Profil et écrans auth optionnels",
"status": "open", "status": "qa",
"priority": "medium", "priority": "medium",
"sprint": null, "sprint": null,
"assignedAgentIds": [ "assignedAgentIds": [
"9933c93a-b8a1-4164-a3bb-7063fdad747d" "9933c93a-b8a1-4164-a3bb-7063fdad747d"
], ],
"updatedAt": 1784488354627 "updatedAt": 1784490111791
}, },
{ {
"issueRef": "#68", "issueRef": "#68",
@ -794,6 +794,18 @@
"7efa512f-3b3a-47b5-ade0-a2dd13073055" "7efa512f-3b3a-47b5-ade0-a2dd13073055"
], ],
"updatedAt": 1784488373778 "updatedAt": 1784488373778
},
{
"issueRef": "#71",
"path": "71",
"title": "[Bug] selection de score par défaut à 0",
"status": "open",
"priority": "critical",
"sprint": null,
"assignedAgentIds": [
"57695b92-24d0-4876-837c-76116e70a6ae"
],
"updatedAt": 1784490850142
} }
] ]
} }