Repository navigation
fix(notebook_tools,#17523): repair_morpho — borner la locution a la phrase courante - #17563
Conversation
…hrase courante is_donne_legitimate() cherchait la locution « etant/tant » dans les 60 caracteres precedents SANS borne de phrase : une locution d'une phrase anterieure legitimisait un « donné » fautif de la phrase suivante. Le defaut etait documente par le @unittest.skip de test_notebook_contamine, leve ici. Borne retenue, mesuree sur le corpus (1383 notebooks, 198 « donné » accentues hors backticks, 59 preserves par la regle actuelle) : - [.!?] seuls : 0 verdict change - + ligne blanche : 0 verdict change <- retenu - + saut de ligne simple : 1 verdict change, et c'est une locution REELLE coupee par un retour a la ligne (PyMC-10-Model-Selection) -> le saut de ligne simple reste DANS la phrase. Equivalence organe : scan_notebook() rend exactement les memes 471 findings sur les 1383 notebooks avant/apres -> aucun changement de masse sur main. Tests : 51 passed (etait 47 passed + 1 skipped) ; self-test rc=0, 22 invariants (le compte imprime etait 20 pour 19 controles). See #17523 Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
[ADJOINT PREFLIGHT] |
Path-collision (organ #13359/#13615)Cette PR #17563 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
Grain: MED/tooling -- lane myia-po-2026:CoursIA -- prev: MED/guard #17502
is_donne_legitimate()cherche la locution « etant / tant » dans les 60 caractères qui précèdent le mot cible sans borne de phrase : une locution d'une phrase antérieure légitimise un « donné » fautif de la phrase suivante. Le défaut était documenté par le@unittest.skipdetest_notebook_contamine(l.370-374) ; il est levé ici.Écart assumé au critère 2, tranché par la mesure
L'issue demandait de conserver
test_etant_donne_legitime(« le cas inter-phrase réel ») et de borner à la phrase (critères 1 et 2 en tension), en renvoyant la décision à une mesure sur les notebooks contaminés. Mesure faite, elle tranche dans l'autre sens que l'intuition de l'issue :[.!?]seuls+ligne blanche (\n\s*\n)+saut de ligne simpleLe seul verdict que le saut de ligne simple change est une vraie locution coupée par un retour à la ligne :
Probas/PyMC/PyMC-10-Model-Selection.ipynbc.0 — « l'inférence bayésienne : étant\ndonné un jeu de données ». Donc : le saut simple reste dans la phrase, la ligne blanche borne.Conséquence sur le critère 2 :
test_etant_donne_legitimeassertaitTruesur un contexte qui franchit un point (« …est complexe. On ») — il encodait exactement le défaut corrigé. Il est donc réécrit sur la locution dans la même phrase (le vrai cas légitime), et les deux cas réels sont conservés sous forme de tests nommés :test_tant_donne_avec_intercalation(Tell c.1317-L7) — inchangé, vert ;test_locution_coupee_par_saut_de_ligne_simple— nouveau, porte le witness corpus PyMC-10 (le seul cas que la borne par saut simple aurait cassé) ;test_locution_inter_phrase_ne_legitime_plus— nouveau, fixe le défaut (symétrique de l'invariant « auxiliaire » queis_prouve_legitimatepossède déjà, self-test l.440) ;test_ligne_blanche_borne_la_phrase— nouveau.Le motif de skip parlait d'un « cas inter-phrase réel » : la mesure ne trouve aucune locution inter-phrase légitime sur 1383 notebooks (0 verdict changé par la borne). Le cas réel était le line-wrap, pas l'inter-phrase.
Preuves
scan_notebook()rend exactement les mêmes 471 findings sur les 1383 notebooks du corpus, avant/après — aucun changement de masse, aucun re-accent accidentel. Script : comparaison des deux versions du module importées côte à côte (scan_notebookréel, pas une ré-implémentation).test_notebook_contaminepasse sans skip — le « sup donné » de la phrase 2 est détecté pendant que la locution de la phrase 1 et ledécidede prose sont préservés.pytest scripts/notebook_tools/tests/test_repair_morpho.py→ 51 passed (HEAD mesuré à 47 passed + 1 skipped).python scripts/notebook_tools/repair_morpho.py --self-test→ rc=0, « 22 invariants vérifiés ». Le compte imprimé valait 20 pour 19 contrôles à HEAD ; ajusté à 22 avec repair_morpho: is_donne_legitimate — la fenêtre de 60 caractères laisse une locution antérieure masquer un 'donné' fautif #17523 (+3 contrôles dans la famille locution).is_donne_legitimatedans le dépôt (grep : le prédicat n'est appelé que par son propre organe et ses tests).Hors périmètre (signalé, non touché)
ruff checkremonte 9 erreurs sur ces 2 fichiers, identiques à HEAD (mêmes lignes, hors de mes zones modifiées) : pré-existantes, non traitées ici.repair_morpho.pyn'apparaît dans aucun workflow ni pre-commit : l'organe n'est pas encore câblé en CI (sujet distinct).Closes #17523
🤖 Generated with Claude Code