You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Calculer agrégats, timeline et règles de cohérence #35
Débloqué le 2026-10-14 par D-088 (décision d'Ilan sur #378) : computed et steps.transition ne rangent que nos estimations de trajet (vol d'oiseau × un coefficient par mode, Orchestration › Transitions), jamais une réponse de Mapbox Directions. computeRoute reçoit ces transitions estimées ; la timeline de la fiche peut recevoir les trajets exacts demandés à Mapbox pour la réponse (#36).
Comportement attendu
computeRoute(input) → computed (durée, budget par personne : la somme exacte, sans minimum ni maximum (D-032) ; l'arrondi aux 5 € se fait dans l'app à l'affichage, jamais dans computed ni dans l'API (D-066), distance, marche, effort, buckets, filtres dérivés) et timeline(startsAt) avec conflits d'horaires (closed_at_arrival, closed_that_day, closes_during_step, hours_unknown).
Toutes les règles du tableau de la page wiki avec leur niveau ; seuils conservés, lus dans settings et réglables sans déploiement, injectés dans le module (D-032).
Proposition « Réordonner » par plus proche voisin quand back_and_forth se déclenche.
Critères d'acceptation
Une fixture par règle, bloquante et non bloquante
Timeline correcte avec coupure du midi et jour de fermeture
Couverture du package supérieure à 90 %
Changer un seuil dans settings modifie le résultat d'une règle sans redéploiement
D-052 (https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog) : la timeline doit porter la date de fin effective de chaque étape (steps.ends_on, sinon places.ends_on) et signaler une étape terminée ; E-06 a besoin de la dernière date possible pour une sortie.
Note de CODE (#420, pour #48) : l'éditeur a besoin des règles bloquantes à la soumission ; la PR livre donc evaluateRoute(route, now, thresholds) dans packages/orchestration/src/evaluate.ts, à étendre ici plutôt qu'à doubler. Couvert : agrégats de computed (durée, budget exact, distance, marche, effort), missing_title (code ajouté), min_steps, max_steps, step_has_duration, transition_too_long (avertissement, bloquant au double), total_too_long, too_many_transitions, duplicate_place, missing_description, missing_photo, missing_step_photo. Seuils du wiki par défaut, injectés (CoherenceThresholds) mais pas encore lus dans settings. Restent pour ce ticket : la lecture des seuils dans settings, closed_at_arrival (et l'heure proposée), unverified_place, back_and_forth (et « Réordonner »), les filtres dérivés (no_booking, indoor, outdoor), le départ calculé, les paliers lus dans settings. L'API l'appelle depuis apps/api/src/editor/workspace.ts (evaluate).
Branche issue/35-route-coherence-engine, empilée sur issue/379-fallback-speed-per-mode (table estimateOfMode, D-088) ; la PR aura cette branche pour base.
packages/orchestration, timeline : départ par défaut (10 h, 14 h pour une demi-journée), départ calculé le plus proche où chaque lieu est ouvert à l'arrivée (D-050), lieu « Accessible à toute heure » sans hours_unknown (D-049).
packages/orchestration, computeRoute : étend evaluateRoute (Gérer PUT /routes/:id/steps, submit, statuts et lien privé #48) sans le doubler ; ajoute paliers, filtres dérivés (no_booking, indoor, outdoor), transport dérivé, step_has_place, closed_at_arrival avec heure proposée, unverified_place, back_and_forth avec ordre « Réordonner » par plus proche voisin.
Seuils des règles et paliers lus depuis settings (une clé par seuil, valeur absente ou invalide = valeur du wiki), injectés dans le module.
apps/api, commit à part : l'éditeur lit les seuils dans settings à chaque évaluation (effet immédiat, sans redéploiement), et range dans computed les nouveaux champs.
Hors de ce ticket, signalé dans la PR : accès IDFM (#180), suggestions « À prévoir », ends_on (colonnes de #176 pas encore là).
📋 MANAGER (2026-10-14) : puce computeRoute amendée : computed porte le budget par personne exact, l'arrondi aux 5 € est fait par l'app à l'affichage (D-066), comme corrigé sur #36.
Déployé et vérifié en staging le 2026-10-14 (lecture des journaux, à la demande de Paul) : deploy-staging.yml vert sur 48bad0f (PR #439, run 38587275000, fini à 15:14:25Z), exécution widoo-api-migrate-sflxl réussie, santé de la nouvelle révision et du service ok. Status « Terminés ». Rappel : les coefficients vélo et voiture restent « à confirmer » par Ilan (D-088) ; les interprétations de la page Orchestration sont suivies par #457.
Activity
IlanAMG commentedon Sep 25, 2026
D-048 (https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog) : la timeline part de routes.suggested_start s'il est renseigné (sinon 10 h / 14 h / maintenant) ; routes.transport est dérivé des trajets (mode qui couvre le plus de distance, les autres en valeurs secondaires du filtre). Voir Orchestration. Schéma : #176.
IlanAMG commentedon Sep 25, 2026
D-049 (https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog) : nouvelle règle missing_step_photo (bloquante pour la publication seulement) ; closed_at_arrival propose une heure de départ compatible ; back_and_forth : « Réordonner » applique l'ordre par plus proche voisin, annulable ; pas de hours_unknown pour un lieu places.always_open. Voir https://github.com/Inprogress-Agency/widoo-app/wiki/Orchestration.
IlanAMG commentedon Sep 25, 2026
D-050 (https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog) : départ calculé quand suggested_start est vide (heure la plus proche de 10:00, 14:00 en demi-journée, où chaque lieu est ouvert) ; suggestions « À prévoir » calculées dans computed (tips_hidden pour celles désactivées) ; règles ended_place / ended_step au recalcul de nuit. Accès IDFM : #180. Voir https://github.com/Inprogress-Agency/widoo-app/wiki/Orchestration.
IlanAMG commentedon Sep 25, 2026
D-052 (https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog) : la timeline doit porter la date de fin effective de chaque étape (steps.ends_on, sinon places.ends_on) et signaler une étape terminée ; E-06 a besoin de la dernière date possible pour une sortie.
PaulThiberville commentedon Oct 14, 2026
Note de CODE (#420, pour #48) : l'éditeur a besoin des règles bloquantes à la soumission ; la PR livre donc
evaluateRoute(route, now, thresholds)danspackages/orchestration/src/evaluate.ts, à étendre ici plutôt qu'à doubler. Couvert : agrégats decomputed(durée, budget exact, distance, marche, effort),missing_title(code ajouté),min_steps,max_steps,step_has_duration,transition_too_long(avertissement, bloquant au double),total_too_long,too_many_transitions,duplicate_place,missing_description,missing_photo,missing_step_photo. Seuils du wiki par défaut, injectés (CoherenceThresholds) mais pas encore lus danssettings. Restent pour ce ticket : la lecture des seuils danssettings,closed_at_arrival(et l'heure proposée),unverified_place,back_and_forth(et « Réordonner »), les filtres dérivés (no_booking,indoor,outdoor), le départ calculé, les paliers lus danssettings. L'API l'appelle depuisapps/api/src/editor/workspace.ts(evaluate).PaulThiberville commentedon Oct 14, 2026
🔨 Démarrage — plan :
Branche
issue/35-route-coherence-engine, empilée surissue/379-fallback-speed-per-mode(tableestimateOfMode, D-088) ; la PR aura cette branche pour base.packages/orchestration, timeline : départ par défaut (10 h, 14 h pour une demi-journée), départ calculé le plus proche où chaque lieu est ouvert à l'arrivée (D-050), lieu « Accessible à toute heure » sanshours_unknown(D-049).packages/orchestration,computeRoute: étendevaluateRoute(Gérer PUT /routes/:id/steps, submit, statuts et lien privé #48) sans le doubler ; ajoute paliers, filtres dérivés (no_booking,indoor,outdoor), transport dérivé,step_has_place,closed_at_arrivalavec heure proposée,unverified_place,back_and_forthavec ordre « Réordonner » par plus proche voisin.settings(une clé par seuil, valeur absente ou invalide = valeur du wiki), injectés dans le module.apps/api, commit à part : l'éditeur lit les seuils danssettingsà chaque évaluation (effet immédiat, sans redéploiement), et range danscomputedles nouveaux champs.Hors de ce ticket, signalé dans la PR : accès IDFM (#180), suggestions « À prévoir »,
ends_on(colonnes de #176 pas encore là).PaulThiberville commentedon Oct 14, 2026
📋 MANAGER (2026-10-14) : puce
computeRouteamendée :computedporte le budget par personne exact, l'arrondi aux 5 € est fait par l'app à l'affichage (D-066), comme corrigé sur #36.PaulThiberville commentedon Oct 14, 2026
Déployé et vérifié en staging le 2026-10-14 (lecture des journaux, à la demande de Paul) :
deploy-staging.ymlvert sur48bad0f(PR #439, run 38587275000, fini à 15:14:25Z), exécutionwidoo-api-migrate-sflxlréussie, santé de la nouvelle révision et du service ok. Status « Terminés ». Rappel : les coefficients vélo et voiture restent « à confirmer » par Ilan (D-088) ; les interprétations de la page Orchestration sont suivies par #457.