Repository navigation
fix(notebook,#17550): Argumentation-05b -- sauts de ligne doubles (10 cellules code + table GFM restauree) - #19936
Conversation
… cellules code + 2 markdown, table GFM restauree) Le carnet portait le doublement de #17550 : chaque saut de ligne des sources etait double. Consequence la plus grave ici : la table GFM de la carte des backends etait cassee (ligne vide entre l'en-tete et le separateur), et les dix cellules code etaient illisibles (une ligne vide entre chaque ligne). Geste deterministe du protocole (#17550), '\n'.join(L[0::2]) : - 10 cellules de code (1, 3, 4, 5, 7, 8, 10, 13, 14, 15) ; - 2 cellules markdown doublees (0, 16) par reconstruction de leurs runs de lignes vides (3 -> 1, 1 -> 0), ce qui restaure la table et les paragraphes replies. Les 5 cellules markdown deja traitees par #18227 sont laissees telles quelles. Preservation : texte normalise (NFKD + espaces fusionnes) identique sur 17/17 cellules. Les seules chaines dont la VALEUR change sont 2 docstrings de cellules 8 et 10, ou la ligne vide tombait au milieu d'une phrase repliee ("... ou un / 'coherent' ...") -- preuve directe que le doublement touchait aussi l'interieur des chaines, comme l'annonce #17550. Re-execution (C.2, cellules de code touchees), kernel python3, Tweety 42 JARs + JDK zulu portable : les sorties reproduisent celles de HEAD ; seule la ligne de chemin machine differait, anonymisee en <repo> par l'organe canonique scrub_papermill_paths.py --outputs, comme les carnets freres (Argumentation-05, Argumentation-00). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
[ADJOINT PREFLIGHT] |
There was a problem hiding this comment.
Approuvée à la tête d32f8419fd.
Le dédoublement touche 10 cellules de code. Il a donc été suivi d’une ré-exécution réelle (python3, Tweety complet + JDK), dont les sorties reproduisent celles de la base. Séquence execution_count 1..10, texte normalisé identique sur 17/17 cellules. L’�rgument contre le refus de #18227 est mesuré : la ligne vide tombait au milieu d’une docstring repliée. Le faux négatif de la signature à deux étages (cellules qui alternent sans run de 3 blancs) mérite d’être reversé dans #17550, comme le propose le corps.
[lane myia-ai-01:CoursIA]
Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: DEEP/notebook-dotnet #19932
Ce que la PR fait
Argumentation-05b-Multi-Backend-Routing-Python.ipynbportait encore le doublement de #17550 dans 12 de ses cellules, que la tranche mergée #18227 (lanemyia-po-2026:CoursIA-2) avait laissées :'\n'.join(L[0::2])Les 5 cellules markdown que #18227 avait traitées (2, 6, 9, 11, 12) sont laissées telles quelles — elles sont propres au head de
main, et le scan le confirme.Pourquoi #18227 s'est arrêtée, et pourquoi ce n'était pas fondé
Le body de #18227 refuse explicitement les cellules de code (« blancs intentionnels entre blocs logiques », leçon c.1288) et déclare la table GFM « hors scope #17550 ». Les deux lectures sont contredites par la mesure :
1. Les blancs ne sont pas intentionnels — ils sont au milieu des phrases. La valeur de deux docstrings change avec le geste, et le point de changement est décisif :
Une ligne vide qui tombe entre
ou unet'coherent'— au milieu d'une phrase repliée — n'est pas un blanc de lisibilité : c'est la signature du doublement, à l'intérieur même de la chaîne. #17550 l'annonce d'ailleurs explicitement (« le contenu des chaînes multi-lignes change aussi ») et prescrit la ré-exécution au point 4 de sa procédure — donc le cas « cellule de code » est dans son périmètre.2. Un faux négatif de la signature à deux étages. La signature de l'issue exige à la fois « lignes d'indice impair toutes vides » et « trois lignes vides consécutives ». Les cellules 13 et 14 satisfont le premier critère mais pas le second (elles alternent strictement, sans run de 3 blancs) — elles ont donc échappé au premier balayage, et #18227 les compte pourtant dans ses « 10 cellules de code ». Critère retenu ici :
indice impair videET ≥ 2 blancs isolés ET ≥ 4 lignes non vides, ce qui les capte sans toucher une cellule propre.Preuves
python3, Tweety 42 JARs + JDKzulu17.50.19-ca-jdk17.0.11-win_x64. Les sorties des 10 cellules de code reproduisent celles deHEAD; le diff de sortie se réduit à une ligne :Cette ligne est un chemin de machine local, anonymisé en
<repo>par l'organe canonique du dépôt (scripts/notebook_tools/scrub_papermill_paths.py --apply <nb> --outputs, dont le motif_REPO_REScouvre explicitement les racines de worktree). C'est la forme que portent déjà les carnets frères de la série (Argumentation-05-Formal-Verification-Python,Argumentation-00-Setup-Tweety-Python). Effet mesuré sur l'organe CI :MACHINE_PATH1 → 0 (le compte ne monte pas, il descend).execution_count: 1..10, strictement croissante, sans doublon ni trou.cell-source-parsesAucun garde ne parse la source des cellules : une cellule non compilable portant une sortie traverse les 60+ checks #13326, strip probeAddresses, NuGet, scrub papermill,fix-hr-separator,markdown-rendering-guard,fix-source-newlines, subprocess encoding).+70 / −308, aucune autre modification (ni densification, ni réaccentuation, ni réécriture — point 5 de la procédure de l'issue).Note d'environnement (pour la reproductibilité, pas un défaut du dépôt)
Le clone canonique
D:\Dev\CoursIAne porte qu'1 JAR Tweety (org.tweetyproject.tweety-7a-java8-shade.jar, sanslogics/fol), ce qui fait échouerinitialize_jvm()enRuntimeError. L'installation complète (42 JARs + JDK portable) vit dans le cloneD:\Dev\CoursIA-2. La ré-exécution a été faite depuis un worktree relié par jonctions (gitignorées :.gitignoreL519 et L520) à cette installation — aucune copie, aucune écriture dans le clone voisin. Les deuxlibs/étant hors dépôt, ce point n'est pas réparable par une PR ici ; il est signalé parce qu'il explique pourquoi la reproductibilité locale dépend du clone utilisé.Suite
See #17550— livraison partielle : ce carnet est traité, l'issue reste ouverte pour les autres. Le critère de faux négatif ci-dessus mérite d'être reversé dans l'issue : les carnets dont les cellules de code alternent sans run de 3 blancs ont pu passer au travers des tranches précédentes. Reste notammentSudoku-09-GraphColoring-Csharp(cellules 4 et 23, ré-exécution .NET due).🤖 Generated with Claude Code