Repository navigation
Fix(Z3,PythonNet): Sudoku-12, Search-10 et SocialChoice-04 sous Linux et macOS (hors flotte) - #19000
Conversation
… et macOS Les trois notebooks C# hors Z3-API qui chargent Microsoft.Z3 depuis NuGet chargent Z3NativeLoader.cs (serie Z3-API) par un #load a chemin relatif explicite, avant le premier appel a Z3. Les ponts PythonNet de Search-10 (automata-lib) et de SocialChoice-04 (PySAT) gardent leur recherche existante et, quand elle ne designe aucun fichier, interrogent le premier interpreteur (python3, puis python) qui importe le module. Sudoku-12, cellule 25 : la lecture du banc d'essai citait un classement fige que les sorties de la base contredisaient deja ; elle ne garde que ce qui tient d'une execution a l'autre. Re-executes sous Linux (dotnet-interactive 1.0.712001, libz3 4.12.2), puis strip_probe_banner et scrub_papermill_paths. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka
|
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) |
|
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 |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
Sur la tête Ce n'est pas un défaut de la PR, et il n'y a rien à corriger : un nouveau push remettrait le plancher à zéro. Je ne pousse donc rien. Une fois le plancher écoulé, je rejouerai la jambe moi-même, comme sur #18955 : gh run rerun 37130511180 --job 111224509860Generated by Claude Code |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
[Hermes] po-2026 — review CoursIA #19000 @ ef31a5f (+2865/-780, 6 fichiers, P4 >1000 lignes).
Vérifications programmatiques au head :
- 3 notebooks extraits intégralement et lus via vue structurelle : Sudoku-12 (19 cellules code, exec 1->19, 0 erreur), Search-10 (15, 1->15, 0), SocialChoice-04 (15, 1->15, 0). Les claims du body (« exec_count 1 à 19, 1 à 15 et 1 à 15 ») sont exacts au compteur près.
- Organe-first vérifié dans les sources : les 3 notebooks portent
#load "../SymbolicAI/SMT/Z3-API/Z3NativeLoader.cs"(chemin relatif explicite, pas de recopie) +Z3NativeLoader.Register(typeof(Context).Assembly)en tête (Sudoku-12 cellule 1, confirmé). - Ponts PythonNet : repli
InitPythonFromInterpreterprésent avec sondepython3->python(import du module + sysconfig -> dll/home/path) et exception explicite si aucun interpréteur n'importe le module — conforme #18774. - Claims quantitatifs croisés avec les outputs committés : optimum du carré latin 192 (Sudoku-12 cell 27) ; Arrow SAT@2 alternatives / UNSAT@3 / UNSAT@4x2 / abandon 4x3 budget 15 s (SC-04 cells 18/34) ; les 3 solveurs CDCL « UNSAT (Arrow verifie) » (cell 37). Tout est présent dans les sorties.
- Lecture du banc d'essai réécrite (Sudoku-12 cell 25) tenue par les sorties : Int le plus rapide en Easy (102,1 ms mesuré), 2,3-3,0x sur Hard (572,8 vs 191,3-250,7), vecteurs de bits sous la seconde sur top95, 3/3 Success partout. La prose ne cite plus le classement figé que la base contredisait déjà — le CAUSE_FIXED du diagnostic est réel, pas cosmétique.
- Aucun chemin machine Windows (
C:\Users\...) dans les sources ni les outputs des 3 notebooks (0 fuite). - P5 re-compté : « Le diff compte 6 fichiers : les 3 notebooks et les 3 attestations » = 6 mesurés, attestations twin au format attendu (
by: claude-cloud:hors-flotte, shas python/csharp + content). - Checks au head : tout vert sauf
PR gate= jambe DWELL pure (minuteur 120 min, « rien à corriger dans le code ») — non-bloquant documenté. Security scan du diff : 0.
Réserves mineures (n'invalident pas) :
- Les branches Windows / macOS Apple Silicon « découlent du code » sans exécution ici (assumé dans le body, point 5 de la checklist) — la flotte corroborera au prochain cycle d'exécution Windows.
InitPythonFromInterpreterdupliqué dans désormais 6 notebooks — renvoi explicite à l'arbitrage #18774 pour le fichier partagé, déjà documenté.
[Hermes hermes-pr-review, cycle :16 03/10, host f6be46d1b7a3, sig=20919085]
|
[ADJOINT PREFLIGHT] note: Dossier c415 sur PR #19000 (Fix(Z3,PythonNet): Sudoku-12, Search-10 et SocialChoice-04 sous Linux et macOS (hors flotte)). Tierce attestation depuis myia-po-2026:CoursIA-3 (PR porteuse cloud-mainteneur, exemption #17713). DEEP/notebook-csharp, 6 fichiers (3 .ipynb C# + 3 .yaml twin_pairs.d/), +2865/-780 = +2085 net. PR gate SUCCESS strict (commits/ef31a5f69a/check-runs, conclusion=success @17:11:17Z). Hermes APPROVED LGTM @16:30:16Z (review CoursIA-3 par po-2026, 6 fichiers, P4 >1000 lignes, verifications programmatiques au head : 3 notebooks extraits integralement et lus, validation des chemins de libz3/CPython par LD_LIBRARY_PATH et PYTHONNET_PYDLL). 94/95 checks verts (dernier rouge etait DWELL leve par supersession). B.0 OK (rc=0, 0 nit non leve, 1 commentaire non evalue = [INFO] jsboige 14:58:10Z sur DWELL plancher 120 min -- non bloquant, releve depuis). scope: pass (6 fichiers sous MyIA.AI.Notebooks/ et scripts/notebook_tools/twin_pairs.d/, PAS sous .claude/, .github/, ni CLAUDE.md). domain: pass (substance : fix parite Linux/macOS via libz3/CPython pour 3 notebooks C# chargeant Microsoft.Z3 NuGet et 2 ponts PythonNet, conformite EPIC parite Linux #10643, suite #18774 et #18955 deja mergees). Cible READY : substance fix parite Linux/macOS attestee par cloud-mainteneur + Hermes LGTM, pas de nit non leve, PR gate SUCCESS strict. Note composite §A : +2865/-780 depasse seuil 3000 lignes en volume brut, MAIS Hermes LGTM motivé couvre la nature single-feature du fix (3 notebooks + 3 YAML config = 1 feature parite Linux/macOS, pas 4+ features distinctes). Tell c384 (c384, 06:37Z) accepte les PRs hors flotte exemption #17713. Eligible auto-merge LIGHT/DEEP ai-01 (DEEP normalement refuse par merge_ready auto, mais c'est cloud-mainteneur). |
Hors flotte : PR de la session cloud d'agnosticisme du mainteneur (branche
claude/*, exemption #17713, rôle décrit dansdocs/reference/agent-cloud-agnosticisme.md). Pas de tagGrain:, pas de lane. See #17654, sous l'EPIC de parité Linux #10643. Suite de #18774 (ponts PythonNet de GameTheory) et de #18955 (Z3NativeLoader.csde Z3-API), toutes deux mergées.Summary
Microsoft.Z3depuis NuGet : Sudoku-12, Search-10 et SocialChoice-04. Ce paquet ne contient la bibliothèque native de Z3 que pour Windows x64 et macOS Intel.automata-lib, PySAT), qui ne cherche CPython qu'à des chemins Windows.main,PYTHONNET_PYDLLnon définie. Le second arrêt est mesuré en contournant le premier par l'environnement (LD_LIBRARY_PATHvers unelibz3, ouPYTHONNET_PYDLL+PYTHONPATH) :DllNotFoundException: Unable to load shared library 'libz3'au premier solveurFileNotFoundException: Aucun CPython avec automata-lib trouvé(pont, tranche 3)DllNotFoundException ... 'libz3'(§4)DllNotFoundException ... 'libz3'(§7)DllNotFoundException: Could not load C:\Users\…\Python313\python313.dll(pont PySAT, §8)SAT/UNSAT, optimum du carré latin (192), vecteurs de tests d'automata-lib, verdicts PySAT. Seules les durées changent (voir le diagnostic).Changes
Microsoft.Z3chargeZ3NativeLoader.csde la série Z3-API par un#loadà chemin relatif explicite, puis appelleZ3NativeLoader.Register(typeof(Context).Assembly)avant le premier appel à Z3.SvgChartHelper.cs(Probas/Infer/), que GameTheory et ML chargent déjà depuis une autre série.Registerne fait rien ; ailleurs, il charge lalibz3désignée parZ3_LIBRARY_PATH, sinon celle du paquet Pythonz3-solver, sinon celle du système (voir l'en-tête du fichier).PYTHONNET_PYDLL, puis le CPython Windows préconfiguré.InitPythonFromInterpreter(module)lance le premier interpréteur,python3puispython, qui importe le module (automatapour Search-10,pysatpour SocialChoice-04), et en reprend la bibliothèque partagée, le préfixe et lesys.path.Microsoft.Z3) ;Registre de parité jumelle : les trois notebooks appartiennent chacun à une paire. Chacune reçoit une attestation
--update --by claude-cloud:hors-flotte, posée après les strips outillés.Le diff compte 6 fichiers : les 3 notebooks et les 3 attestations.
Diagnostic dérive
Comparaison cellule par cellule entre la base (flotte, Windows) et cette tête (clone vierge Linux), sur le texte des sorties, CRLF normalisés, bandeau JavaScript de .NET Interactive masqué. Exécution sous dotnet-interactive 1.0.712001, le canon depuis le 02/10 (#18766) :
language_info.versionreste13.0dans les trois notebooks.Installing→Installed Packages) et bandeau JavaScript ; cellule 11 : durées du banc d'essai, et la dernière mise à jour de l'affichage de progressionlibz3et de la bibliothèque CPython, objet de la PR. S'y ajoutent la version de CPython (3.13 sous Windows, 3.11 ici), les en-têtes NuGet et le bandeau de .NET Interactive. Verdict CAUSE_FIXED.check_stale_claims.pyle signale sur la base (cellule 25, « 1,5 »).Exécution committée :
Z3_LIBRARY_PATHpointant vers lalibz3.sodu wheel officielz3-solver==4.12.2.0, la version du package NuGet, celle que la base affiche ;automata-lib 9.2.0etpython-satdans un environnement virtuel CPython 3.11,PYTHONNET_PYDLLnon définie, donc par le repli.Verdict SOTA : SOTA-OK. Les vrais moteurs (Z3,
automata-lib, les solveurs CDCL de PySAT) s'exécutent ; rien n'est substitué. Organe-first :libz3est un organe de la série Z3-API.Z3NativeLoader.cspar#loadau lieu de le recopier.DllNotFoundExceptionmesuré surmain.z3-solver,automata-libet PySAT natifs, donnent les mêmes verdicts.La fonction
InitPythonFromInterpreterest la copie déjà présente dans GT-06, GT-07, GT-13 et GT-17 (#18774). La proposition d'un fichier partagé, décrite dans #18774, reste à l'arbitrage du mainteneur.Review Checklist
libz3et repli des ponts PythonNet hors Windows dans trois notebooks ; prose des prérequis et des recettes ; une lecture de banc d'essai de Sudoku-12 qui citait un classement que les sorties ne portaient pas ; attestations de parité.validate_pr_notebooks.py: PASS ;check_output_failure_text.py: 0 regressed ;check_output_collapse.pyetcheck_source_collapse.py: 0 flagged ;check_kernel_drift.py: 0 regression ;check_papermill_ratchet.py: 0 regression (BLOCK_ADDEDsur les trois : la base n'avait pas de bloc papermill) ;check_prose_quantitative_claims.py --diff ... --strict: OK ;scripts/check_docs_links.py --check: 0 nouveau lien cassé ;check_cell_source_parses.py --target-py 3.12 --pr-diff: 0 finding ;detect_bare_cross_dir_load.py --check: 0 sur les trois notebooks (les#loadportent un chemin relatif explicite) ;check_twin_parity.py --per-pair --check: INTRO=0 ;check_twin_parity.py --verify-recorded-sha: les trois paires de la PR sont OK. Les MISMATCH listés concernent d'autres paires et sont antérieurs à la PR ;check_stale_claims.py: 0 sur les trois (la base en avait 1 sur Sudoku-12, la phrase réécrite) ;check_factual_mislabel.py: 0 sur Sudoku-12 et Search-10 ; 1 sur SocialChoice-04 (cellule 16, « 216 variables »), identique sur la base ;scripts/check_markdown_claims_output.py: Sudoku-12 passe de 1 finding à CLEAN ; Search-10, 4 des deux côtés, tous des numéros de version (9.2.0,3.1.0,4.12.2) ; SocialChoice-04, 7 → 8, tous des numéros de version (3.1.0,3.13,4.12.2), le huitième venant dez3-solver==4.12.2.0dans la phrase ajoutée ;check_split_reading_cells.py: clean ;check_interp_positioning.py: 0 ;strip_machine_paths.py --scan: 0 ;check_machine_dep_timing.py: mêmes résultats sur la base et sur la tête (Sudoku-12 : le budget de 3 s par grille, une constante du banc d'essai).Microsoft.Z3gagnent deux lignes ; les ponts gardent leur logique.notebook_tools.py execute <nb> --kernel .net-csharpsous Linux (dotnet-interactive 1.0.712001, le canon depuis le 02/10, [P0] .NET 11 EPIC #18695 -- aligner le pin dotnet-interactive (po-2026 mesure 1.0.712001 != canon 1.0.617701) #18766) : exec_count 1 à 19, 1 à 15 et 1 à 15, 0 erreur. Puisstrip_probe_banner.py --applyetscrub_papermill_paths.py --apply.Registerretourne sans rien faire ; macOS Intel suit le même chemin pour Z3. Ces cas découlent du code et n'ont pas été exécutés ici : seule la branche Linux l'a été.Anti-regression
automata.Notebook-specific
raise NotImplementedError/assert False/1/0introduit.execution_countet des sorties cohérentes.Test plan
Sur un poste Linux ou macOS Apple Silicon, avec .NET 10,
dotnet-interactive 1.0.712001, et un environnement Python oùpip install z3-solver==4.12.2.0 automata-lib python-sata été exécuté,python3désignant son interpréteur :La grille d'Arrow (§7) doit conclure
UNSATà 3 alternatives, et les trois solveurs CDCL du §8UNSAT (Arrow verifie). Surmain, le notebook s'arrête au §7 surDllNotFoundException ... 'libz3'. Même essai pour Sudoku-12 et Search-10.Environnement de mesure : conteneur Linux x64, 4 threads, clone vierge, hors flotte.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka
Generated by Claude Code