Skip to content

wsl() wrapper des notebooks Lean : rc masque par le pipe tail (SUCCESS imprime sur un lake echoue) #17616

Description

@jsboige

Résumé

Le wrapper WSL embarqué dans les notebooks Lean (def wsl(cmd) → _wsl_raw → bash -lc '<cmd> 2>&1 | tail -20') rend comme code de sortie celui de tail, pas celui de lake : une commande lake build ... 2>&1 | tail -20 qui échoue (checkout mathlib refusé, error: external command 'git' exited with code 1, Aborting) revient avec rc=0, et la cellule imprime SUCCESS : les 3 modules Life compilent sur la foi de ce rc masqué.

Instance mesurée : #16987 (review po-2026:CoursIA-3 du 2026-09-23) — à la tête aa28e7e44e, la cellule lake-build-life (idx 46) commettait SUCCESS alors que lake venait d'écrire error: dans la même sortie. Le même socle avait produit des sorties dégradées aux cellules 38 et 42 (rc=-1, 0 verdicts parses sur 7 attendus). La panne avait été masquée par le wrapper, pas détectée.

Mécanisme

# cellule subprocess-setup (Lean-16b) :
full = ['wsl', '-d', 'Ubuntu', '--', 'bash', '-lc', cmd]
r = subprocess.run(full, capture_output=True, text=True, timeout=timeout)
return r.returncode, r.stdout, r.stderr        # rc = rc du PIPELINE bash

# cellule lake-build-life :
rc, out, err = wsl(f'... lake build {targets} 2>&1 | tail -20', timeout=1500)
# en bash, le rc d'un pipeline = rc de la DERNIERE commande (tail) => toujours 0
if rc == 0:
    print('SUCCESS : ...')                      # affirme une compilation qui n'a pas eu lieu

C'est la même classe que le tell c.1418-L2 (rc d'un pipe = rc de tail, pas de l'outil), ici côté notebook plutôt que côté session.

Périmètre (mesuré sur origin/main)

git grep -l "2>&1 | tail" origin/main -- 'MyIA.AI.Notebooks/SymbolicAI/Lean/*.ipynb' :

  • Lean-12-Sensitivity-Theorem.ipynb
  • Lean-15-Grothendieck-Tribute.ipynb (gate if rc == 0 présente)
  • Lean-16a-Conway-Man-and-Work.ipynb (gate if rc == 0 présente)
  • Lean-16b-Conway-Game-of-Life-Lean.ipynb (gate if rc == 0 présente — l'instance fondatrice)
  • Lean-34-Calculabilite-et-Limites.ipynb
  • Lean-3b-Formalized-Formal-Logic.ipynb

Fix proposé

Injecter set -o pipefail; en tête de la commande bash passée au wrapper (le rc du pipeline devient alors celui de la première commande qui échoue), ou faire porter le rc par bash lui-même (bash -lc 'set -o pipefail; <cmd> 2>&1 | tail -20'). Corriger le wrapper dans les 6 notebooks listés + re-exécuter les cellules de build concernées (C.2).

Non-bloquant

Défaut distinct des PRs en cours (signalé « non bloquant, mérite une issue » en review de #16987) : les réparations de #16987 (env lake + re-exec) avancent indépendamment.

Grain: LIGHT/guard — lane myia-po-2024:CoursIA-2 — prev: MED/notebook-lean #16987

Activity

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