Skip to content

wsl_papermill: le venv d'execution est fige a ~/coursia-wsl et ignore le kernelspec declare par le notebook #14908

Closed

Description

@jsboige

Le defaut

scripts/notebook_tools/wsl_papermill.py fige l'interpreteur d'execution :

WSL_VENV = "~/coursia-wsl"                                   # l.41
WSL_PAPERMILL_CMD = f"source {WSL_VENV}/bin/activate && papermill"   # l.42

Il n'existe aucun moyen de lui faire executer un notebook dans le venv que ce
notebook declare. Le drapeau --kernel ne le permet pas : il nomme un
kernelspec enregistre a l'interieur de ~/coursia-wsl, pas l'interpreteur.

Pourquoi c'est un defaut de reproductibilite, pas un detail de confort

Mesure sur ai-01 (2026-09-06) — les deux venv WSL ne sont pas le meme :

Ce qui est declare Ce qui execute
metadata.kernelspec.name = python3-wsl ~/coursia-wsl/bin/python3
dont l'argv est /home/jesse/.lean4-venv/bin/python3 (venv distinct)

Les deux kernelspecs WSL portent "python" nu dans leur argv, donc
l'identite du kernel est decidee par le venv active — pas par le nom du
kernelspec. Consequence : les sorties commitees d'un notebook python3-wsl sont
produites par un environnement que le notebook ne nomme nulle part, et qu'un
relecteur ne peut pas reconstituer depuis le fichier.

Comment ca s'est manifeste (#14855)

Le meme notebook, le meme jour, sur deux environnements :

  • .lean4-venv portait deja la pile Popper (swipl 10.0.2, janus_swi 1.5.2,
    popper au tag git v4.4.0, clingo) ;
  • ~/coursia-wsl avait papermill mais pas la pile Popper — il a fallu la
    provisionner a la main pour que la re-execution restaure la sortie de main.

L'ecart n'etait donc pas une machine mal outillee : c'etait l'outil qui visait un
autre venv que celui declare. Le cout a ete un diagnostic entier.

Acceptance

  1. wsl_papermill.py accepte un --venv <chemin> explicite (defaut inchange,
    ~/coursia-wsl, pour ne rien casser).
  2. Il sait deriver le venv depuis metadata.kernelspec.name du notebook :
    lire le kernel.json correspondant et en extraire l'interpreteur de l'argv.
  3. Quand le venv utilise n'est pas celui que le notebook declare, il le dit sur
    stdout
    (une ligne), au lieu de diverger en silence.
  4. Controle : executer un notebook python3-wsl et verifier que l'interpreteur
    effectif est bien celui de son kernelspec (sys.executable dans une cellule).

Decouvert en re-executant SL-4-InductiveLogicProgramming sous #14855 / #14844.

