feat(recipes): permet de corriger la température d'un tech-step #29

Merged
kyuno merged 3 commits from feat/tech-step-temperature-correction into main 2026-09-05 08:06:05 +02:00
Owner

Contexte

Suite à la maquette proposée pour l'édition des métadonnées de tech-step : le popover de correction (TechStepCorrectionPopover.tsx) permet déjà de corriger la technique et d'ajouter/retirer ingrédients/ustensiles, mais la température n'a jamais eu de circuit de correction manuelle — ni côté API (submitTechStepCorrectionSchema n'avait pas de champ temperatures), ni côté service (StepTechStepTemperature n'était écrit que par toStepTechStepCreateInputs, lors d'un create/update complet de recette).

Cette PR couvre uniquement le back-end — le popover (apps/web) sera mis à jour dans une PR suivante, empilée sur celle-ci, une fois cette base posée.

Changement

  • packages/shared/src/schemas/recipe.ts : nouveau manualStepTechStepTemperatureInputSchema — celsius/gasMark/qualitative mutuellement exclusifs (exactement un des trois), même convention start/end que ingredients/utensils. Le champ temperatures rejoint le même lot combiné : dès que l'un des trois (ingredients/utensils/temperatures) est présent dans la requête, les trois sont résolus (un absent devient [], donc effacé) — jamais une fusion partielle catégorie par catégorie, même contrat que l'existant.
  • recipe-tech-step-correction.service.ts : applyManualCorrection écrit désormais StepTechStepTemperature (delete + recreate, "le manuel remplace tout" comme les deux autres tables). raw n'est jamais envoyé par le client — dérivé de description.slice(start, end) côté service, pour ne pas faire confiance à une copie qui pourrait diverger du texte réel.
  • specs/backend-architecture.md + specs/batch-cooking-modele.md : les deux routes de correction et step_tech_step_temperature n'étaient documentées nulle part — comblé au passage.

Tests

Mocha ajoutés dans recipe-tech-step-correction.test.ts : célsius/thermostat/qualitatif, rejet si zéro ou plusieurs champs renseignés, remplacement sans accumulation (auto + manuel), dérivation de raw, span hors limites.

pnpm lint + pnpm build (shared, api) clean. Mocha non exécuté — ni Docker ni Postgres accessible dans cette session (vérifié Bash et PowerShell).

🤖 Generated with Claude Code

## Contexte Suite à la maquette proposée pour l'édition des métadonnées de tech-step : le popover de correction (`TechStepCorrectionPopover.tsx`) permet déjà de corriger la technique et d'ajouter/retirer ingrédients/ustensiles, mais **la température n'a jamais eu de circuit de correction manuelle** — ni côté API (`submitTechStepCorrectionSchema` n'avait pas de champ `temperatures`), ni côté service (`StepTechStepTemperature` n'était écrit que par `toStepTechStepCreateInputs`, lors d'un create/update complet de recette). Cette PR couvre **uniquement le back-end** — le popover (`apps/web`) sera mis à jour dans une PR suivante, empilée sur celle-ci, une fois cette base posée. ## Changement - `packages/shared/src/schemas/recipe.ts` : nouveau `manualStepTechStepTemperatureInputSchema` — `celsius`/`gasMark`/`qualitative` mutuellement exclusifs (exactement un des trois), même convention `start`/`end` que `ingredients`/`utensils`. Le champ `temperatures` rejoint le même lot combiné : dès que l'un des trois (`ingredients`/`utensils`/`temperatures`) est présent dans la requête, les trois sont résolus (un absent devient `[]`, donc effacé) — jamais une fusion partielle catégorie par catégorie, même contrat que l'existant. - `recipe-tech-step-correction.service.ts` : `applyManualCorrection` écrit désormais `StepTechStepTemperature` (delete + recreate, "le manuel remplace tout" comme les deux autres tables). `raw` n'est jamais envoyé par le client — dérivé de `description.slice(start, end)` côté service, pour ne pas faire confiance à une copie qui pourrait diverger du texte réel. - `specs/backend-architecture.md` + `specs/batch-cooking-modele.md` : les deux routes de correction et `step_tech_step_temperature` n'étaient documentées nulle part — comblé au passage. ## Tests Mocha ajoutés dans `recipe-tech-step-correction.test.ts` : célsius/thermostat/qualitatif, rejet si zéro ou plusieurs champs renseignés, remplacement sans accumulation (auto + manuel), dérivation de `raw`, span hors limites. `pnpm lint` + `pnpm build` (shared, api) clean. **Mocha non exécuté** — ni Docker ni Postgres accessible dans cette session (vérifié Bash et PowerShell). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 1 commit 2026-09-04 23:53:33 +02:00
feat(recipes): permet de corriger la température d'un tech-step
All checks were successful
CI / lint (push) Successful in 2m20s
CI / build (push) Successful in 2m23s
CI / intent-service-test (push) Successful in 4m43s
CI / e2e (push) Successful in 6m17s
CI / test (push) Successful in 14m12s
5d4ed0dffb
Jusqu'ici, submitTechStepCorrectionSchema (POST /recipes/:id/steps/:stepId/
corrections) acceptait ingredients/utensils pour compléter les métadonnées
d'une technique corrigée, mais aucun champ temperatures — StepTechStepTemperature
n'était jamais écrit que par toStepTechStepCreateInputs, lors d'un create/update
complet de recette. La température ajoutée en #22 n'avait jamais eu son
propre circuit de correction manuelle.

- packages/shared/src/schemas/recipe.ts : nouveau
  manualStepTechStepTemperatureInputSchema (celsius/gasMark/qualitative
  mutuellement exclusifs — exactement un des trois — même span start/end
  que ingredients/utensils). Le champ temperatures rejoint ingredients/
  utensils dans le même lot combiné (les trois voyagent ensemble : dès que
  l'un est présent, les trois sont résolus, un absent devient [] donc
  effacé — jamais une fusion partielle catégorie par catégorie).
