feat(cooking-session): regroupement d'étapes sensible aux métadonnées d'action #24
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/cooking-optimizer-metadata"
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?
Empilée sur #23 (touche les mêmes fichiers web). Base à repointer sur
mainquand #23 sera mergée.Dépend aussi de #22 (métadonnées de température) — déjà mergée dans
main.L'optimiseur ne mutualisait que le pré-découpage (
chop/peeldu même ingrédient). Il regroupe maintenant aussi les actions SETUP (preheat/boil/bainMarie) entre recettes — mais seulement quand les métadonnées de l'action sont compatibles.Compatibilité des préchauffages
preheatne fusionnent que si leur température détectée est identique (temperatureKey: comparaison exacte, aucune conversion °C ↔ thermostat ↔ qualitatif devinée — même posture queShoppingListItemViewsur les unités).preheatsans température détectée fusionnent quand même (supposés compatibles).preheatà températures différentes → restent 2 tâches, ordonnées du plus froid au plus chaud, et la mise en place porte une note structuréeappliance-temperature-conflict→ le web affiche « Four requis à 2 températures — enchaîner 180 °C puis 210 °C ».boil(« porter l'eau à ébullition ») fusionne librement (pas de température).Fichiers
cooking-optimizer.ts:OptimizerTechStepInput.temperatures;isPureSetupStep/setupSignature/extractMergedSetupen miroir strict du cheminmerged-prep;comparableTemp(thermostat × 30 ≈ °C — ordre seulement, jamais la fusion) ;detectApplianceTemperatureConflicts. Phase 0 = tout le prep puis tout le setup trié froid→chaud.cooking-session.service.ts:temperatures: truedans l'include, mappingDecimal→number.packages/shared:CookingTemperatureView,kind: "merged-setup",CookingTaskView.temperatures,CookingPhaseNoteView,CookingPhaseView.notes.temperature-label.tsextrait deStepDescription.tsx(privé → partagé, réutilisé) ;taskHeadlinegèremerged-setup(« Préchauffer · 180 °C ») ;phaseNoteText; bandeau.cooking-phase__note.cookingSession.task.mergedSetupLabel,cookingSession.note.*.Hors périmètre
Regroupement des cuissons passives (
bake/roast) partageant le four ; plusieurs fours ; conversion inter-représentations pour la fusion.Vérification
pnpm lint+pnpm build(monorepo) OK.cooking-optimizer.test.ts: 47 passing (dont 7 nouveaux « setup pooling » + le test full-week mis à jour), lancé en isolation (suite pure, sans DB).cooking-session.test.ts+ cas Cypress (layout + Gherkin) écrits — nécessitent Postgres + intent-service, à jouer en CI / machine de dev (sandbox sans Docker).fetchtemporaire) : tâchemerged-setupavec température, bandeau de note, ordre froid→chaud, clair/sombre, coche.🤖 Generated with Claude Code