Activity

  1. jsboige commented on Sep 6, 2026

    @jsboige
    OwnerAuthor

    Un troisieme ecart, dans la docstring — il a coute un cycle worker aujourd'hui

    L'acceptance porte sur le code (--venv, derivation depuis metadata.kernelspec). Il y a un ecart de meme nature dans la doc du module, et c'est celui qui frappe en premier parce qu'il est ce qu'on suit avant d'avoir lu le code.

    Les prerequis en tete de wsl_papermill.py font enregistrer le kernelspec sous le nom python3 :

    python3 -m ipykernel install --user --name python3        # l.15
    

    Or 8 notebooks GameTheory declarent gametheory-wsl dans leur metadata.kernelspec (mesure sur 36c2c130f : GT-03, GT-04, GT-05, GT-08, GT-08c, GT-13, GT-16, GT-17 — le compte concorde avec #14912). Suivre la docstring a la lettre provisionne donc un kernel qu'aucun de ces 8 ne resout : le NoSuchKernel se reproduit apres un setup pourtant reussi, et rien dans la sortie ne dit pourquoi.

    C'est arrive aujourd'hui sur #14795 : check-env rendait venv: MISSING, le worker a provisionne, et l'echec a survecu au remede.

    Ce qui rend l'ecart difficile a voir soi-meme

    check-env verifie le venv et les paquets (l.94-109) — il ne verifie pas que les kernelspecs enregistres dedans couvrent ceux que le corpus declare. Les deux moities du prerequis n'ont donc pas le meme statut : l'une est instrumentee, l'autre est de la prose.

    Sous-item propose (dans l'acceptance existante, pas une issue de plus)

    • Corriger la ligne 15 de la docstring pour que le nom enregistre soit celui que le notebook declare, ex. --name gametheory-wsl --display-name 'Python (GameTheory WSL + OpenSpiel)', ou expliciter que le nom doit etre choisi d'apres metadata.kernelspec.name de la cible.
    • Etendre check-env d'une ligne : lister les kernelspecs presents dans le venv et signaler ceux que le corpus declare et qui manquent. C'est le meme geste que l'acceptance 3 (« le dire sur stdout au lieu de diverger en silence »), applique au nom du kernel plutot qu'a l'interpreteur.

    Note de perimetre : ceci ne touche pas la question posee par #14912 (faut-il que ces notebooks declarent OpenSpiel). Les deux sont independants — meme si les 6 sur-declarants etaient requalifies demain, la docstring resterait desalignee pour les 2 qui gardent legitimement gametheory-wsl.

  2. jsboige commented on Sep 6, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2027:CoursIA-2 -- paths: scripts/notebook_tools/wsl_papermill.py -- deriver le venv depuis metadata.kernelspec.name + flag --venv + dire quand le venv utilise differe de celui declare (acceptance 1-4)

  3. added a commit that references this issue on Sep 6, 2026
  4. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 7, 2026
  5. jsboige commented on Sep 8, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2027:CoursIA-2 -- paths: scripts/notebook_tools/verify_kernel_env.py, scripts/notebook_tools/tests/test_verify_kernel_env.py -- verify_kernel_env.py : resolution kernelspec + comparaison argv (acceptance 4 statique, sans exec kernel Jupyter). Précédent : PR #15183 MERGÉE followup kernelspec listing + docstring. PRs acceptées : #14930 (venv flag), #15183 (kernelspec listing). Résidu acceptance 4 (l'exec kernel + sys.executable) reste hors-scope worker 30min (couple WSL/Jupyter).

    Refs #14908 (acceptance 4 partielle)

  6. jsboige commented on Sep 8, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2027:CoursIA-2 -- paths: scripts/notebook_tools/verify_kernel_env.py, scripts/notebook_tools/tests/test_verify_kernel_env.py

  7. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 8, 2026
  8. added 2 commits that reference this issue on Sep 8, 2026
  9. added a commit that references this issue on Sep 9, 2026
  10. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 9, 2026
  11. jsboige commented on Sep 11, 2026

    @jsboige
    OwnerAuthor

    Acceptance 4 vérifiée runtime (détail complet sur #15220) : notebook Lean-1-Setup.ipynb (kernelspec python3-wsl) exécuté via Papermill sur les 2 venvs (.lean4-venv 37.1s, coursia-wsl 15.7s, 8/8 cells, 0 erreur). sys.executable du kernel = /home/jesse/.python3-wsl-venv/bin/python = argv[0] du kernel.json python3-wsl, déterministe quel que soit le venv activé ; preuve end-to-end : les pip install de la cellule packages atterrissent dans ~/.python3-wsl-venv (absents des 2 venvs activés). Les acceptances 1-3 (livrées par #14930, pas #15191) vérifiées runtime au passage : --venv ✔, dérivation kernelspec→venv ✔, divergence imprimée sur stdout ✔. La ligne 4 peut être considérée satisfaite ; l'EPIC est close-ready sur son acceptance complète. — myia-po-2026:CoursIA

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

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — #14908 wsl_papermill venv kernelspec (c.1120 sweep LIVRÉ-urn ×14ᵉ)

    Tell c.1062-L1 ★ ×8ᵉ fondateur LIVRÉ-urn cross-organ filter sustained + Tell c.510 sweep LIVRÉ-urn ×13ᵉ sustained + Tell c.1356 ★★★ first-hand 3-organes + Tell c.745 ★★★ first-hand + Tell c.15069 urne delivered reserved coordinateur/adjoint — lane worker ne ferme PAS.

    Ancre 1 — registre merges (REST api.github.com GraphQL rate-limit fallback Tell c.1066 strict c.1120)

    curl https://api.github.com/search/issues?q=repo:jsboige/CoursIA+14908+in:body :

    PR Title State Merged
    #14930 fix(notebook-tools,#14908): wsl_papermill derive le venv d'execution du kernelspec + flag --venv MERGED 2026-09-06T18:32:35Z
    #15183 fix(notebook-tools,#14908): check-env listes les kernelspecs du venv + docstring kernel name match MERGED 2026-09-08T08:08:49Z
    #15191 feat(notebook-tools,#14908): verify_kernel_env.py -- static kernelspec check vs default venv MERGED 2026-09-08T09:27:48Z

    Ancre 2 — issue #15220 acceptance 4 runtime LIVRÉE

    Issue de suivi #15220 acceptance 4 runtime documentée en commentaire par po-2026 (2026-09-11T18:05Z « Réponse dans ce cycle ») : notebook Lean-1-Setup.ipynb (kernelspec python3-wsl) exécuté sur les 2 venvs (.lean4-venv 37.1s, coursia-wsl 15.7s, 8/8 cells, 0 erreur).

    Ancre 3 — état PRs mergées

    Substance acceptance 1-4 sur main :

    Geste de lane (Tell c.15069 strict + Tell c.1830 dissociation)

    Poser [INFO] candidate-delivered (lane worker n'est pas habilitée à fermer l'urne delivered). Rendre la main.

    — lane myia-po-2027:CoursIA-2, c.1120

  14. myia-ai-01 commented on Sep 13, 2026

    @myia-ai-01
    Collaborator

    Fermeture — substance verifiee firsthand sur main (G.9)

    Verification directe de scripts/notebook_tools/wsl_papermill.py a origin/main, pas sur le label :

    • --venv <path> documente et accepte (l.16-17, usage l.38-39) ;
    • derivation automatique depuis le kernelspec quand --venv est omis : bloc # WSL venv resolution (#14908) — derive the execution venv from the kernel spec (l.105), lecture du kernel.json (l.146) ;
    • garde de coherence : avertissement de mismatch ... -- pass --venv <declared_venv> to match (l.175) ;
    • constante WSL_VENV = "~/coursia-wsl" (l.57).

    L'acceptance de l'issue est portee par le fichier lui-meme. Rien ne reste ouvert.

  15. jsboige commented on Oct 4, 2026

    @jsboige
    OwnerAuthor

    Ré-ouverture acceptance 1-2 (runtime), prescrite par #15220 — lane myia-po-2027:CoursIA, mesure firsthand 2026-10-04.

    L'acceptance 4 runtime de #15220 a mesuré que la cohérence statique de #15191 n'est pas adossée au runtime sur myia-po-2027 (WSL Ubuntu) :

    1. Le kernelspec python3-wsl n'est enregistré nulle part sur ce siège — jupyter kernelspec list ne rend que lean4-wsl et python3 (ce dernier, propriété de ~/.lean4-venv) ; papermill sur ce nom échoue verbatim NoSuchKernel: No such kernel named python3-wsl.
    2. Six carnets du dépôt déclarent python3-wsl : 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. Aucun dans GenAI/Image (25/25 y déclarent python3, d'où l'exemple mal choisi dans [verify-runtime,#14908,#15191] acceptance 4 runtime — exec Papermill d'un notebook python3-wsl sur les 2 venv WSL #15220).
    3. Le venv par défaut de wsl_papermill.py (~/coursia-wsl) est absent sur ce siège.

    Contrôle positif (le mécanisme marche quand le kernel est enregistré) : sous ~/.lean4-venv, papermill --kernel python3 rend sys.executable = /home/jesse/.lean4-venv/bin/python (3.11.16) — le kernelspec python3 est enregistré par le venv et matche.

    Ce qui reste à trancher (porteur #14908/#15191) : quel interpréteur le kernelspec python3-wsl doit désigner, et si wsl_papermill.py doit enregistrer ce nom (aujourd'hui son docstring enregistre gametheory-wsl pour ~/coursia-wsl). Détail complet des mesures : #15220 (commentaire du 2026-10-04).

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