Repository navigation
fix(notebook-tools,#15220): runtime kernelspec verifier via Papermill + sys.executable.basename capture - #16335
Conversation
Tell c.1180/1186/14978/1057 fondateurs. Substance first-hand: sys.executable.basename=python.exe + sys.prefix=sys.base_prefix → SYSTEM Python.
|
G-VAR-2 light cap reached (advisory, non bloquant). |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Grain: MED/guard -- lane myia-po-2026:CoursIA-2 -- prev: DEEP/slides #16290
Mesure first-hand Tell c.1102 ★★★★★
acceptance 4 runtime de #14908 : exécuter un notebook
python3-wslet vérifier que l'interpréteur effectif (sys.executabledans une cellule) correspond à lakernelspecdéclarée. La PR livre le runtime half que leverify_kernel_env.pystatique (#15191) laissait en suspens dans son docstring :C'est ce que cette PR fait.
Périmètre strict Tell c.10597 ★ fondateur (paths:)
scripts/notebook_tools/verify_kernel_env_runtime.py(236 LOC)scripts/notebook_tools/verify_runtime_smoke.ipynb(83 LOC, exécuté avec outputs)Aucun fichier touché en dehors de
scripts/notebook_tools/**.Substance LIVRÉE first-hand Tell c.1102 ★★★★★
Le script runtime :
--kernel-name python3 --cwd <smoke-dir>.stream/stdout(Tell c.1180 ★ ★ fondateur :textestlist[str], à flatten).^RUNTIME sys\.executable\.basename=(?P<v>.+)$^RUNTIME sys\.prefix=(?P<v>.+)$^RUNTIME sys\.base_prefix=(?P<v>.+)$sys.prefixau--venvattendu.Mesures first-hand sur ce worker c.1193
Le verdict
sys.prefix == sys.base_prefixdétecte précisément le mode failure originel de #14908 (kernel non-venv danspython3). Tell c.14978-L1 ★★★ : tous les chiffres mesurés contre l'output de cellule capturé, pas prose-anticipés.Notez :
sys.executable.basename=python.execapture le discriminant basename sans leak du chemin machine absolu (Tell c.1186-L2 ★ ★ fondateur reproducer ×4ᵉ :scrub-papermill-pathshook scrubbeC:\Users\<user>\...dans les outputs, donc on n'imprime queos.path.basename(sys.executable)).Reproducer ×1ʳᵉ : 4 pièges documentés Tell c.1186-L2 ★ ★ fondateur
textestlist[str], passtr— Tell c.1180 ★ ★ fondateur : Papermill écrit chaqueprint()flush comme entrée de liste séparée. Mon parser initial concaténaitout.get("text", "")qui rendaitlist, passtr→ match vide. Fix :extendau lieu deappend, avec fallback string.with tempfile.TemporaryDirectory()cleanup avant lecture — Tell c.1186-L2 ★ ★ fondateur reproducer ×2ᵉ c.1193 :_read_smoke_outputs(out_nb)était appelé APRÈS lewith, donc le tempdir était déjà nettoyé. Fix : lire DANS lewith, retourner les valeurs.nbformat_minor=5+ cellule code enlist[str]— Papermill collapse une cellule écrite comme string unique en une seule ligne (les\ndu string sont préservés comme literal, mais la cellule devientimport sysprint(...)au lieu deimport sys\nprint(...)). Fix : écrire la source commelist[str]avec un élément par ligne,\ntrailing chacun.scrub-papermill-pathshook scrubbe les outputs — Tell c.1186-L2 ★ ★ fondateur reproducer ×4ᵉ c.1193 : le hook sécu remplaceC:\Users\jsboi\...par<USER_PATH>dans tous les outputs du notebook, pas seulementmetadata.papermill.input_path/output_path. Fix : n'imprimer queos.path.basename(sys.executable)dans la cellule, qui ne contient pas le chemin machine.Acceptance #14908 — point 4
metadata.kernelspeccohérentConformité protocoles
--cwd+ import_outputs par index de cellule code (smoke notebook = 1 cellule code, index 0). Tell c.14978-L1 ★★★ : tous les chiffres mesurés contre l'output, pas prose-anticipés.TemporaryDirectorycleanup avant lecture → fix lecture dans lewith. Pas de rc masqué par pipe (proc.returncodevérifié directement).scrub-papermill-pathsreproducer ×4ᵉ → basename only.scripts/notebook_tools/**(claim[CLAIMED-AMEND] lane myia-po-2026:CoursIA-2 -- paths: scripts/notebook_tools/**).raise NotImplementedError. Leprint("RUNTIME sys.executable.basename=…")est un observateur, pas un stub.execution_count: 1+outputs: [...](Tell c.1180 ★ ★ fondateur H.3 hook PASS — Papermill a exécuté le notebook, outputs préservés).myia-po-2026:CoursIA98.5h ≥ 48h Tell c.12751 → reprise autorisée + saturation réelle des grains DEEP/contenu en pool (#5105= 30 PRs MERGED +[INFO] candidate-delivered).Tells fondateurs actifs
text=list[str], cwd handling, H.3 execution_count)TemporaryDirectorycleanup + rc masqué par pipe + scrub-papermill-paths +os.path.basename()au lieu deos.path.abspath())paths:)#5105détecté + claim stale 98.5h Tell c.12751)Cas de figure ultérieurs
Si un worker WSL veut tester que
wsl_papermill --venv ~/coursia-wslactive bien le venv CoursIA, il lance :wsl python /mnt/c/dev/CoursIA-2/scripts/notebook_tools/verify_kernel_env_runtime.py \ --venv ~/coursia-wsl --kernel-name python3VERDICT attendu :
PASSsi le venv est activé,FAILavec message « system Python » si le kernel a démarré hors-venv.Voir aussi