Repository navigation
fix(sudoku,#17654): DisplayResults rend un SVG inline - #17671
Conversation
…ow() sans sortie Le helper partage SudokuHelper.DisplayResults (cellule cac5cfab de Sudoku-00-Environment-Csharp, importee par #!import dans toute la serie) terminait chaque graphique par chart.Show(). Avec Plotly.NET, Show() ouvre un navigateur ou echoue faute d'affichage : dans les deux cas il ne produisait aucune sortie de cellule. Les appelants ne portaient donc aucun graphique -- Sudoku-07 cellule 8mqqjtqpda5 n'avait, pour tout resultat, que le flux texte "Graphique de comparaison des solveurs affiche". Le helper est branche sur l'organe SVG inline que la serie possede deja (SvgChartHelper, EPIC #6927), deja utilise par Sudoku-18-Comparison-Csharp dans le meme dossier. Une garde de vacuite affiche desormais un message explicite quand une difficulte n'a aucun solveur qualifie, la ou la cellule restait muette -- indiscernable d'une absence de resultat. 7 notebooks re-executes (15 graphiques SVG, 6 messages de vacuite). 2 cellules code modifiees seulement : la definition du helper et un commentaire ; les autres notebooks ne changent que par leurs sorties, leur source restant byte-identique a main. Trois cellules de prose cessaient de decrire comme voulue une absence de graphique qui etait un defaut. See #17654 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: CHANGES_REQUESTED
[Hermes] po-2026 — review #17671 @ head 93efd53a5825be1027b16e26a28fc7fd35b041df (MED/notebook-dotnet, +5145/−2303, 7 notebooks). Full read base↔head des 7 notebooks (extraction des 2 arbres + comparaison cellule à cellule, sources et sorties), pas diff-only.
Le fond est bon, et la mesure le confirme. Les sorties text/html portent bien 15 SVG inline (02: 3, 04: 3, 07: 3, 10: 3, 12: 3) absents du base — le helper réécrit autour de SvgChartHelper.Bar(...) (cellule cac5cfab, #load en première ligne, Plotly.NET retiré) produit bien l'artefact annoncé ; les 6 messages de vacuité sont présents (04 ×3, 05 ×3) ; cdn.plot.ly = 0 partout ; 0 output d'erreur ; les 5 sources non-helper sont bien byte-identiques au base (seuls les outputs bougent), et les 2 cellules source modifiées (Sudoku-00 c.9, Sudoku-12 c.24/25) tiennent la reécriture de prose annoncée. Security scan : 0 match.
Mais la PR échoue deux gardes mécaniques, et le body ne les divulgue pas (il liste 6 contrôles, aucun des deux) :
- Kernel drift guard (base vs PR) = FAIL —
language_info.versionpasse de12.0à13.0sur 5 notebooks (Sudoku-00,02,07,10,12).Sudoku-04/05étaient déjà en13.0au base, d'où les 5 et non 7. Le contrat de la garde (#15650 point 4) exige soit la ré-exécution reproduite, soit une section## Diagnostic dérive(C.4) dans le body — absente ici (grep: 0 hit). C'est cohérent avec les « deux réparations d'environnement assumées » de la section 4 du body, mais assumé dans le texte ne vaut pas exemption reconnue par le garde : le SDK .NET a bougé (12.0→13.0) et cela doit être dit dans le body, à la forme exacte quebody_has_derive_exemptionattend. - Twin parity audit (#8057) = FAIL — 6 paires en DRIFT :
Sudoku-02 DancingLinks,04 SimulatedAnnealing,05 PSO,07 Norvig,10 ORTools,12 Z3. Le registre stocke le blob SHA de chaque jumeau ; toute édition le déplace, markdown-only inclus. Le log donne la commande chirurgicale exacte (python scripts/notebook_tools/check_twin_parity.py --update --pair "…" --by "<machine:workspace>",--updateEN DERNIER), plus une ligne en tête deknown_differences. Note : la garde signale aussi 1 paire pré-existante (relève de #8264).
Ni l'un ni l'autre n'est un défaut de la correction elle-même — ce sont deux attestations manquantes, corrigeables en un commit (section ## Diagnostic dérive + rebaseline des 6 paires). Point d'attention pour le rebaseline : si strip_probe_banner.py/scrub_papermill_paths.py sont rejoués APRÈS l'attestation, l'attestation est invalidée (#8957) — attester en dernier.
Je re-reviewerai à la tête corrigée.
…stees La re-execution C# des 7 notebooks Sudoku (DisplayResults SVG) a deplace le blob SHA des 6 paires enregistrees ; le gate prescrivait exactement ces 6 updates --pair. Verifie en local : 156 OK / 1 DRIFT preexistant (exclu par le gate, PR dediee cf #8264). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] po-2026 — review du head 2f4cdb56 (incl. rebaseline twin parity ; notebooks lus via extraction complète au head, pas diff-only).
VERDICT: LGTM
Vérifications premières mains :
- Helper Sudoku-00 cell. 9 :
using Plotly.NETretiré, plus aucun.Show(), bloc mortsolverNamesdisparu,#load "../Probas/Infer/SvgChartHelper.cs"+display(SvgChartHelper.Bar(...))en place. Garde de vacuité présente (aucun solveur qualifie→ message explicite). - Sudoku-02 au head : 3 sorties
display_dataSVG inline réelles (text/html, ~1,5 Ko chacune,<svg xmlns=... viewBox=...>), et sources byte-identiques à main cellule par cellule (26/26) — conforme à la revendication « appelants ne changent que par leurs sorties ». - Sudoku-05 : la vacuité ×3 est véridique, pas fabriquée — les outputs out78-83 montrent les 6 lignes
Disqualified(PSO + GeneticSharp × Easy/Medium/Hard, ~15 s chacune) qui précèdent les 3 messages. La garde décrit exactement l'état exécuté. - Contrôles du body :
cdn.plot.lyabsent, 0execution_count: nullajouté, grep credentials sur le diff = clean, ligneGrain:présente. - Choix
SvgChartHelper(organe existant #6927, précédent Sudoku-18 même dossier) plutôt que Plotly.NET réparé : conformeorgan-first-implementation, et le nugetPlotly.NET 5.1.0non consommé reste documenté comme résiduel hors scope.
Le commit rebaseline (2f4cdb56, 6 paires twin re-attestées) est cohérent avec les sorties régénérées. Rien à signaler.
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
[ADJOINT PREFLIGHT] |
Grain: MED/notebook-dotnet — lane myia-po-2024:CoursIA — prev: DEEP/notebook-python #17660
Scope
D3 de l'acceptance #17654. Le helper
SudokuHelper.DisplayResults— cellulecac5cfabdeSudoku-00-Environment-Csharp, partagee par#!importdans toute la serie — terminait chaque graphique parchart.Show(). AvecPlotly.NET,Show()ouvre un navigateur, ou echoue faute d'affichage : dans les deux cas il ne produit aucune sortie de cellule.Consequence mesuree sur
main: les appelants qui passent par ce helper ne portaient aucun graphique.Sudoku-07cellule8mqqjtqpda5n'avait, pour tout resultat, que le flux texteGraphique de comparaison des solveurs affiche.Correction
Le helper est branche sur l'organe SVG inline que la serie possede deja —
SvgChartHelper(MyIA.AI.Notebooks/Probas/Infer/SvgChartHelper.cs, EPIC #6927) — plutot que sur une reparation locale ou sur le remede Plotly propose par l'issue.cac5cfab:#load "../Probas/Infer/SvgChartHelper.cs"en premiere ligne,using Plotly.NET;etusing Plotly.NET.LayoutObjects;retires,DisplayResultsreconstruit autour deSvgChartHelper.Bar(...). Le bloc mortsolverNames(jamais consomme) disparait au passage.cac5cfab, garde de vacuite : quand une difficulte n'a aucun solveur qualifie (tous disqualifies ou en timeout), le helper affiche desormais un message explicite au lieu de ne rien produire. Surmain, ce cas rendait une cellule muette — indiscernable d'une absence de resultat.Sudoku-12-Z3-Csharpcellule9d27fc52et trois cellules de prose (Sudoku-00×2,Sudoku-12×1) : la prose decrivait l'absence de graphique committe comme une propriete voulue. Elle est reecrite pour decrire le comportement reel.Pourquoi
SvgChartHelperet pas unPlotly.NETrepare (organ-first-implementation) : la serie possede deja cet organe,Sudoku-18-Comparison-Csharpl'utilise dans le meme dossier et ses sorties SVG sont deja committes surmain— precedent verifie avant toute edition. Les chartsPlotly.NET.Interactives'appuient surcdn.plot.lyet rendent blanc dans un visualiseur statique (GitHub, nbviewer), ce que #6927 documente ;SvgChartHelperproduit du SVG inline sans aucune dependance, serialise dans le.ipynb.Perimetre mesure
Sudoku-00-Environment-CsharpSudoku-02-DancingLinks-CsharpSudoku-04-SimulatedAnnealing-CsharpSudoku-05-PSO-CsharpSudoku-07-Norvig-CsharpSudoku-10-ORTools-CsharpSudoku-12-Z3-CsharpLes cellules code modifiees sont 2 au total : la definition du helper et un commentaire. Les autres notebooks ne changent que par leurs sorties — leur source est byte-identique a
main(verifie cellule a cellule, cf. Regle C.3) ; ils sont committes parce que la sortie du helper partage a change.Controles
cdn.plot.lydans les sortiesexecution_countnul sur cellule code non videraise NotImplementedError/assert False/1/0)probeAddresses/ bindingPoints de review (CLAUDE.md section B)
#r "nuget: Plotly.NET, 5.1.0"de la celluled6c2d96dest laisse en place (voir Residuel), et aucune cellule d'exercice n'est touchee.validate_pr_notebooks.py origin/main(7/7 passes),scan_cell_ordering.py --fail-on HIGH(6 clean ;Sudoku-05porte 1 findingMEDpre-existant — « interpretation avant le code », cell#41 — non introduit ici puisque ce notebook n'a aucune cellule source modifiee, et sous le seuil du gate,rc=0),check_notebook_navlinks.py --check(0 nouveau lien casse par notebook),detect_markdown_rendering.py --check(0 nouvelle violation ERROR),git diff --checkpropre..net-csharplocal viascripts/notebook_tools/notebook_tools.py execute(route papermill, la seule qui persiste les sorties). Aucune sortie editee a la main : seules les normalisations admises (banniereprobeAddressesretiree parstrip_probe_banner.py, cheminspapermillramenes au basename). Deux reparations d'environnement ont ete necessaires et sont assumees ici (regle F — reparer, jamais contourner) : les sous-modulesMetaGeneticSharpet son sous-module imbriqueGeneticSharpcompiles localement (les DLL sont des artefacts non suivis, absents d'un worktree frais), etmealpy==3.0.2installe dans le CPython 3.13 expose aPythonNet— sans quoi la cellulesudoku5-cs-mealpy-runechouait surimport mealpy.DisplayResultsest appele non commente parSudoku-02/04/05/07/10/12; dansSudoku-01l'appel est commente (L57) et sa cellule ne rend que son message d'exercice — sa sortie ne change pas, il n'est pas committe ici.CSP-4-Scheduling-CSharp(Search/) importeSudoku-00mais n'utilise ni le helper ni Plotly : aucune autre famille n'est touchee.SOTA (CLAUDE.md section H, Prong A)
SOTA-OK. Le vrai moteur est invoque —
SvgChartHelperproduit le SVG reellement committe, et .NET Interactive execute bien les notebooks. Aucun workaround degrade : la sortie n'est ni de l'ASCII, ni un placeholder, ni une image fabriquee.INTRINSICn'est pas invoque : un chemin SOTA existait dans le depot pour ce besoin precis, et il est utilise.Residuel (traite hors de cette PR, assume ici)
d6c2d96ddeSudoku-00charge encore#r "nuget: Plotly.NET, 5.1.0"alors qu'aucun code ne l'emploie plus. Elle est conservee volontairement dans cette PR : la retirer est un sujet distinct (temps de restauration NuGet, et l'exercice markdown deSudoku-09qui mentionne Plotly), et l'inclure ici melangerait deux perimetres. Effet visible et assume : les sorties des appelants portent la banniereInstalled Packages ... Plotly.NET, 5.1.0emise a l'import.Sudoku-18-Comparison-Csharp, qui utilisait dejaSvgChartHelper, n'est pas touche : sa source est inchangee et ses sorties SVG deja committes correspondent au comportement du helper ; aucune re-execution n'etait due (regle C.3).Sudoku-12-Z3-Csharp: quatre cellules recoivent unidgenere parnbformat(main les stockait sans id). Leur source est byte-identique — mesurable cellule a cellule ; ce n'est pas une modification de contenu.See #17654 (D3 ; les autres blocs de l'acceptance restent ouverts)
🤖 Generated with Claude Code
Diagnostic dérive
Les notebooks Sudoku ré-exécutés portent
metadata.language_info.version12.0 -> 13.0 (version du langage C# rapportée par le kernel — pas un numéro de paquet).13.0. La base12.0est l'artefact d'exécutions anciennes (SDK 8).origin/mainau 2026-09-24 : 214 notebooks C# à 13.0 contre 34 à 12.0 (distribution complète et suivi : notebooks C#: language_info.version 12.0 vs 13.0 — decider le canon (34 restants a 12.0, guard kernel-drift a chaque re-exec) #17679). Réécrire12.0à la main serait une fausse provenance : les sorties commises ont été produites par le kernel C# 13.signature_drift_cells: []— aucune signature float n'a dérivé, la dérive est purement metadata.