fix(catalogue): les signalements nomment les produits - #17
Merged
Merged
Conversation
§10.3 bis exigeait le nom depuis le debut. Le tableau du OU y dit « id Odoo ET nom du produit -- de quoi ouvrir la fiche sans chercher », et les trois listes de la page Catalogue n'affichaient que l'identifiant. Corriger « 4412 » demande de chercher d'abord de quel produit il s'agit ; corriger « AIL VIOLET SAF » commence tout de suite. C'est la difference entre un filtre et un plan de travail, et c'est la seule mesure de la qualite de la configuration Odoo que quelqu'un regardera. domain.Finding porte desormais ProductName, rempli par les treize constructeurs d'internal/catalog qui recoivent une ligne, et par duplicateID du parseur. Les trois listes -- anomalies, unites divergentes, non pesables -- sont dessinees par le MEME extrait Svelte : le nom apparait dans les trois d'un seul coup, et c'est pourquoi le banc les verifie ensemble. Une seule d'entre elles qui nommerait le produit designerait un extrait duplique ailleurs. Le nom est un INSTANTANE D'AFFICHAGE, ecrit par l'import qui l'a lu, comme weighings.product_name depuis le premier jour. Aller le chercher dans products au moment de l'affichage aurait evite la migration et menti deux fois : les signalements d'un import de mars auraient porte le nom d'aujourd'hui, et un lot REFUSE -- dont aucun produit n'entre jamais en base -- n'aurait eu aucun nom du tout, alors que c'est precisement le lot qu'on veut diagnostiquer. Il est vide dans les deux cas ou le fichier n'en donne pas : un signalement qui ne porte sur aucun produit, et une ligne trop abimee pour porter un nom, ce qu'UNREADABLE_ROW dit deja dans son propre message. L'ecran n'ecrit alors rien plutot qu'un « nom inconnu » qui serait un fait qu'il n'a pas lu. L'identifiant reste dessine dans tous les cas : c'est lui qui ouvre la fiche dans Odoo. Deux tests de store figeaient user_version a 1 et devenaient faux a la premiere migration livree. Ils lisent MigrationCount(), et reopenWithMigrations embarque maintenant TOUTES les migrations livrees, pas seulement la premiere : sans cela une base creee par le vrai Open passait pour en avance sur le binaire, et le test de sauvegarde prealable exercait la branche ERR-DB-02 au lieu de la sienne. Leurs scripts synthetiques sont numerotes AU-DELA du jeu livre, sinon migrate() rejouait un fichier deja applique -- la boucle parcourt files[v:] par indice et non par nom. Le commentaire de DB.migrationSource justifiait ce champ par « avec une seule migration livree, aucun user_version ne satisfait 0 < v < len(files) ». Cette phrase cesse d'etre vraie avec ce commit ; elle est remplacee par la raison qui survit, la mise a jour qu'un poste traverse. Ce changement ne coute rien a l'ecran client : la page Catalogue est dans le paquet d'administration, que la grille ne charge jamais. Les 4 octets d'ecart du budget -- 79 429 a 79 425 -- viennent du hachage des noms d'actifs, pas d'une ligne de code. Verifie : gofmt propre, go vet vert, 2 572 tests Go passes et 5 ecartes sur 31 paquets, la passe -race verte elle aussi, boundary et deps vertes, svelte-check sans erreur sur 338 fichiers, 766 tests front sur 34 fichiers -- deux de plus --, budget a 70,5 % du plafond avec la separation des deux entrees verifiee.
Trois entrees de SUIVI.md de suite ont affirme que la passe -race ne pouvait pas etre jouee ici -- « elle exige cgo, le depot est en zero cgo et il n'y a pas de gcc ici » -- et l'ont renvoyee a la CI Linux. C'etait faux. WinLibs est installe par winget et son gcc, MinGW-W64 UCRT 16.1.0, n'est que dans le PATH UTILISATEUR, absent du PATH machine. Un shell qui n'herite pas de l'environnement de session ne le voit pas, et go test -race repond alors « cgo: C compiler "gcc" not found », ce qui ressemble a une absence. Le cout de cette erreur n'est pas documentaire : les trois invariants de concurrence du Hub sont verifiables AVANT de pousser, et l'en-tete du Makefile demande nommement de ne jamais perdre cette verification. Elle avait ete abandonnee sur un diagnostic de PATH. Le chemin est ecrit en clair, pour ne pas le rechercher une quatrieme fois. La recherche recursive qui l'avait manque descendait a cinq niveaux sous %LOCALAPPDATA% ; les paquets winget sont au sixieme. Les compteurs sont remesures sur ce commit et non recopies : 2 572 tests Go passes, 5 ecartes, 0 echec sur 31 paquets, passe -race comprise ; 766 tests front sur 34 fichiers ; bundle client a 79 425 octets gzip, 70,5 % du budget de 112 640. L'entree du jour dit aussi ce qu'elle NE fait PAS : le panneau des produits retires depuis l'import precedent ne publie qu'un nombre, et le nommer demanderait une route de plus. C'est un compteur, pas une liste de produits.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
§10.3 bis exigeait le nom depuis le debut — « id Odoo et nom du produit, de quoi ouvrir la fiche sans chercher » — et les trois listes de la page Catalogue n'affichaient que l'identifiant. Corriger « 4412 » demande de chercher d'abord de quel produit il s'agit ; corriger « AIL VIOLET SAF » commence tout de suite.
Le chemin, du CSV a l'ecran
internal/domain/journal.goFinding.ProductNameinternal/catalog/findings.gor.Nameinternal/catalog/csvodoo/csvodoo.goduplicateIDaussiinternal/store/migrations/0002_findings_product_name.sqlproduct_name TEXT NOT NULL DEFAULT ''internal/store/imports.gointernal/web/admin.goproduct_namedansfindingDTOweb/src/admin/pages/Catalog.svelterowsLes trois listes — anomalies, unites divergentes, non pesables — sont dessinees par le meme extrait Svelte. Le nom apparait dans les trois d'un seul coup, et le banc les verifie ensemble : une seule qui nommerait le produit designerait un extrait duplique ailleurs.
Pourquoi un instantane et pas une jointure
Le nom est ecrit par l'import qui l'a lu, comme
weighings.product_namedepuis le premier jour. Une jointure surproductsa l'affichage aurait evite la migration et menti deux fois :Vide dans les deux cas ou le fichier n'en donne pas : un signalement qui ne porte sur aucun produit, et une ligne trop abimee pour porter un nom, ce qu'
UNREADABLE_ROWdit deja. L'ecran n'ecrit alors rien plutot qu'un « nom inconnu » qui serait un fait qu'il n'a pas lu. L'identifiant reste dessine partout : c'est lui qui ouvre la fiche dans Odoo.Effet de bord assume sur les tests de store
Deux tests figeaient
user_versiona 1 et devenaient faux a la premiere migration livree. Ils lisentMigrationCount(), etreopenWithMigrationsembarque desormais toutes les migrations livrees : sans cela une base creee par le vraiOpenpassait pour en avance sur le binaire, et le test de sauvegarde prealable exercait la brancheERR-DB-02au lieu de la sienne. Leurs scripts synthetiques sont numerotes au-dela du jeu livre —migrate()parcourtfiles[v:]par indice, pas par nom, et rejouerait un fichier deja applique.Le commentaire de
DB.migrationSourcejustifiait ce champ par « avec une seule migration livree, aucun user_version ne satisfait 0 < v < len(files) ». Cette phrase cesse d'etre vraie ici ; elle est remplacee par la raison qui survit.Correction documentaire jointe
Trois entrees de
SUIVI.mddeclaraient la passe-raceinjouable sur ce poste et la renvoyaient a la CI Linux. C'etait faux : WinLibs est installe, et songccn'est que dans le PATH utilisateur. Un shell qui n'herite pas de l'environnement de session repondcgo: C compiler "gcc" not found, ce qui ressemble a une absence. Les trois invariants de concurrence du Hub sont donc verifiables avant de pousser, ce que l'en-tete duMakefiledemande de ne pas perdre. Le chemin est ecrit en clair.Verification
Les deux nouveaux tests front ont ete prouves vivants : casses volontairement,
namesIn('mismatches')renvoyait bien['OEUFS PLEIN AIR'].Le budget ne bouge pas de facon significative — les 4 octets d'ecart viennent du hachage des noms d'actifs. La page Catalogue est dans le paquet d'administration, que la grille ne charge jamais.
Hors perimetre, dit explicitement
Le panneau « Produits retirés depuis l'import précédent » ne publie qu'un nombre. Les nommer demanderait une route de plus, et le panneau dit lui-meme ou les lire. C'est un compteur, pas une liste de produits.