|
Some checks failed
Calque le pattern « ingrédient hors-catalogue » sur `TechStep` : cinq colonnes additives (`isPlaceholder`/`displayName`/`createdById`/`createdAt`/ `reviewedAt`), migration purement additive, FK `createdById → user_profiles` en `SET NULL`. Correction d'étape : `submitTechStepCorrectionSchema` accepte `correctedTechStepName` (mutuellement exclusif de `correctedTechStepId`) ; `submitTechStepCorrection` crée une `TechStep` placeholder dans la transaction et poursuit comme si son id avait été fourni. La correction s'applique immédiatement (`source: manual`) ; nouvel event analytics `tech_step.placeholder_proposed`. `TechStepView` gagne `isPlaceholder`/`displayName` ; `GET /reference/tech-steps` exclut les placeholders. Nouveau helper web `techStepLabel` (`displayName ?? t(catalog.techSteps.<key>)`), utilisé par `StepDescription` et le popover. Le popover a une échappatoire « Ma technique n'est pas dans la liste » (champ libre). Admin : `admin-tech-step-catalog.service.ts` + routes `GET/PATCH /admin/api/catalog/tech-step-placeholders` (liste plate — les propositions de technique sont rares) ; `CatalogPage` gagne un sélecteur Ingrédients / Techniques. Tests : Mocha (proposition placeholder, rejet id+nom, exclusion catalogue, liste + mark-reviewed admin) + Cypress (composant popover, e2e admin catalogue). Assertions `.techStep` existantes mises à jour pour les 2 nouveaux champs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| 20260816100611_init | ||
| 20260816105101_add_user_auth_fields | ||
| 20260816230050_unique_diet_category_name | ||
| 20260816235436_add_category_kind | ||
| 20260817093000_add_house_admin_invite_code | ||
| 20260817120000_add_user_preference | ||
| 20260817220730_ingredient_allergies | ||
| 20260818054828_recipe_visibility_favorites_diets_dislikes | ||
| 20260818081109_ingredient_category | ||
| 20260818104845_ingredient_diet | ||
| 20260818113250_ingredient_taxonomy_rework | ||
| 20260818121549_ingredient_icon_type | ||
| 20260818190000_catalog_labels_to_keys | ||
| 20260818193000_catalog_keys_to_english | ||
| 20260819064721_planning_item_portions | ||
| 20260819165510_ingredient_reproducible_flag | ||
| 20260819180000_catalog_camel_case_uids | ||
| 20260819192851_recipe_portions | ||
| 20260819201838_ingredient_unit_catalog | ||
| 20260819210000_tech_step_catalog_key | ||
| 20260820100000_recipe_source_linking | ||
| 20260820110000_step_tech_step_sequence | ||
| 20260820120000_house_source_preferences | ||
| 20260820130000_source_icon_url | ||
| 20260820140000_step_tech_step_span | ||
| 20260821130000_drop_tech_step_mapping | ||
| 20260821140000_step_tech_step_context | ||
| 20260822090000_tech_step_correction_and_suggestion | ||
| 20260822092528_step_tech_step_source | ||
| 20260826120000_utensil_catalog | ||
| 20260826121000_step_tech_step_metadata | ||
| 20260828120000_admin_user | ||
| 20260828130000_admin_metrics | ||
| 20260828140000_ingredient_placeholder | ||
| 20260829120000_step_tech_step_temperature | ||
| 20260904120000_backfill_state | ||
| 20260905120000_leftovers_portions_requested | ||
| 20260906120000_tour_scenarios | ||
| 20260908120000_contact_message | ||
| 20260908130000_contact_message_forgejo_link | ||
| 20260909120000_recipe_ingredient_quantity_optional | ||
| 20260909130000_drop_recipe_diet | ||
| 20260909140000_tech_step_placeholder | ||
| migration_lock.toml | ||