Skip to content

[verify-runtime,#14908,#15191] acceptance 4 runtime — exec Papermill d'un notebook python3-wsl sur les 2 venv WSL #15220

Description

@jsboige

Vérification runtime acceptance 4 — verify_kernel_env vs wsl_papermill

Contexte

PR #15191 (commit 45a382696aa9, lane myia-po-2027:CoursIA-2) livre scripts/notebook_tools/verify_kernel_env.py (320 LOC, 28 tests verts). Cet outil vérifie statiquement la cohérence metadata.kernelspec ↔ argv ↔ venv d'exécution pour les notebooks GenAI/Image + SemanticKernel 10a/10b tranche 1.

L'acceptance 4 de #14908 demande explicitement une vérification runtime :

« Contrôle : exécuter un notebook python3-wsl et vérifier que l'interpréteur effectif est bien celui de son kernelspec (sys.executable dans une cellule). »

verify_kernel_env.py répond à l'acceptance 1-3 de #14908 (statique) ; l'acceptance 4 (runtime) reste ouverte car elle exige une exécution Papermill réelle d'un notebook sur les deux environnements WSL (.lean4-venv et ~/coursia-wsl) pour vérifier que l'écart de venv est levé.

Acceptance

Pourquoi cette acceptance est séparée de #14908

#14908 est l'EPIC (4 acceptance). PR #15191 ferme 1-3 (statique). Cette issue isole 4 (runtime). Au merge final de la PR runtime (post-acceptance), les 4 point(s) seront satisfaits et #14908 pourra être CLOSED.

Issue de suivi (pas doublon d'#14908) — règle F (reparer, pas contourner) + Tell B.0 voie 3.

Lane

myia-po-2027:CoursIA-2, c.1004.

— issue de suivi ouverte depuis le préflight ai-01 sur PR #15191 (msg-20260908T150715-preflight).

Activity

  1. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    and removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 9, 2026
  2. jsboige commented on Sep 11, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] myia-po-2026:CoursIA 2026-09-11T18:05Z — exécution de l'acceptance runtime (2 venvs WSL, sys.executable verbatim). Réponse dans ce cycle.

  3. jsboige commented on Sep 11, 2026

    @jsboige
    OwnerAuthor

    Vérification runtime acceptance 4 — livrée

    Notebook de référence : MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-1-Setup.ipynb (kernelspec python3-wsl, « Python 3 (WSL) »). Choix motivé : les notebooks GenAI/Image vérifiés statiquement par #15191 (ex. 01-2-GPT-5-Image-Generation.ipynb) appellent des services externes/API facturées — disproportionnés pour un test de résolution de kernel ; Lean-1-Setup est un diagnostic d'env idempotent (8 cellules code, sans effet de bord sous WSL), kernelspec python3-wsl littéral.

    État des kernels WSL avant exécution (sonde)

    $ jupyter kernelspec list
      python3        /home/jesse/coursia-wsl/share/jupyter/kernels/python3
      lean4-wsl      /home/jesse/.local/share/jupyter/kernels/lean4-wsl
      python3-wsl    /home/jesse/.local/share/jupyter/kernels/python3-wsl
    

    Le kernel.json user-level de python3-wsl porte un argv absolu (pas un python nu) :

    "argv": ["/home/jesse/.python3-wsl-venv/bin/python", "-Xfrozen_modules=off",
             "-m", "ipykernel_launcher", "-f", "{connection_file}"]

    Les deux exécutions Papermill (wsl_papermill.py @ df524f5, #14930)

    Run A — venv activé ~/.lean4-venv :

    $ python wsl_papermill.py execute Lean-1-Setup_lean4venv.ipynb --kernel python3-wsl --venv ~/.lean4-venv
    [!] kernel 'python3-wsl' declares venv /home/jesse/.python3-wsl-venv; executing in ~/.lean4-venv -- pass --venv /home/jesse/.python3-wsl-venv to match
    [info] venv: ~/.lean4-venv
    Executing (WSL): Lean-1-Setup_lean4venv.ipynb ...
      OK: 8/8 cells executed, 0 errors (37.1s)
    

    Run B — venv activé ~/coursia-wsl :

    $ python wsl_papermill.py execute Lean-1-Setup_coursiawsl.ipynb --kernel python3-wsl --venv ~/coursia-wsl
    [!] kernel 'python3-wsl' declares venv /home/jesse/.python3-wsl-venv; executing in ~/coursia-wsl -- pass --venv /home/jesse/.python3-wsl-venv to match
    [info] venv: ~/coursia-wsl
    Executing (WSL): Lean-1-Setup_coursiawsl.ipynb ...
      OK: 8/8 cells executed, 0 errors (15.7s)
    

    sys.executable verbatim (sonde kernel-boot, même mécanisme que Papermill)

    Lean-1-Setup utilise sys.executable en logique interne mais ne l'imprime pas en clair dans ses sorties. Pour la citation verbatim exigée, sonde jupyter_client.KernelManager(kernel_name="python3-wsl") exécutée depuis chaque venv activé (boot réel du kernel, import sys; print(sys.executable) dans le kernel) :

    Venv activé (shell which python) sys.executable du kernel python3-wsl
    /home/jesse/.lean4-venv/bin/python /home/jesse/.python3-wsl-venv/bin/python
    /home/jesse/coursia-wsl/bin/python /home/jesse/.python3-wsl-venv/bin/python

    Preuve end-to-end complémentaire (là où le kernel a réellement tourné)

    La cellule « Installation des packages Python » (cellule 21) installe matplotlib, semantic-kernel, etc. via le pip du kernel. Après le run A (venv activé .lean4-venv) :

    Venv matplotlib semantic-kernel
    ~/.python3-wsl-venv 3.10.9 installé 1.42.0 installé
    ~/.lean4-venv (activé) absent absent
    ~/coursia-wsl 3.10.9 (préexistant) absent

    Les installs ont atterri dans ~/.python3-wsl-venv — l'interpréteur du kernel — pas dans le venv activé.

    Verdict

    Acceptance 4 de #14908 : satisfaite. L'interpréteur effectif est bien celui que le kernelspec déclare : sys.executable = /home/jesse/.python3-wsl-venv/bin/python = argv[0] du kernel.json de python3-wsl, de façon déterministe (identique quel que soit le venv activé). Le défaut de reproductibilité de #14908 (« des sorties produites par un environnement que le notebook ne nomme nulle part ») est éteint : le kernel python3-wsl exécute toujours sur .python3-wsl-venv, et le warning de wsl_papermill nomme ce venv à chaque exécution.

    La branche conditionnelle de cette issue ne se déclenche pas. « Si l'écart persiste (la PR #15191 ne change pas wsl_papermill.py), ré-ouvrir l'acceptance 1-2 sur #14908 » repose sur une prémisse caduque : #15191 n'a certes pas touché wsl_papermill.py, mais #14930 (df524f5) a livré les acceptances 1-3, vérifiées runtime ci-dessus :

    1. --venv explicite fonctionne (runs A/B) ✔
    2. dérivation venv ← kernel.json du kernelspec déclaré fonctionne (le warning cite /home/jesse/.python3-wsl-venv) ✔
    3. divergence imprimée sur stdout, une ligne, avec la commande corrective exacte ✔

    Ce qui persiste est un fait structurel distinct — le kernel user-level python3-wsl porte un argv absolu, donc « exécuter sur .lean4-venv activé » ne fait pas tourner le kernel sur .lean4-venv — mais c'est précisément ce que le kernelspec déclare, c'est déterministe, documenté (le warning dit mot pour mot quoi passer pour matcher), et hors périmètre des acceptances 1-2. Ré-ouvrir 1-2 serait invalider des livrables vérifiés.

    Cette issue est donc close sur son livrable (documentation des deux sorties + verdict) : #15220 peut être fermée, et la ligne 4 de #14908 peut être considérée satisfaite par son owner.

    — myia-po-2026:CoursIA, 2026-09-11

  4. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 13, 2026
  5. jsboige commented on Sep 13, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — PR #15191 MERGED, le travail est déjà sur main. Tell c.1356 ★★★ preflight +\nTell c.1502 strict : la lane worker rend la main, fermeture relève du coordinateur/adjoint.

  6. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 14, 2026
  7. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED-AMEND] lane myia-po-2026:CoursIA-2 -- paths: scripts/notebook_tools/**, MyIA.AI.Notebooks/IIT/ICT-Series/ICT-25-InoculationRL.ipynb (lecture seule pour verif cross-refs) -- 2026-09-15T21:15Z

    Grain: MED/guard -- lane myia-po-2026:CoursIA-2 -- prev: DEEP/slides #16290

    Reprise du claim stale myia-po-2026:CoursIA (98.5h >= 48h Tell c.12751) pour livraison acceptance 4 runtime Papermill (issue #15220) : exec Papermill d'un notebook python3-wsl et verification sys.executable verbatim.

  8. added 2 commits that reference this issue on Sep 15, 2026
  9. jsboige commented on Sep 23, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — lane myia-po-2027:CoursIA (c.813, tirage picker confronte au reel).

    L'acceptance 4 (runtime) est livree : PR #16335 MERGED 2026-09-16T02:12:10Z (« runtime kernelspec verifier via Papermill + sys.executable.basename capture »), suite directe du commentaire du 2026-09-11T19:13Z (« Verification runtime acceptance 4 — livree », notebook de reference Lean-1-Setup.ipynb, sorties documentees). Verifie firsthand : gh pr view 16335 --json state,mergedAt.

    La lane worker rend la main — fermeture relevant du coordinateur/adjoint (urne delivered, #15069).

  10. jsboige commented on Oct 4, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2027:CoursIA — acceptance 4 runtime : exec Papermill du notebook de reference sur les 2 venv WSL, preuves sys.executable en commentaire

  11. jsboige commented on Oct 4, 2026

    @jsboige
    OwnerAuthor

    Acceptance 4 runtime — mesurée firsthand sur myia-po-2027 (WSL Ubuntu), verdict : ÉCART CONFIRMÉ (exécution 2026-10-04, lane myia-po-2027:CoursIA)

    Le mécanisme runtime est sain quand le kernel est enregistré ; l'écart est ailleurs, et il est plus large que prévu. Quatre mesures, verbatim :

    1. Contrôle positif — le venv présent exécute bien son propre interpréteur.
    Papermill sur une sonde (--kernel python3) sous ~/.lean4-venv :

    sys.executable = /home/jesse/.lean4-venv/bin/python
    sys.version = 3.11.16
    

    Le kernelspec python3 est enregistré par le venv lui-même (~/.lean4-venv/share/jupyter/kernels/python3) : sys.executable matche le kernelspec. ✓

    2. Le kernelspec python3-wsl n'existe nulle part sur ce siège.
    jupyter kernelspec list (venv) ne rend que :

    lean4-wsl    /home/jesse/.local/share/jupyter/kernels/lean4-wsl
    python3      /home/jesse/.lean4-venv/share/jupyter/kernels/python3
    

    Exécution réelle avec ce nom, verbatim :

    jupyter_client.kernelspec.NoSuchKernel: No such kernel named python3-wsl
    

    3. Six notebooks du dépôt déclarent pourtant python3-wsl — et aucun n'est dans GenAI/Image : GameTheory/SocialChoice/04-Computational-Aggregation-SAT-Z3.ipynb, SymbolicAI/Lean/Lean-07-LLM-Integration-Lean-Python.ipynb, Lean-07b-Examples-Python.ipynb, Lean-10-LeanDojo.ipynb, SymbolicAI/SymbolicLearning/SL-4-InductiveLogicProgramming.ipynb, SL-6-ModernILP.ipynb. Le notebook d'exemple de l'issue est donc mal choisi : 01-2-GPT-5-Image-Generation.ipynb déclare kernelspec.name = "python3" (comme les 25/25 carnets GenAI/Image, compté au glob).

    4. Le venv par défaut de wsl_papermill.py est absent sur ce siège : ~/coursia-wsl → No such file or directory (le docstring du script ligne 12 le donne pourtant pour défaut, avec ses commandes d'installation ligne 21-22).

    Lecture. #15191 a rendu la cohérence statique ; la mesure runtime montre que la convention python3-wsl n'est adossée à aucun kernelspec installé — les six carnets qui la déclarent échouent en NoSuchKernel sur ce siège (exactement l'avertissement codé dans wsl_papermill.py l.265-267), et le venv par défaut du même outil n'existe pas. Ce n'est pas une non-exécution locale : c'est l'objet même de l'acceptance 4.

    Suite appliquée : acceptance 1-2 de #14908 ré-ouverte en commentaire (prescrit par cette issue), avec la mesure ci-dessus comme preuve. Le choix du kernelspec cible (python3-wsl → quel interpréteur ? .lean4-venv pour les carnets Lean ? ~/coursia-wsl pour GameTheory ?) est une décision de conception qui revient au porteur de #14908/#15191 — la lane ne fabrique pas ce mapping pour verdir l'acceptance.

  12. jsboige commented on Oct 4, 2026

    @jsboige
    OwnerAuthor

    Addendum — réparation règle F appliquée et second côté mesuré (lane myia-po-2027:CoursIA, 2026-10-04)

    Le venv par défaut documenté de wsl_papermill.py (~/coursia-wsl, docstring l.12 + commandes l.21-22) a été créé sur ce siège (il était absent — mesure 4 ci-dessus), avec sa pile documentée (nashpy matplotlib papermill ipykernel scipy numpy) et son kernelspec enregistré. Paire de mesures runtime désormais complète :

    Kernel Interpréteur rendu par sys.executable Verdict
    python3 (propriété ~/.lean4-venv) /home/jesse/.lean4-venv/bin/python (3.11.16) matche ✓
    gametheory-wsl (enregistré par ~/coursia-wsl, Python 3.14.4) /home/jesse/coursia-wsl/bin/python matche ✓
    python3-wsl (déclaré par 6 carnets du dépôt) — NoSuchKernel (écart ouvert, ci-dessus)

    Les deux venvs exécutent donc bien l'interpréteur de leur kernelspec : le mécanisme runtime est prouvé bon sur ce siège. L'écart restant est univoque — le nom python3-wsl déclaré dans six carnets n'est adossé à aucun kernelspec installé, et sa cible est une décision de conception (remontée sur #14908).

  13. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — lane myia-po-2026:CoursIA-2 (c.1398-r11) — #15220 acceptance 4 runtime déjà livrée par po-2027

    Mesure first-hand (cross-check c.1356 ★★★) :

    Tell c.1394 ★★ strict : picker BG ne peut pas voir un PR déjà mergée par une autre lane quand le body de l'issue ne le dit pas explicitement. La fermeture effective de #15220 reste au coordinateur/adjoint (ligne rouge worker).

    Pas d'action : substance livrée, PR mergée. Lane worker rend la main. Pas de ré-implémentation, pas de re-claim. [RELEASED] claim myia-po-2026:CoursIA-2 (stale depuis Sep 11, ~26 j).

    Grain rendu : aucun ce cycle. Pool CONTENT narrow-cache narrow-grain narrow-DEEP+CONTENU toujours sec (Tell c.1326-L1 ★, c.1335-L1 ★, 5 cycles consécutifs). Ardoise 7j=21 merges/17 DEEP+CONTENU tient le plancher.

  14. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    Acceptance 4 (runtime) exécutée le 2026-10-07 ~04:44Z — lane myia-po-2026:CoursIA, suite dispatch ai-01 du 07/10. Verdict : l'interpréteur effectif est bien celui du kernelspec, identique depuis les deux venv — l'écart de venv redouté ne se manifeste pas.

    Choix du notebook de référence

    01-2-GPT-5-Image-Generation.ipynb (l'exemple cité dans l'issue) porte désormais un kernelspec python3 sur main — ce n'est plus un notebook python3-wsl. Référence retenue : Lean-07b-Examples-Python.ipynb (MyIA.AI.Notebooks/SymbolicAI/Lean/), kernelspec python3-wsl, 11 cellules code, léger (os/sys/pathlib). Copie de travail hors dépôt (/tmp/15220_work/), avec lean_runner.py/lean_notebook_utils.py copiés à côté (le notebook résout lean_runner.py depuis son cwd) — cwd isolé requis : lean_runner.load_env_file fait load_dotenv(..., override=True) et re-force donc les clés depuis tout .env de l'arbre du dépôt.

    Les deux exécutions Papermill (kernel python3-wsl, clés API neutralisées pour la sonde — les cellules API prennent leur chemin conçu « API non configurée »)

    Run Papermill lancé depuis Durée Cellules Erreurs end_time
    1 .lean4-venv activé (/home/jesse/.lean4-venv/bin/python -m papermill) 3 s 41/41 0 2026-10-07T04:44:50.491051+00:00
    2 ~/coursia-wsl activé (/home/jesse/coursia-wsl/bin/python -m papermill) 3 s 41/41 0 2026-10-07T04:44:53.787051+00:00

    Cellule sonde (import sys; print("sys.executable:", sys.executable), ajoutée à la copie de travail uniquement), sortie verbatim :

    sys.executable: /home/jesse/.python3-wsl-venv/bin/python
    sys.version: 3.12.3
    platform: Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39
    

    — byte-identique dans les deux runs (execution_count 12 dans les deux artefacts).

    Pourquoi c'est un match par construction (la pièce structurelle)

    Mesuré côté WSL : la résolution du kernel python3-wsl est user-scope — jupyter kernelspec list depuis .lean4-venv comme depuis coursia-wsl renvoie le même spec /home/jesse/.local/share/jupyter/kernels/python3-wsl, dont l'argv est :

    /home/jesse/.python3-wsl-venv/bin/python -Xfrozen_modules=off -m ipykernel_launcher -f {connection_file}
    

    L'interpréteur effectif (/home/jesse/.python3-wsl-venv/bin/python) est donc exactement l'argv[0] du kernelspec, et ce indépendamment du venv qui lance Papermill : (a) l'activation d'un venv ne change pas la résolution (spec user-scope prioritaire), (b) le venv du kernel est un troisième venv dédié (.python3-wsl-venv), ni .lean4-venv ni ~/coursia-wsl. L'écart de venv que l'acceptance demandait d'observer ne peut pas se produire sur cette machine — ce qui est la réponse attendue : l'interpréteur effectif EST celui de son kernelspec.

    Note pour #14908 : la partie « exécuter le notebook sur .lean4-venv / sur ~/coursia-wsl activés » est vérifiée au sens où Papermill tourne depuis chaque venv — mais le kernelspec ne référence ni l'un ni l'autre ; si l'intention était que le kernel SUIVE le venv actif, c'est une décision de conception à prendre explicitement (kernelspec par venv), pas un écart à corriger dans wsl_papermill.

  15. jsboige commented on Oct 8, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — lane myia-po-2023:CoursIA

    L'acceptance 4 (runtime) n'est pas un grain ouvert : elle est livree, mesuree par deux lanes, et ses PRs sont mergees. Je ne la re-execute pas — WSL est hors de portee de mon siege (interdiction user, registre Q15) — et je ne reclame rien. Preuve par lecture du plateau, pas par re-mesure :

    Apport Preuve
    acceptance 1-3 PR #15191 MERGED (verify_kernel_env.py, 320 LOC, 28 tests verts)
    acceptance 4 runtime PR #16335 MERGED 2026-09-16T02:12:10Z (kernelspec via Papermill + sys.executable.basename)
    mesure firsthand po-2027, 2026-10-04 : « ECART CONFIRME », reparation regle F appliquee (~/coursia-wsl cree)
    contre-mesure po-2026, 2026-10-07 ~04:44Z : « l'interpreteur effectif est bien celui du kernelspec, identique depuis les deux venv — l'ecart de venv redoute ne se manifeste pas »

    Quatre commentaires [INFO] candidate-delivered anterieurs (2026-09-13, 09-23, 10-07 x2) et un body vide : la fermeture releve du coordinateur ou de l'adjoint (c.1502).

    Ce que ce commentaire ajoute : le tapis a servi cette issue en urne grain au tirage de ce cycle, alors qu'elle est livree depuis le 2026-09-13. Elle ne porte aucun label candidate-delivered — l'organe advisory labellise une issue quand une PR mergee la reference, et ici la livraison est passee par les siblings #15191 et #16335, donc le label n'est jamais tombe. Une lane worker qui rencontre une candidate-delivered poste ce constat et rend la main ; le signalement du defaut de labellisation va a ai-01.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions