From 2462798f4e3269b3fa0d4304a818bff93ccae26f Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Mon, 24 Aug 2026 23:28:23 -0400 Subject: [PATCH] [FIX] analyse: retirer un constat qui faisait peur pour rien MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit « ir_model_relation nomme une table absente » : 0 avant la migration, 68 après. Le profil idéal — et aucune conséquence. Son unique consommateur, _module_data_uninstall dans base/models/ir_model.py, teste sql.table_exists() AVANT de supprimer : la ligne périmée est ignorée, puis effacée. J'écrivais « la prochaine mise à jour de module tente de la modifier et échoue » : c'est faux. Les 68 appartiennent de plus à des modules INSTALLÉS, et database_cleanup ne touche que les désinstallés — la réparation désignée n'en aurait réparé aucune. Un constat sans conséquence et sans geste possible est du bruit, quelle que soit la netteté du signal. Restent trois constats, tous réels. --- EN --- « ir_model_relation names a missing table »: 0 before the migration, 68 after. The ideal profile — and no consequence whatsoever. Its only consumer, _module_data_uninstall in base/models/ir_model.py, tests sql.table_exists() BEFORE dropping: the stale row is skipped, then unlinked. I wrote "the next module update tries to alter it and fails": that is false. The 68 also belong to INSTALLED modules, and database_cleanup only touches uninstalled ones — the repair I named would have fixed none. A finding with no consequence and no possible action is noise, however clean the signal. Three findings remain, all real. Assisted-by: Claude Opus 5 --- script/analyse/check_migration_residue.py | 25 +++++++++++++---------- script/todo/todo_i18n.py | 8 -------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/script/analyse/check_migration_residue.py b/script/analyse/check_migration_residue.py index eaef2d6..b171851 100755 --- a/script/analyse/check_migration_residue.py +++ b/script/analyse/check_migration_residue.py @@ -35,9 +35,22 @@ parce qu'ils sont faux en eux-mêmes. Les mêmes bases, mêmes mesures : liste de prix par défaut absente 0 → 1 `product` installé, son xmlid pas là -Zéro avant, non nul après : aucun de ces quatre ne peut s'expliquer +Zéro avant, non nul après : aucun de ces trois ne peut s'expliquer autrement que par la migration. +Un quatrième a été RETIRÉ après vérification +-------------------------------------------- +« ir_model_relation nomme une table absente » : 0 avant, 68 après, le +profil idéal. Et sans la moindre conséquence. Son unique consommateur, +`_module_data_uninstall` dans `base/models/ir_model.py`, teste +`sql.table_exists(...)` AVANT de supprimer : la ligne périmée est +ignorée, puis effacée. Les 68 appartiennent en outre à des modules +INSTALLÉS, que `database_cleanup` ne touche pas — la réparation que ce +fichier désignait n'en aurait réparé aucune. + +Un constat sans conséquence et sans geste possible est du bruit, quelle +que soit la netteté du signal. Il est parti. + Chaque constat nomme l'outil qui le répare. Un rapport qui montre un dégât sans dire quoi lancer oblige à chercher, et on ne cherche pas. @@ -101,16 +114,6 @@ CONTROLES = ( "gravity": "broken", "repair": None, }, - { - "key": "orphan_relation", - "title": "Many-to-many tables named but missing", - "why": "ir_model_relation still names a table PostgreSQL does not" - " have; the next module update tries to alter it and fails.", - "sql": "SELECT count(*) FROM ir_model_relation r WHERE NOT EXISTS" - " (SELECT 1 FROM pg_class c WHERE c.relname = r.name)", - "gravity": "broken", - "repair": "script/analyse/database_cleanup.py", - }, { "key": "duplicate_index", "title": "Indexes duplicated by the Odoo 17 renaming", diff --git a/script/todo/todo_i18n.py b/script/todo/todo_i18n.py index 40f038e..d47cfc9 100644 --- a/script/todo/todo_i18n.py +++ b/script/todo/todo_i18n.py @@ -9564,14 +9564,6 @@ TRANSLATIONS = { "fr": "Un booléen qui n'est ni vrai ni faux : la langue n'est listée nulle part et ne peut plus être réactivée depuis l'interface.", "en": "A boolean that is neither true nor false: the language is listed nowhere and cannot be re-enabled from the interface.", }, - "Many-to-many tables named but missing": { - "fr": "Tables plusieurs-à-plusieurs nommées mais absentes", - "en": "Many-to-many tables named but missing", - }, - "ir_model_relation still names a table PostgreSQL does not have; the next module update tries to alter it and fails.": { - "fr": "ir_model_relation nomme encore une table que PostgreSQL n'a pas ; la prochaine mise à jour de module tente de la modifier et échoue.", - "en": "ir_model_relation still names a table PostgreSQL does not have; the next module update tries to alter it and fails.", - }, "Indexes duplicated by the Odoo 17 renaming": { "fr": "Index doublés par le renommage d'Odoo 17", "en": "Indexes duplicated by the Odoo 17 renaming",