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:
@ -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.
|
||||||
@ -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é.
|
||||||
@ -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
|
||||||
---
|
---
|
||||||
|
|||||||
@ -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.
|
||||||
6
.ideai/tickets/71/carnet.md
Normal file
6
.ideai/tickets/71/carnet.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
issueRef: "#71"
|
||||||
|
version: 3
|
||||||
|
updatedBy: {"kind":"user"}
|
||||||
|
updatedAt: 1784490850142
|
||||||
|
---
|
||||||
16
.ideai/tickets/71/issue.md
Normal file
16
.ideai/tickets/71/issue.md
Normal 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
|
||||||
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"nextNumber": 71
|
"nextNumber": 72
|
||||||
}
|
}
|
||||||
@ -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
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user