migration categories standards #246
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#246
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?
Contexte
Flux de migration des catégories v2->v1 (refonte seed IPC, route
/settings/categories/migrate). L'étape d'aperçu =StepSimulate.tsx(tableau source->cible), chaque ligne =MappingRow.tsx.Aujourd'hui : une cible auto-détectée (confiance high/medium/low) est affichée en TEXTE NON éditable (
MappingRow.tsx~143) ; seules les lignes non résolues (confiance none) ont un<select>HTML PLAT sans détection à la saisie (~128). Un commentaire du code prétendant qu'une search box aide en étape 2 est obsolète/faux (la seule search est en étape 1).Décision (figée via /analyze 2026-07-04)
Rendre la cible éditable pour TOUTES les lignes (pas seulement les non résolues) avec DÉTECTION À LA SAISIE (type-ahead), en réutilisant
CategoryCombobox.Travail à faire
MappingRow.tsx, remplacer le rendu (texte non éditable +<select>plat) par un combobox type-ahead éditable sur TOUTES les lignes.src/components/shared/CategoryCombobox.tsx(type-ahead accent-insensible, clavier, hiérarchique). Écueil : il attend le typeCategory; la migration fournit desTaxonomyLeaf(useCategoryTaxonomy().getLeaves()). Écrire un mapping d'adaptationTaxonomyLeaf->Category-like (ajouterparent_id/is_active/is_inputable), OU cloner l'idiomeSecurityPickeralimenté pargetLeaves().StepSimulateet la passer en prop aux lignes (perf), plutôt quegetLeaves()par ligne.RESOLVE_ROWactuel (bump none->medium, inchangé sinon). Optionnel : marquer « modifié manuellement ».Fichiers concernés
src/components/categories-migration/MappingRow.tsx— cœur du changement.src/components/categories-migration/StepSimulate.tsx— passe la liste des cibles en prop.src/components/shared/CategoryCombobox.tsx— réutilisé (+ adaptation de type).src/hooks/useCategoryMigration.ts—RESOLVE_ROWaccepte déjà toute ligne (pas de changement de reducer requis).src/services/categoryTaxonomyService.ts/useCategoryTaxonomy.ts— source des leaves.src/i18n/locales/fr.json+en.json— cléscategoriesSeed.migration.simulate.*/ placeholder de recherche réutilisable.Surface de test
categoryMappingService.test.ts+useCategoryMigration.test.ts(dontRESOLVE_ROW) couvrent la logique.CategoryCombobox.test.tstestesortHierarchical(helper pur ; pas de DOM dans le projet).TaxonomyLeaf->Category-like.Critères d'acceptation
unresolved > 0bloque l'étape suivante) reste fonctionnelle.applyMigration(buildMappingFromRows).Complexité : Simple/Medium
Notes autopilot
fr.json/en.json(conflit i18n possible en parallèle).