Recette fonctionnelle version 1.0.x #17
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
priority
high
priority
low
priority
medium
question
step
backlog
step
delivered
step
done
step
in-progress
step
todo
wontfix
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
maxime/OrganisateurFamilial#17
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Description
Liste des bugs trouvé lors de la recette fonctionnelle de la version 1.0.x
Taches
Le message d'erreur s'affiche derrière la modale. ce qui fait qu'on ne voit pas forcément l'erreur quand on saissis une date invalide lors de l'ajout d'un évènement.

Il faudrait un bouton de sélection rapide de tous les membres "Tous". De plus par défaut, c'est l'utilisateur courant qui est sélectionné et pas toute la famille.

Le changement de couleur d'un membre n'est pas pris en compte sur l'accueil ni dans les tâches tant qu'on ne recharge pas la page.
Synchroniser les champs de date du formulaire d'évènement : si la date de début passe après la date de fin, la fin est décalée pour ne pas être antérieure au début, et inversement.
Retour technique — Renommer les routes du frontend en anglais :
/emploi-du-temps,/listes,/recettes,/repas,/accueil,/parametres/:section(et ses sectionsfamille…),/bienvenuesont en français alors que tout identifiant doit l'être en anglais (AGENTS.md, Which language, where). L'application n'est pas encore déployée : aucun lien existant à préserver, donc pas de redirection depuis les anciens chemins — les redirections héritées (/administration,/mes-notifications,/famille,/dashboard,/families/:familyId/lists/…) peuvent partir aussi. Suivre les chemins partout où ils sont écrits :ex_app/src/routes.ts, les liens des notifications côté backend, la suite E2E,AGENTS.mdet la pageUXdu wiki.Plan d'action
Le détail et les arbitrages du 24/09 sont dans #issuecomment-215. Il y a une branche par ligne, livrées dans cet ordre.
fix/event-form: afficher les erreurs dans les modales, synchroniser les dates, passer àNcDateTimePicker, ajouter le bouton « Tous » aux participants et rafraîchir la couleur sur l'accueil.refactor/english-routes: routes en anglais sans redirection (/calendar…), et une page « introuvable ».fix/ui-defects: les défauts de #issuecomment-201, dont la suppression d'un article annulable.feat/ux-rework: les arbitrages #1 à #12 de #issuecomment-202.feat/visual-identity: la couleur de la famille, les icônes@mdi/js, sans surétiquettes.Recette
make lint typecheck test,make build-frontend,cd e2e && npm test, puis/code-review.NcDateTimePicker.UX(routes, vocabulaire, fiche recette, page introuvable, annulation, sélecteur de date),Architecture(route de restauration et D31), ainsi queAGENTS.md.Plan de MEP
Rien de particulier : pas de migration, et l'ensemble est livré avec la prochaine image.
Passe critique design / UX — 24/09
Parcours sur l'instance locale (« Famille Démo » de
make seed, 1 membre), en 1440×900 et en 390×844, clair et sombre, via Playwright. Les points déjà listés plus haut ne sont pas repris. Captures en bas.Défauts (rien à arbitrer)
ListRow.vuene donne aucun libellé auNcCheckboxRadioSwitch. Un lecteur d'écran annonce six fois « case à cocher » sans rien d'autre, et toucher le nom de l'article ne le coche pas : la seule cible est la case de 24 px. En magasin, à une main, c'est pourtant le geste principal. → mettre le nom de l'article dans le libellé de la case.HomeTasksCard.vue:61)./calendrier(la route que cite encore la page wikiUX) montre un écran blanc, sans message et sans entrée active dans la navigation./recettes/<id inconnu>affiche la galerie sans dire que la recette n'existe pas, et « Recettes » n'y est plus surligné.09/24/2026, 11:00 AM. Les champs natifs suivent la langue du navigateur et ignorent le format de date réglé dans Nextcloud, ce que la pageUXexclut (« le format des dates est un réglage distinct »). L'effet dépend donc du navigateur.UXprévoit un bord de couleur dans les vues jour, mois et planning. Le mois en a un, pas ces deux vues. À vérifier.UXveut un en-tête commun. Le titre commence à 361 px (Listes), 373 px (Repas, Emploi du temps), 473 px (Recettes) et 513 px (Paramètres). Dans Recettes et Paramètres, le titre est même plus en retrait que le contenu en dessous. La fiche recette a le même décalage : le lien de retour, « Ajouter une photo… », « Ajouter un ingrédient » et « Ajouter une étape » ne sont pas alignés sur le titre.À arbitrer (ma préférence entre parenthèses)
UXveut des états vides qui proposent une action. Aujourd'hui n'est pas signalé (l'emploi du temps le fait), et les jours passés ne sont pas atténués. Sur téléphone, les 14 cartes s'empilent à partir de lundi. (Un « + Planifier » discret, aujourd'hui mis en évidence, et sur téléphone l'ouverture sur aujourd'hui.)UXreprend pourtant le compteur d'éléments de FamilyWall. L'accueil l'affiche, mais l'index montre à la place « Courses » ou « Tâches », que l'icône dit déjà : la liste « Tâches » a pour sous-titre « Tâches ». (Remplacer le sous-titre par le compteur.)UX, que le multi-familles ne coûte rien à qui a une seule famille, vaut aussi pour les membres. C'est un cas rare hors démo. (Masquer ces contrôles sous deux membres. Priorité basse.)Direction visuelle
L'application est propre, fidèle à Nextcloud, et le mode sombre tient partout sans couleur cassée. Ce qui lui manque, c'est une identité : on reconnaît le kit générique, avec un bandeau en dégradé et cercles décoratifs, et une surétiquette en capitales au-dessus de chaque titre de carte (« LES 30 PROCHAINS JOURS », « PRIORITÉS », « ACCÈS RAPIDE », « 4 PERSONNES · 1 H 20 ») qui ne fait que répéter le titre. Or la seule chose propre à la famille, sa couleur et son emoji, n'apparaît que dans une pastille de 32 px.
Ce qui marche et qu'il faut garder
La carte de refus d'une échéance, qui dit où aller ; le filtre avec les visages ; la vue mois ; le planning sur téléphone ; la fiche recette en deux cartes, avec la colonne des quantités alignée ; la zone de suppression des paramètres, qui dit clairement ce qu'elle emporte.
Hors ticket
La page wiki
UXcite encore/calendrier(§ « Les routes changent de forme ») alors que la route est/emploi-du-temps. Je n'y ai pas touché.Captures
7 captures
Mobile — emploi du temps : aujourd'hui hors écran
Mobile — boutons tronqués (modale d'événement)
Repas — « No… », ordre des champs, valeur courante absente
Mobile — bandeau d'accueil et bouton de navigation
Accueil — pastille « · admin », surétiquettes
Carte d'échéance — « agenda dérivé », « Ouvrir Listes »
Listes — sous-titres redondants, cochés au milieu
Arbitrages de la passe design / UX (réponse au commentaire #issuecomment-201)
/agenda, avec une redirection depuis/emploi-du-temps. Au passage, remplacer « agenda dérivé » et « choses à faire » dans les listes de courses.Deux de ces choix font évoluer la documentation : #10 (renommage et nouvelle route) et #12 (fiche recette en pleine page). Il faudra mettre à jour la page wiki
UXau moment de les livrer.Conception — 24/09
Ce commentaire reprend la description, la passe UX (#issuecomment-201) et ses arbitrages (#issuecomment-202). Les choix faits avec Maxime aujourd'hui sont regroupés en tête, puis le travail est découpé en cinq branches, livrées dans l'ordre.
Arbitrages du 24/09
/calendar, sans redirection. Le retour technique l'emporte sur le « redirection depuis/emploi-du-temps» de #10, puisque l'application n'est pas déployée. À l'écran, on garde le mot « Agenda » : la source anglaise est « Calendar » et le catalogue la traduit.NcDateTimePicker. Le commentaire deEventDateFields.vueavait écarté ce composant à cause de sa gestion du fuseau horaire : les conversionstoInstantettoLocalsont donc à revérifier et à tester.@mdi/js(le jeu d'icônes de Nextcloud), rendu parNcIconSvgWrapper.DELETErenvoie l'article supprimé, et une route de restauration le réinsère avec son identifiant, sa position et son état coché, puis relancesyncTask(D31). Il n'y a pas de migration.Constats de l'exploration
assigneeColorest calculé par le serveur dans le résumé, etsetMemberColorne le rafraîchit pas. Dans une liste de tâches, en revanche, la puce change tout de suite (constaté aussi) : il reste à savoir ce que « dans les tâches » désignait. Hypothèse : les échéances de l'agenda.formFor). Je n'ai pas pu le reproduire avec la famille de démonstration, qui n'a qu'un membre. Il faut le rejouer avec deux membres. Autre hypothèse : sur la capture en mode sombre, un membre sélectionné et un membre non sélectionné sont presque identiques, donc on ne voit peut-être pas qui est coché.linkaujourd'hui. Côté backend, le seul chemin en français est lestart_urldu manifeste (lib/src/routes/static.ts).Branche 1 —
fix/event-form: les retours de la descriptionNcDateTimePicker, avec des tests unitaires des conversions de fuseau.setMemberColor, rafraîchir le résumé de l'accueil, et vérifier les échéances de l'agenda.Branche 2 —
refactor/english-routes: routes en anglais/home,/calendar,/lists/:listId?,/recipes/:recipeId?,/meals,/settings/:section(sectionsfamily,notifications,data,administration),/welcome. Renommer aussi le paramètre?famille=en?family=./administration,/mes-notifications,/famille,/dashboard,/families/:familyId/lists/…).App.vue,SettingsHub.vue,Welcome.vue,Recipes.vue, lesHome*Card.vue,useListSelection.ts,constants/calendars.ts, lestart_urldestatic.ts, les quatre assertionstoHaveURLet legoto(…/famille)de l'E2E.AGENTS.mdet la page wikiUX, ce qui corrige au passage la mention de/calendrier.Branche 3 —
fix/ui-defects: les défauts de la passe UXNcDialogune fois embarqué).ListRow.vue), pour que toucher le nom coche l'article.HomeTasksCard.vue). Mettre les dates en minuscules partout.ViewHeader, y compris dans Recettes, Paramètres et la fiche recette.Branche 4 —
feat/ux-rework: arbitrages #1 à #12n(…). Sur mobile, « À faire aujourd'hui » passe avant « À venir »./lists/:idet met l'élément en évidence : il faut vérifier que l'identifiant de l'élément se retrouve à partir de l'UID dérivé (D31).remainingexiste déjà dansListSummary).make l10n-build./recipes/newet/recipes/:id/edit), et la photo dès la création.Branche 5 —
feat/visual-identity: identité visuelle@mdi/js, et ajouter des icônes à la navigation.Documentation à suivre
UX: les routes, le vocabulaire « Agenda », la fiche recette en pleine page, la page introuvable, l'annulation d'une suppression et le sélecteur de date.Architecture: la route de restauration d'un article, et son lien avec D31. C'est peut-être une nouvelle décisionD…, à voir.AGENTS.md: les routes, et le paragraphe sur le shell.Branche 1 —
fix/event-form: prête pour la recetteSept commits sur
fix/event-form, rien de poussé. Chacun passemake lint typecheck test. La suite E2E complète passe à 108 sur 109 : le seul échec vient d'un test demember-colorsqui échoue aussi surmaindès qu'on le lance après un mercredi (il cherche sur l'accueil un événement déjà passé). Une tâche séparée est proposée pour le corriger./code-reviewa relevé deux points, corrigés tous les deux.Ce qui change
NcDateTimePicker, avec un champ jour et un champ heure pour le début comme pour la fin. Ils suivent le format de date de Nextcloud. Un seul sélecteur date+heure n'applique rien tant qu'on n'a pas touché l'heure, d'où les deux champs séparés. Déplacer le début déplace la fin d'autant. Placer la fin avant le début fait reculer le début d'autant.Trouvés en chemin
member-colors.specne vérifiaient rien (toHaveAttributeavecexpect.stringContaining). Elles sont corrigées.openListById. Une liste cliquée pendant l'ouverture automatique de la première était remplacée par celle-ci. C'est corrigé, avec des tests unitaires.À vérifier à la main
La famille de démo a été recréée (
make seed). Pour tester « Tout le monde », invitealicedans la famille. Les tests E2E suppriment toutes les familles de toute façon.La page wiki
UXsera mise à jour au moment du rebase, avec trois ajouts : le sélecteur de date, « Tout le monde », et la règle d'erreur étendue à toutes les modales.Avancement — branches 2 et 3 intégrées dans
main(rien n'est poussé)refactor/english-routes(2 commits) : les routes sont en anglais, sans redirection. Une URL inconnue affiche « Page introuvable ». Une liste ou une recette inconnue affiche « introuvable » dans sa propre vue. L'entrée de navigation reste surlignée sur les sous-routes :router-linkne comparait pas les paramètres, c'est ce qui causait « Recettes n'y est plus surligné ». Pages wikiUXetArchitecturemises à jour.fix/ui-defects(13 commits) : les 13 défauts de #issuecomment-201. Wiki :UX, et une nouvelle décision D42 dansArchitecture.Points à vérifier pendant ta recette
@nextcloud/dialogspour un seul usage.@nextcloud/vue: ses raccourcis ignorent les touches tapées dans un champ, et nos modales s'ouvrent avec le focus dans un champ. Échap ferme désormais la modale depuis un champ, sauf quand une liste déroulante est ouverte : il la referme d'abord.Trouvé en chemin
Les lenteurs et échecs aléatoires des tests E2E venaient de la mise en veille du Mac ou de Docker Desktop : Apache n'a reçu aucune requête pendant 17 min. La suite complète se lance maintenant sous
caffeinate(7 à 9 min au lieu de 18). Le seul échec restant est le testmember-colorsdu mercredi, qui échoue aussi surmainet a sa tâche à part.Avancement — branche 4
feat/ux-reworkintégrée dansmain(12 commits, rien n'est poussé)Les arbitrages #1 à #12 de #issuecomment-202 sont faits ; #13 reste tel quel, comme décidé. E2E : 133 tests, 132 passent (le seul échec est le test
member-colorsdu mercredi, déjà signalé). Wiki :UXmis à jour, et révisions de D10, D26 et D31 dansArchitecture.Écarts ou précisions à valider pendant ta recette
listIdaux événements du calendrier des tâches. Ce champ n'est jamais ajouté pour une liste d'une autre famille, ni dans la passe horaire D32.remainingest calculé par le serveur à chaque lecture d'une liste. L'accueil emploie la même formule que l'index (« 3 articles restants »).Les cinq branches sont sur
main(fast-forward, branches supprimées, rien de poussé). La recette globale peut commencer.Portes passées sur la dernière branche :
make lint typecheck test,make build-frontend,make l10n-check(438 sources, toutes traduites),/code-reviewsans retour. E2E : 137/138. Le seul échec estmember-colors.spec« an event of one member… several wears the family's », qui existait déjà et dépend du jour de la semaine ; il a sa propre tâche.Wiki :
UX(routes, vocabulaire « Agenda », fiche recette, page introuvable, annulation, sélecteur de date, identité visuelle) etArchitecture(D42 pour la restauration, révisions de D10, D26 et D31) sont à jour, ainsi queAGENTS.md.À regarder en priorité pendant la recette (
make reloadavant, pour recharger le catalogue) :NcDateTimePicker(fuseau), dates qui se suivent, « Tout le monde », erreur visible dans la modale sans clignotement.?item=) qui le met en évidence.Retours de recette, 1er lot
Corrigés sur
fix/recette-17(3 commits, rien de poussé) :NcDialogne le fait que si on lui passecloseOnClickOutside, qui vautfalsepar défaut. C'est ajouté aux onze modales. Un clic dans le menu d'un sélecteur de date ou d'heure laisse la modale ouverte.server.cssde Nextcloud peint tout<button>simple au survol et au focus, et sa règle l'emporte sur une classe scoped. Un clic laisse le focus derrière lui, donc la couleur restait. J'ai relevé chaque bouton au repos, au survol et après un clic : la même perte touche tous ceux dont la couleur a un sens (« Nouvel événement », le bouton de création de liste, les puces d'événement de la semaine et du mois, le planning, les créneaux remplis, et l'état sélectionné d'une liste, d'une vue, d'une famille ou d'un participant). Chacun garde maintenant sa couleur au focus, et a son propre survol : plus clair en sombre, plus foncé en clair. Les boutons neutres reviennent aussi à leur couleur après un clic. Le focus clavier garde l'anneau de Nextcloud.Les quatre nouveaux tests E2E échouent sans les correctifs. Le comportement du
server.cssest noté dans la skill (frontend-vue3.md).Recette manuelle validée par Maxime.
fix/recette-17est intégrée àmainen fast-forward et la branche est supprimée ; rien n'est poussé.E2E : 140/142. Il y a deux échecs :
member-colors« an event of several… » : connu, il dépend du jour de la semaine et a sa propre tâche.timetable« the same calendar can be read… » : Nextcloud a refusé la création d'un événement, puis le test est passé deux fois lancé seul.