Skip to content

fix(notebook,#17550): Argumentation-05b -- sauts de ligne doubles (10 cellules code + table GFM restauree) - #19936

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17550-argumentation-05b
Oct 9, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/17550-argumentation-05b

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner

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.ipynb portait encore le doublement de #17550 dans 12 de ses cellules, que la tranche mergée #18227 (lane myia-po-2026:CoursIA-2) avait laissées :

Cellules Défaut Geste
10 cellules de code (1, 3, 4, 5, 7, 8, 10, 13, 14, 15) une ligne vide entre chaque ligne de code '\n'.join(L[0::2])
2 cellules markdown (0, 16) table GFM cassée (cell 0) + paragraphes scindés reconstruction des runs de lignes vides (3 → 1, 1 → 0)

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 :

# cellule 8, docstring AVANT
"... Toute exception ou un\n\n    'coherent' => contrat rompu ..."
# cellule 8, docstring APRES
"... Toute exception ou un\n    'coherent' => contrat rompu ..."

Une ligne vide qui tombe entre ou un et '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 vide ET ≥ 2 blancs isolés ET ≥ 4 lignes non vides, ce qui les capte sans toucher une cellule propre.

Preuves

  • Texte normalisé identique sur 17/17 cellules (NFKD, diacritiques retirés, espaces fusionnés) — l'invariant exigé par fix(notebooks): sauts de ligne doublés dans 16 notebooks de main — 4 tableaux GFM cassés, code illisible #17550, vérifié cellule par cellule.
  • Table GFM restaurée : les 8 lignes de la carte des backends redeviennent contiguës (0 ligne vide intercalée) ; en-tête et séparateur adjacents.
  • Ré-exécution réelle (C.2 — des cellules de code sont touchées), kernel python3, Tweety 42 JARs + JDK zulu17.50.19-ca-jdk17.0.11-win_x64. Les sorties des 10 cellules de code reproduisent celles de HEAD ; le diff de sortie se réduit à une ligne :
-Tweety charge depuis : D:\dev\CoursIA-2\MyIA.AI.Notebooks\SymbolicAI\Tweety
+Tweety charge depuis : <repo>MyIA.AI.Notebooks\SymbolicAI\Tweety

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_RES couvre 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_PATH 1 → 0 (le compte ne monte pas, il descend).

Note d'environnement (pour la reproductibilité, pas un défaut du dépôt)

Le clone canonique D:\Dev\CoursIA ne porte qu'1 JAR Tweety (org.tweetyproject.tweety-7a-java8-shade.jar, sans logics/fol), ce qui fait échouer initialize_jvm() en RuntimeError. L'installation complète (42 JARs + JDK portable) vit dans le clone D:\Dev\CoursIA-2. La ré-exécution a été faite depuis un worktree relié par jonctions (gitignorées : .gitignore L519 et L520) à cette installation — aucune copie, aucune écriture dans le clone voisin. Les deux libs/ é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 notamment Sudoku-09-GraphColoring-Csharp (cellules 4 et 23, ré-exécution .NET due).

🤖 Generated with Claude Code

… 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>
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.9s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 15.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 10.6s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

✅ 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 factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 10
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19936
head: d32f841
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 890e1fa26a90d059d22f0faf320c0fd0871d03e723ba3351f49523001eba2645
diff-files: 1
diff-additions: 70
diff-deletions: 308
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19936
organ-rc: 0
[/ADJOINT PREFLIGHT]
GH-IDENTITY (WARN, poursuite sous compte actif): gh auth token --user myia-po-2026 a echoue (rc=1) : no oauth token found for github.com account myia-po-2026. Provisionner le jeton machine (#17418 Phase C : master.env + trousseau), ou poser GH_TOKEN explicitement.

@myia-ai-01 myia-ai-01 left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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]

@myia-ai-01
myia-ai-01 merged commit 6349abb into main Oct 9, 2026
97 of 99 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants