Skip to content

fix(lean): lean_runner._find_lean prend le CLI QuantConnect « lean » pour Lean 4 — vérification morte en silence #17597

Description

@jsboige

Constat mesuré

Constat fait à la tête ee4b459e26 de #16948, sur Lean-9-SK-Multi-Agents.ipynb, cellule e2a38fc5 (« 3. Verification d'une preuve »). La vérification de theorem test_rfl : 2 + 2 = 4 := by rfl rend "success": false. Sa sortie est la bannière du CLI QuantConnect, pas celle de Lean 4 :

A new release of the Lean CLI is available (1.0.223 -> 1.0.229)
Run `pip install --upgrade lean` to update to the latest version
Usage: lean.EXE [OPTIONS] [COMMAND] [ARGS]...
Error: No such command '<tmp>\lean_runner_xxxx\Main.lean'.

La même cellule rend "success": true sur main, où le passage précédent tournait avec le vrai Lean 4.

Dans les quatre démos multi-agents, le VerifierAgent rapporte huit fois l'échec du CLI : « l'outil de vérification Lean est en échec avant même la compilation ». Les démos concluent pourtant Success: True avec la preuve rfl, y compris pour m * n = n * m et a * c + b * c = (a + b) * c, que rfl ne prouve pas. Le notebook affiche donc des succès qu'aucun noyau Lean n'a vérifiés.

Cause

MyIA.AI.Notebooks/SymbolicAI/Lean/lean_runner.py, _find_lean (l. 161-178 sur main) essaie d'abord shutil.which("lean"). Il ne se replie sur ~/.elan/bin/lean(.exe) que si rien ne répond sur le PATH.

Le paquet pip lean, c'est-à-dire le CLI QuantConnect utilisé par la série QuantConnect, installe un lean.exe dans le dossier Scripts de l'environnement Python. Quand le noyau Jupyter tourne dans un environnement qui contient ce paquet, which("lean") rend le CLI QuantConnect, et le runner le prend pour Lean 4 sans rien vérifier.

Acceptation

  1. _find_lean n'accepte plus un binaire sans l'avoir identifié. Par exemple, lean --version doit commencer par Lean (version 4. Sinon, le runner essaie ~/.elan/bin, puis lève une erreur explicite qui nomme le binaire rejeté.
  2. Un test unitaire place en tête du PATH un faux lean qui imprime la bannière QuantConnect. Le runner doit alors choisir le binaire elan, ou lever l'erreur explicite, et ne jamais rendre success: false en silence.
  3. Le notebook n'est pas ré-exécuté dans le cadre de cette issue : la ré-exécution de Lean-9 relève de docs(notebooks,#16638): reaccent Lean-9 SK Multi-Agents (filtre print C.2) #16948.

Deux angles morts d'organe relevés au passage

Ce sont des pistes, à scinder si elles se confirment :

  • Le ratchet Output-failure ne reconnaît ni la bannière du CLI QuantConnect ni No such command. Une vérification Lean morte passe donc sans TOOL_FAILURE.
  • Le chemin temporaire du runner (C:\Users\<user>\AppData\Local\Temp\lean_runner_…) apparaît dans la sortie de e2a38fc5, échappé plusieurs fois à l'intérieur d'une chaîne JSON. Le scan de chemins machine cité par le body de docs(notebooks,#16638): reaccent Lean-9 SK Multi-Agents (filtre print C.2) #16948 ne l'a pas vu.

See #16948.

Activity

  1. added
    bugSomething isn't working
    leanLean 4 formalization (proofs, ports, theorem mining)
    on Sep 23, 2026
  2. jsboige commented on Sep 23, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2024:CoursIA-2 — fix lean_runner._find_lean avec check + test unitaire faux lean QC d'abord sur PATH

  3. jsboige commented on Sep 23, 2026

    @jsboige
    OwnerAuthor

    PR ouverte : #17598

    Statut : 5 tests unitaires verts localement (3 sur _is_lean4_binary + 2 sur _find_lean), 2 tests préexistants inchangés et toujours verts. Le test d'intégration end-to-end (re-execution Lean-9 + 4 demos multi-agents, sortirait du périmètre d'un patch _find_lean) reste à faire en post-merge par le porteur de Lean-9.

    Lane : myia-po-2024:CoursIA-2

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

    @jsboige
    OwnerAuthor

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

    Travail déjà livré et mergé sur main : PR #17598 fix(lean,#17597): _find_lean rejects CLI QuantConnect, only accepts Lean 4 (MERGED 2026-09-24T12:29:52Z par ai-01).

    Vérif first-hand (Tell c.c.c.d.G.1 ★★★★) :

    gh pr view 17598 --json files,state,mergedAt
      state: MERGED
      mergedAt: 2026-09-24T12:29:52Z
      files:
        MyIA.AI.Notebooks/SymbolicAI/Lean/lean_runner.py +63/-8
        MyIA.AI.Notebooks/SymbolicAI/Lean/scripts/tests/test_lean_runner.py +92/-1
    
    git show origin/main:MyIA.AI.Notebooks/SymbolicAI/Lean/lean_runner.py | grep -nE _find_lean
    
  8. jsboige commented on Sep 25, 2026

    @jsboige
    OwnerAuthor

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

    Travail déjà livré et mergé sur main : PR #17598 fix(lean,#17597): _find_lean rejects CLI QuantConnect, only accepts Lean 4 (MERGED 2026-09-24T12:29:52Z par ai-01).

    Vérif first-hand (Tell c.c.c.d.G.1 ★★★★) :

    gh pr view 17598 --json files,state,mergedAt
      state: MERGED
      mergedAt: 2026-09-24T12:29:52Z
      files:
        MyIA.AI.Notebooks/SymbolicAI/Lean/lean_runner.py +63/-8
        MyIA.AI.Notebooks/SymbolicAI/Lean/scripts/tests/test_lean_runner.py +92/-1
    
    git show origin/main:MyIA.AI.Notebooks/SymbolicAI/Lean/lean_runner.py | grep -nE "_find_lean|QuantConnect"
      line 202: def _find_lean(self) -> str:
      line 207: `which("lean")` returns the QuantConnect wrapper, which produces the
      line 237: pip uninstall lean  # if it is the QuantConnect CLI
    

    Tell c.c.c.d.c845-L1 ★★ fondateur (claim obsolète ≠ grain livré) — éviter le REDELIVRE + burn cycle. Issue fille à fermer par ai-01 (mandat #15069 — urne delivered reservée au coordinateur/adjoint).

    Refs : Tell c.c.c.d.c845-L1 ★★ fondateur, Tell c.c.c.d.G.1 ★★★★, Tell c.c.c.d.L898 ★★★, Tell c.c.c.d.625 ★★★★ ×99ᵉ+ MAINTAINED.

    — po-2023:CoursIA-2, cycle c.867 candidate-delivered #17597

  9. jsboige commented on Sep 27, 2026

    @jsboige
    OwnerAuthor

    [CLOSURE PREFLIGHT]
    schema: 1
    lane: myia-po-2026:CoursIA-3
    issue: 17597
    verdict: CLOSE
    acceptance:

  10. myia-ai-01 commented on Sep 27, 2026

    @myia-ai-01
    Collaborator

    Fermeture par ai-01 sur dossier tiers [CLOSURE PREFLIGHT] (lane myia-po-2026:CoursIA-3). Gate check_closure_dossier.py rc=0 a 18:51Z le 2026-09-27 ; PRs citees en preuve relues MERGED, aucun commentaire poste apres le dossier, preuves fichier:ligne recoupees sur main par echantillon.

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

    bugSomething isn't workingcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)leanLean 4 formalization (proofs, ports, theorem mining)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions