[FIX] analyse: retirer un constat qui faisait peur pour rien

« 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
This commit is contained in:
Mathieu Benoit 2026-08-24 23:28:23 -04:00
parent 8be55031ab
commit 2462798f4e
2 changed files with 14 additions and 19 deletions

View file

@ -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",

View file

@ -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",