Deux défauts mesurés dans la validation de cible de scripts/notebook_tools/rename_notebooks.py (organe mergé en #17801), tous deux rencontrés en appliquant la table de la série SmartContracts (#16231, commentaire 5836104610).
1. target_violation reçoit un chemin et juge une grammaire ancrée — 100 % de faux positifs
main() (l.803-808) parcourt pairs issu de load_mapping(...) — dont les entrées sont des chemins relatifs complets — et passe new tel quel à target_violation(new). Or target_violation (l.253-256) applique :
stem = re.sub(r"\.ipynb$", "", new_name, flags=re.I)
m = STEM_RE.match(stem) # STEM_RE = ^(?P<prefix>[A-Za-z][A-Za-z0-9]*)-(?P<num>\d+)...
STEM_RE est ancrée en ^ : sur un chemin, le premier caractère est M de MyIA.AI.Notebooks/…, et le motif échoue dès le premier / ou ..
Mesure (25/09, table SmartContracts, 31 lignes) :
| Appel |
Résultat |
target_violation("MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/SC-01-Setup-Foundry-Python.ipynb") |
"hors grammaire de serie (prefixe absent, index en tete ou separateur _)" |
target_violation("SC-01-Setup-Foundry-Python.ipynb") |
None |
Conséquence : --mapping imprime 31 avertissements sur 31 lignes, sur toutes les séries, quel que soit le sérieux de la table. Ce n'est pas cosmétique : le message est accompagné (l.806-807) de « une cible non canonique promet un second renommage -- le dire, ne pas le taire », et le docstring de target_violation (l.249-251) prescrit que la ligne tombe en A TRANCHER. Un opérateur qui lit ce flot peut donc re-trancher des lignes déjà canoniques, ou renoncer au contrôle — c'est-à-dire exactement l'inverse du but.
Correctif suggéré : target_violation(os.path.basename(new)) à l'appel (l.804), ou dans la fonction elle-même.
2. canonical_target et target_violation se contredisent sur la même cible
Sur SC-7b-ERC20-Lean-Verification-Companion.ipynb (noyau python3) :
canonical_target("SC-7b-ERC20-Lean-Verification-Companion.ipynb", "python") → SC-07b-ERC20-Lean-Verification-Companion-Python.ipynb (le titre ERC20-Lean-Verification-Companion ne se termine pas par un mot de noyau, donc la l.232 ne retire rien) ;
target_violation("SC-07b-ERC20-Lean-Verification-Companion-Python.ipynb") → "mot de noyau en infixe du titre" (_KERNEL_INFIX_RE, l.259, attrape -Lean-).
Le générateur de --propose produit donc une ligne que le lint du même organe déclare non livrable. Sur cette série, la table --propose contenait une ligne qui, par contrat (l.249-251), devait tomber en A TRANCHER — elle était proposée comme un renommage ordinaire.
Ce que j'ai fait de mon côté : la ligne est tenue hors de la PR de renommage et laissée en A TRANCHER avec la mesure, la décision de grammaire étant rendue au coordinateur (« Lean » y est le sujet du carnet — vérification Lean d'un ERC-20 — et non le nom du noyau, mais _KERNEL_INFIX_RE ne fait pas cette distinction).
Arbitrage attendu (un des deux) : soit canonical_target applique la même règle que le lint (retirer l'infixe), soit _KERNEL_INFIX_RE est restreint aux mots de noyau non porteurs de sens métier, soit la règle de grammaire tolère un infixe quand le mot désigne le sujet. Les deux fonctions doivent converger : aujourd'hui --propose et le contrôle de la table ne jugent pas avec le même critère.
Note de méthode
Ces deux défauts ont été trouvés en consommant l'organe, pas en le relisant. Le premier se voit sur n'importe quelle série en une commande ; le second demande de croiser les deux fonctions. Aucun des deux n'empêche le renommage — target_violation est un avertissement, pas un refus — ce qui est précisément pourquoi ils peuvent passer inaperçus longtemps.
See #16231 (série SmartContracts, où les deux ont été rencontrés).
Deux défauts mesurés dans la validation de cible de
scripts/notebook_tools/rename_notebooks.py(organe mergé en #17801), tous deux rencontrés en appliquant la table de la série SmartContracts (#16231, commentaire 5836104610).1.
target_violationreçoit un chemin et juge une grammaire ancrée — 100 % de faux positifsmain()(l.803-808) parcourtpairsissu deload_mapping(...)— dont les entrées sont des chemins relatifs complets — et passenewtel quel àtarget_violation(new). Ortarget_violation(l.253-256) applique :STEM_REest ancrée en^: sur un chemin, le premier caractère estMdeMyIA.AI.Notebooks/…, et le motif échoue dès le premier/ou..Mesure (25/09, table SmartContracts, 31 lignes) :
target_violation("MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/SC-01-Setup-Foundry-Python.ipynb")"hors grammaire de serie (prefixe absent, index en tete ou separateur _)"target_violation("SC-01-Setup-Foundry-Python.ipynb")NoneConséquence :
--mappingimprime 31 avertissements sur 31 lignes, sur toutes les séries, quel que soit le sérieux de la table. Ce n'est pas cosmétique : le message est accompagné (l.806-807) de « une cible non canonique promet un second renommage -- le dire, ne pas le taire », et le docstring detarget_violation(l.249-251) prescrit que la ligne tombe enA TRANCHER. Un opérateur qui lit ce flot peut donc re-trancher des lignes déjà canoniques, ou renoncer au contrôle — c'est-à-dire exactement l'inverse du but.Correctif suggéré :
target_violation(os.path.basename(new))à l'appel (l.804), ou dans la fonction elle-même.2.
canonical_targetettarget_violationse contredisent sur la même cibleSur
SC-7b-ERC20-Lean-Verification-Companion.ipynb(noyaupython3) :canonical_target("SC-7b-ERC20-Lean-Verification-Companion.ipynb", "python")→SC-07b-ERC20-Lean-Verification-Companion-Python.ipynb(le titreERC20-Lean-Verification-Companionne se termine pas par un mot de noyau, donc la l.232 ne retire rien) ;target_violation("SC-07b-ERC20-Lean-Verification-Companion-Python.ipynb")→"mot de noyau en infixe du titre"(_KERNEL_INFIX_RE, l.259, attrape-Lean-).Le générateur de
--proposeproduit donc une ligne que le lint du même organe déclare non livrable. Sur cette série, la table--proposecontenait une ligne qui, par contrat (l.249-251), devait tomber enA TRANCHER— elle était proposée comme un renommage ordinaire.Ce que j'ai fait de mon côté : la ligne est tenue hors de la PR de renommage et laissée en
A TRANCHERavec la mesure, la décision de grammaire étant rendue au coordinateur (« Lean » y est le sujet du carnet — vérification Lean d'un ERC-20 — et non le nom du noyau, mais_KERNEL_INFIX_REne fait pas cette distinction).Arbitrage attendu (un des deux) : soit
canonical_targetapplique la même règle que le lint (retirer l'infixe), soit_KERNEL_INFIX_REest restreint aux mots de noyau non porteurs de sens métier, soit la règle de grammaire tolère un infixe quand le mot désigne le sujet. Les deux fonctions doivent converger : aujourd'hui--proposeet le contrôle de la table ne jugent pas avec le même critère.Note de méthode
Ces deux défauts ont été trouvés en consommant l'organe, pas en le relisant. Le premier se voit sur n'importe quelle série en une commande ; le second demande de croiser les deux fonctions. Aucun des deux n'empêche le renommage —
target_violationest un avertissement, pas un refus — ce qui est précisément pourquoi ils peuvent passer inaperçus longtemps.See #16231 (série SmartContracts, où les deux ont été rencontrés).