- recipe-tech-step-correction.service.ts : applyManualCorrection écrit
  désormais StepTechStepTemperature (delete+recreate, même logique "le
  manuel remplace tout" que les deux autres tables). raw n'est jamais
  envoyé par le client — dérivé de description.slice(start, end), pour ne
  pas faire confiance à une copie cliente qui pourrait diverger du texte
  réel. loadVisibleStepOrThrow retourne désormais le texte complet de la
  description (pas seulement sa longueur), nécessaire pour cette dérivation.
- specs/backend-architecture.md + specs/batch-cooking-modele.md : les deux
  routes de correction et step_tech_step_temperature n'étaient documentées
  nulle part — comblé au passage.
- Tests Mocha ajoutés (celsius/gasMark/qualitative, rejet si zéro ou
  plusieurs champs renseignés, remplacement sans accumulation, dérivation
  de raw, span hors limites).

Périmètre : back-end uniquement (voir la maquette proposée précédemment).
Le popover de correction (apps/web) ne sera mis à jour que dans une PR
suivante, empilée sur celle-ci.

Vérifié : pnpm lint + build (shared, api) clean. Mocha non exécuté — pas
de Postgres/Docker accessible dans cette session (ni Bash ni PowerShell).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno added 2 commits 2026-09-05 08:05:56 +02:00
feat(recipes): refond le panneau de correction des métadonnées de tech-step
All checks were successful
CI / lint (push) Successful in 2m35s
CI / build (push) Successful in 2m38s
CI / intent-service-test (push) Successful in 4m23s
CI / e2e (push) Successful in 8m0s
CI / test (push) Successful in 15m1s
6c5978dd1c
Suite à la maquette validée : redessine TechStepCorrectionPopover et ajoute
l'édition de la température, jusqu'ici la seule des 4 métadonnées sans
aucune interface (ni dans l'UI, ni côté API — voir la PR back-end empilée
sous celle-ci).

- StepDescription.tsx : le surlignage de température devient cliquable
  (un <button>, plus un <span> mort) — rouvre le popover de correction de
  la technique à laquelle il est rattaché (findTechStepForTemperature,
  résolu par span puisque la température n'a pas d'existence propre, elle
  est une métadonnée de clause comme les ingrédients/ustensiles).
- TechStepCorrectionPopover.tsx : réécrit. Les 4 sections (Technique,
  Ingrédients, Ustensiles, Température) restent toutes visibles en même
  temps — plus de bascule de tout le popover vers un sous-écran pendant
  l'ajout d'un ingrédient/ustensile/température, seule la section
  concernée affiche son propre mini-formulaire, les autres (dont le
  picker de technique) restent inchangées à côté. Le picker de technique
  se cache derrière "Changer" une fois une technique choisie (rien à
  décider une fois confirmée correcte). Chaque ingrédient/ustensile/
  température attaché s'affiche en ligne avec sa citation exacte du texte
  source (nouveau : la traçabilité vers le texte existait déjà en donnée,
  mais n'était affichée nulle part). Nouveau sélecteur à 3 modes
  (°C / Thermostat / Qualitatif) pour la température, cohérent avec le
  modèle de données (un seul des trois à la fois). Icônes SVG par
  catégorie (tag/feuille/poêle/thermomètre), même langage stroke-based
  que layouts/nav-icons.tsx.
- recipes.scss : nouveau langage visuel du popover (sections avec icône,
  lignes de métadonnées façon carte plutôt que puces, bouton "+ Ajouter"
  en pointillés plutôt qu'un lien texte, sélecteurs segmentés). Les deux
  surlignages (.step-tech-step, .step-temperature) passent de
  `cursor: help` à `cursor: pointer` — les deux sont maintenant de vrais
  déclencheurs cliquables.
- i18n : nouvelles clés (changeTechnique, temperatureSection,
  addTemperature, removeTemperature, temperatureMode.*) ; clé
  currentTechnique supprimée (le pictogramme remplace la phrase "Technique
  retenue : X") ; préfixe "+ " retiré de addIngredient/addUtensil (l'icône
  + le porte déjà visuellement).
- Tests : TechStepCorrectionPopover.cy.tsx largement réécrit (10 tests,
  dont 2 nouveaux sur la température) ; recipes.feature/recipes.ts : nouveau
  scénario Gherkin "cliquer un surlignage de température rouvre le popover
  de sa technique" (fixture Gratin dédiée), step "Changer" ajouté au
  scénario de relabel existant.

Vérifié : pnpm lint + build (shared/api/web) clean. Suites Cypress
exécutées localement (Chrome headless) : TechStepCorrectionPopover.cy.tsx
10/10, suite component complète 50/50, recipes.feature 5/5, recipes.cy.ts
8/8, recipe-sources.feature 6/6, planning-page.cy.ts 7/7. Un échec
pré-existant et sans rapport (recipe-form.feature, "Preloads an existing
recipe's ingredients when editing") reproduit identiquement avec ce
travail entièrement stashé — confirmé non lié.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge pull request 'feat(recipes): refond le panneau de correction des métadonnées de tech-step' (#30) from feat/tech-step-metadata-editor-redesign into feat/tech-step-temperature-correction
Some checks failed
CI / lint (push) Successful in 3m37s
CI / build (push) Successful in 3m46s
CI / intent-service-test (push) Successful in 5m19s
CI / e2e (push) Successful in 11m22s
CI / test (push) Failing after 17m48s
df9693ffac
kyuno merged commit 81cdc55673 into main 2026-09-05 08:06:05 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: kyuno/batchCooking#29
No description provided.