Repository navigation
fix(notebook-tools,#17044): un carnet illisible n'annule plus le recensement - #17166
Conversation
…nsement `scan_root` faisait `return 1` dans son `except (OSError, json.JSONDecodeError)` : un seul carnet corrompu -- y compris sans aucun rapport avec la PR -- annulait TOUT le recensement (rc=1, zero finding, pas seulement un recensement degrade) et rougissait le depot entier. L'organe etait donc incablable en cliquet, ce que #17044 nomme « bloquant a corriger d'abord ». - mode dossier : le carnet illisible est **rapporte** (stderr, nomme) et **saute** ; le recensement continue et se declare PARTIEL (compteur + liste en fin de stderr, suffixe sur la ligne Total). Le total et les findings des carnets sains sont rendus comme avant. - mode fichier designe : le contrat documente (« 1 = fichier illisible ») etait rendu par une JSONDecodeError NON RATTRAPEE (traceback jusqu'a l'interpreteur). Meme code de retour, rendu proprement. - la forme du `--json` est INCHANGEE (liste de findings) : le rapport d'illisible passe par stderr, pour ne pas casser les consommateurs existants. Le carnet illisible n'est jamais ignore en silence : un carnet saute se lirait comme un carnet propre, ce qui est precisement le mode d'echec a eviter. Tests (suite canonique de l'organe, aucun nouveau fichier) : carnet corrompu place ENTRE deux carnets sains -> rc=0 et le carnet suivant est recense (preuve que le scan continue) ; avec `--fail-on-findings` un vrai finding reste rc=2 ; fichier designe illisible -> rc=1. Mesure : 12 passed sur l'organe corrige. Controle positif : les 3 nouveaux tests ECHOUENT sur l'organe non corrige (`origin/main`) -- ce sont des tests de regression, pas des tautologies. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] |
Path-collision (organ #13359/#13615)Cette PR #17166 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
…ts (rebase) Rebase sur main courant (193 commits) + restructuration : la suite originale de 18 tests (branche 5a74f99) est couverte a 85% par #17135/#17166/#17170 sur le chemin canonique scripts/tests/. Livraison du delta reel uniquement, dans le fichier canonique : - titres ACCENTUES (« Lecture chiffrée du résultat ») : deaccent() est sur le chemin de detection, aucune donnee accentuee dans la suite existante ; - source str (pas liste) : nbformat admet les deux, la suite existante ne fabrique que des listes ; - convention epinglee « le titre compte dans la mesure » : corps disjoints, Jaccard = 1/8, containment rares = 1/4 (chiffres cites par les bodies #17040). Le fichier parallele scripts/notebook_tools/tests/ est abandonne au profit du chemin canonique. 48 tests collectes, 46 passed + 2 xfailed sur l'organe courant. Grain: po-2026 tests-delta check_split_reading_cells (#17077, rebase post-#17135 demande par coordinateur) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ts (rebase) (#17087) Rebase sur main courant (193 commits) + restructuration : la suite originale de 18 tests (branche 5a74f99) est couverte a 85% par #17135/#17166/#17170 sur le chemin canonique scripts/tests/. Livraison du delta reel uniquement, dans le fichier canonique : - titres ACCENTUES (« Lecture chiffrée du résultat ») : deaccent() est sur le chemin de detection, aucune donnee accentuee dans la suite existante ; - source str (pas liste) : nbformat admet les deux, la suite existante ne fabrique que des listes ; - convention epinglee « le titre compte dans la mesure » : corps disjoints, Jaccard = 1/8, containment rares = 1/4 (chiffres cites par les bodies #17040). Le fichier parallele scripts/notebook_tools/tests/ est abandonne au profit du chemin canonique. 48 tests collectes, 46 passed + 2 xfailed sur l'organe courant. Grain: po-2026 tests-delta check_split_reading_cells (#17077, rebase post-#17135 demande par coordinateur) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: MED/tooling -- lane myia-po-2023:CoursIA -- prev: MED/tooling #17135
See #17044
Le defaut, et ce qu'il coutait
scan_rootfaisaitreturn 1dans sonexcept (OSError, json.JSONDecodeError)(l.169-171 sur main) :Un seul carnet corrompu n'abime donc pas le recensement : il l'annule. Le scan perd tous ses findings (pas seulement celui du carnet fautif) et rend rc=1. Consequence : l'organe est incablable en cliquet — n'importe quel carnet corrompu du depot rougit toute PR, pour une raison sans rapport avec elle. C'est le defaut que #17044 nomme « bloquant a corriger d'abord ».
Note de mesure (G.1). Sur un worktree
origin/mainfrais, le carnet cite par #17044 (QuantConnect/ESGF-2026/lean-workspace/BTC-ML-Researcher/research.ipynb) est absent (non suivi) : le scan y rend rc=0, donc le defaut n'est pas observable par cette instance. Il est latent sur main et reel — il se declenche sur tout carnet illisible, et ce fichier existe dans les arbres de travail reels. Je corrige donc la cause, pas l'instance.Le correctif
scripts/notebook_tools/check_split_reading_cells.pyscripts/tests/test_check_split_reading_cells.pyTotal). Les findings des carnets sains sont rendus comme avant.1= fichier illisible ») etait rendu par uneJSONDecodeErrornon rattrapee — traceback jusqu'a l'interpreteur. Meme code de retour, rendu proprement.Deux decisions, assumees et ecrites
1. La forme du
--jsonne change pas. Le rapport d'illisibles passe par stderr, pas par stdout : le--jsonreste la liste de findings que consomment les bodies deja postes et le cliquet. Exposer le compteur en JSON aurait casse les consommateurs pour un gain de lisibilite.2. Un carnet illisible n'est jamais ignore en silence. C'est le vrai risque de ce correctif : « ne plus avorter » peut degenerer en « avaler ». Un carnet saute se lirait comme un carnet propre — exactement ce que le cliquet doit empecher. D'ou le rapport en trois endroits (ligne par carnet, liste finale, suffixe sur
Total) et la mention explicite que le total est partiel.Ce que le correctif ne fait pas : il ne rend pas rc non-nul sur un carnet illisible. Reintroduire un rc=1 global recreerait le defaut d'origine sous une autre forme (rougir tout le depot pour un fichier sans rapport).
Preuves
python -m pytest scripts/tests/test_check_split_reading_cells.py).origin/main), et passent sur le corrige : ce sont des tests de regression, pas des tautologies. Les 9 tests d'origine restent verts dans les deux etats.Perimetre, et ordre de merge
Cette PR corrige l'organe. Le volet « cablage en cliquet bloquant » de #17044 est hors perimetre : il est deja en vol dans mon #17031 (garde
TRANCHE13du registrefast_lane_registry.py). D'ou unSee #17044, pas unCloses— l'issue demande les deux, cette PR n'en livre qu'un.Ordre de merge a declarer : cette PR et #17135 touchent la meme suite de tests (
scripts/tests/test_check_split_reading_cells.py). La seconde rebasera sur la premiere ; aucune des deux ne doit etre mergée en supposant l'autre acquise.Verifie :
check_unique_check_run_names.py --checkOK.🤖 Generated with Claude Code