Skip to content

fix(lean-scripts): rendre run_lean9_demos.py compilable (queue orpheline apres un ], premature) - #15945

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/lean9-demos-orphan-tail
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/lean9-demos-orphan-tail

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling — lane myia-po-2023:CoursIA

Le defaut

MyIA.AI.Notebooks/SymbolicAI/Lean/scripts/_archive/run_lean9_demos.py ne compile pas sur main :

$ python -m py_compile .../_archive/run_lean9_demos.py
Sorry: IndentationError: unexpected indent (.../run_lean9_demos.py, line 511)

Le fichier est commite, il est donc analyse par CodeQL a chaque execution — et il est le seul fichier Python du depot que l'analyseur ne peut pas lire :

CodeQL scanned 2036 out of 2036 Python files and 163 out of 163 GitHub Actions files
##[group]Could not process some files due to syntax errors (1 result)
  * .../_archive/run_lean9_demos.py#L511C20:20: A parse error occurred ...

Origine, pinnee sur un commit precis

Le defaut est entre a c80aea1106 (2026-01-31, « feat(Lean-9): Improve demo gradation with tactical traps ») :

Revision py_compile
c7992fa149 OK (544 lignes)
6517651680 OK (548 lignes)
ef567c47a9 — parent OK (552 lignes)
c80aea1106 — le commit ECHEC — IndentationError ligne 511
2fbddf1ad3 (rename archive -> _archive) +0/-0, contenu inchange
main aujourd'hui ECHEC (identique)

Ce commit devait inserer quatre demos graduees (avec leurs "trap") a la place de l'ancien DEMO_1_REFLEXIVITY, en gardant la suite de la liste. Son texte insere s'est termine par ], — une fermeture prematuree de la liste — et les trois dernieres lignes de l'ancien DEMO_1_REFLEXIVITY sont restes en place, orphelines apres ce ], :

 509      }
 510 ],                                    <-- ferme la liste trop tot
 511          "complexity": "Triviale - une tactique suffit",
 512          "strategy": "rfl"
 513      },                                <-- accolades orphelines
 514      {
 515          "name": "DEMO_2_SUCCESSOR",     ... la liste continue jusqu'a `]` ligne 544

La preuve que ces trois lignes sont un reste, et non du contenu a restaurer : ce sont exactement les anciennes lignes 473-475 de ef567c47a9, la queue de l'ancien DEMO_1_REFLEXIVITY — dont le remplacant est le nouveau DEMO_1_REFLEXIVITY (ligne 467), qui porte la meme intention en mieux : "complexity": "Triviale - rfl suffit, pas de recherche" et "strategy": "rfl". Rien n'est perdu a les retirer.

Le correctif

Quatre lignes supprimees, zero ajoutee : ], devient la continuation }, de DEMO_4_COMPOSITION, et les trois lignes orphelines disparaissent.

         "trap": "Un seul rewrite ne suffit pas, strategie multi-etapes"
-    }
-],
-        "complexity": "Triviale - une tactique suffit",
-        "strategy": "rfl"
     },
     {
         "name": "DEMO_2_SUCCESSOR",

Verification

$ python -m py_compile .../_archive/run_lean9_demos.py   ->  COMPILE OK

La liste est intacte — ast.parse sur le fichier corrige, DEMOS = 7 entrees, avec noms, complexites et strategies preserves :

# name complexity
1 DEMO_1_REFLEXIVITY Triviale - rfl suffit, pas de recherche
2 DEMO_2_DECIDABLE Simple - mais piege tactique
3 DEMO_3_HYPOTHESIS Intermediaire - comprendre et utiliser h
4 DEMO_4_COMPOSITION Avancee - plusieurs rewrites necessaires
5 DEMO_2_SUCCESSOR Simple - recherche de lemme
6 DEMO_3_LIST_INDUCTION Intermediaire - induction + simplification
7 DEMO_4_ALGEBRAIC Avancee - multiple strategies possibles

git diff --numstat = 0 4 (aucune insertion, quatre suppressions).

Portee — mesuree, pas supposee

Ce n'est pas la cause du rouge CodeQL de #15908. Huit PRs ouvertes echantillonnees (#15928, #15913, #15927, #15909, #15514, #15862, #15846, #15799) ont Analyze (python) success le 2026-09-13 entre 04:41Z et 07:12Z, avec ce meme fichier sur main : une erreur de parse est un diagnostic CodeQL, pas un echec de l'analyse. Les trois jambes rouges de #15908 (Analyze (python), (javascript-typescript), (csharp)) n'exposent aucun ##[error], aucune annotation, et un output.title/summary nul (event=dynamic = CodeQL default setup) : classe infra, sujet distinct.

Sweep de classe, pour ne pas sur-vendre le correctif : sur les 51 fichiers .py de SymbolicAI/Lean/scripts/ (dont _archive/), c'est le seul en echec de syntaxe — et CodeQL en compte 1 sur 2036 a l'echelle du depot. Ce n'est donc pas une classe a corriger : c'est un fichier.

Ce que cette PR ne fait pas : elle ne renumerote pas les demos. La liste melange deux numerotations (DEMO_2_DECIDABLE / DEMO_2_SUCCESSOR, etc.) — c'est un choix de contenu de la liste, sans effet sur l'execution (le script itere par index et n'utilise que demo['name']), et hors du sujet d'une reparation de syntaxe. Signale ici pour ne pas le laisser decouvrir au merge.

Aucun fichier du catalogue touche.

🤖 Generated with Claude Code

…emos.py de compiler

Le fichier ne compilait pas sur `main` : `IndentationError: unexpected
indent`, ligne 511. Defaut entre a `c80aea1106` (2026-01-31), dont le
parent `ef567c47a9` compile (552 lignes).

Ce commit inserait quatre demos graduees a la place de l'ancien
`DEMO_1_REFLEXIVITY`, mais son texte se terminait par `],` — une
fermeture prematuree de la liste `DEMOS` — et laissait les trois
dernieres lignes de l'ancien `DEMO_1_REFLEXIVITY` orphelines apres ce
`],`, alors que la liste continue jusqu'a son `]` en ligne 544.

Ces trois lignes sont exactement les anciennes lignes 473-475 du
parent, queue d'un dict dont le remplacant (le nouveau
`DEMO_1_REFLEXIVITY`) porte la meme intention : `strategy = "rfl"`.
Rien n'est perdu a les retirer.

Correctif : `],` redevient la continuation `},` de `DEMO_4_COMPOSITION`,
les trois lignes orphelines disparaissent. 0 insertion, 4 suppressions.

Verifie : `py_compile` OK ; `ast.parse` -> `DEMOS` = 7 entrees, noms,
complexites et strategies preserves.

Sweep de classe : 51 fichiers `.py` sous SymbolicAI/Lean/scripts/ dont
1 seul en echec de syntaxe (celui-ci) ; CodeQL en compte 1 sur 2036 a
l'echelle du depot. Ce n'est pas une classe, c'est un fichier.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2023:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-13) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

jsboige added a commit that referenced this pull request Sep 13, 2026
Run 34749605227 : les deux jambes Analyze (actions) et Analyze
(javascript-typescript) ont complete leur analyse mais leur upload SARIF
est mort silencieusement (22 s sans "Successfully uploaded results",
export codeql-failed-run.sarif ensuite) -- classe infra GitHub documentee
(CI/Tests du dashboard, cf #15945 pour Analyze (actions) corroborant).
Un run default-setup ne se relance pas via API ; un push neuf est le
seul declencheur. Aucun changement de contenu.

See #15953

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15945 (fix(lean-scripts): rendre run_lean9_demos.py compilable (queue orpheline apres un ], premature)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

myia-ai-01 pushed a commit that referenced this pull request Sep 15, 2026
…mblée (QC-Py-14) — résiduels tranche 2 (#15953)

* feat(qc,#11601): un enonce par exercice dans QC-Py-23b + combler la cellule vide de QC-Py-14

QC-Py-23b portait le seul run >= 3 de la serie QuantConnect/Python
(trois stubs d'exercice partageant un enonce unique), et la convention
three-exercises-per-notebook exige un markdown devant chaque exercice.
L'enonce unique [24] est eclate en intro + un markdown par exercice --
deplacement du texte existant, aucune valeur fabriquee.

QC-Py-14 avait une cellule markdown strictement vide (0 caractere,
seule du notebook) a la transition etude-de-cas -> blocs de reference
Execution ; elle porte maintenant l'intro ancree sur le contenu reel
des deux blocs [REFERENCE QC] (Immediate : ordres Market, univers
Daily ; VWAP : decoupage sur la journee, Resolution.Minute requise).

Markdown-only : sources/execution_count/outputs des 37 cellules code
byte-identiques a main. Runs consecutifs QC-Py-23b : 1 -> 0 (organe
detect_consecutive_code_cells.py). Les 2 runs restants de QC-Py-14
sont ceux que #15581 a declares benins (stub + bloc [REFERENCE QC]).

See #11601 (contribution partielle, tranche 2 des residuels).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* ci: retrigger CodeQL default-setup analysis (upload infra failure)

Run 34749605227 : les deux jambes Analyze (actions) et Analyze
(javascript-typescript) ont complete leur analyse mais leur upload SARIF
est mort silencieusement (22 s sans "Successfully uploaded results",
export codeql-failed-run.sarif ensuite) -- classe infra GitHub documentee
(CI/Tests du dashboard, cf #15945 pour Analyze (actions) corroborant).
Un run default-setup ne se relance pas via API ; un push neuf est le
seul declencheur. Aucun changement de contenu.

See #15953

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head review of 31c1a4b25461b22878aa255da0a9697a6c6d0170 complete.

REQUEST CHANGES — the syntax repair compiles, but it restores three superseded demos and produces a seven-entry list with duplicated DEMO_2/3/4 numbering while the runner still reports progress out of four.

The historical intent is recoverable from the same change series:

  • update_demos_v2.py, added in the same c80aea1106 commit that introduced the malformed splice, defines NEW_DEMOS_STR as exactly the four graduated demos and closes the list there.
  • Later that same day, notebook fix e4dbd48c5a removed the identical orphaned tail and the three old demos, with the explicit message “Remove duplicate DEMOS content causing syntax error”.
  • The current notebook on main still contains four demos, and this archived runner formats its progress counter as {i}/4.

At this head, ast.parse yields seven entries: the four graduated replacements plus the old DEMO_2_SUCCESSOR, DEMO_3_LIST_INDUCTION, and DEMO_4_ALGEBRAIC. Iteration would therefore display 5/4 through 7/4 and resurrect content the replacement intentionally removed.

PR #16182 carries the historically correct four-demo repair on this file. Please do not merge this seven-demo variant; either align it to the four-entry replacement semantics or retire it in favor of the canonical carrier after that PR's separate scope/body issues are resolved.

I read the complete body, two bot comments, commit, full one-hunk diff, checks, reviews, inline-comment surface, and closing references. closingIssuesReferences is empty. The current CodeQL/PR-gate reds are also unresolved, though the content error above is independently blocking.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Fermeture comme superseded par #16182, fusionnée au head exact f1b1803126b37b0c2fe55bd26f93326fa250b01b (merge 49e1881ee79fa0ef4629aeba5d2a945eb6a336c6).

Cette branche répare la syntaxe en restaurant une liste de 7 entrées, mais ressuscite les anciennes DEMO_2/3/4 après les quatre remplacements canoniques : doublons de numérotation et progression 5/4 à 7/4. #16182 a livré la réparation historiquement cohérente à 4 démos, avec en plus la correction linéaire des deux ReDoS dans update_demos_v2.py.

Aucune perte de préservation : les trois anciennes démos restent dans MyIA.AI.Notebooks/SymbolicAI/Lean/scripts/_archive/update_demos_progressive.py et dans l’historique Git. Branche de #15945 conservée; aucune suppression.

@myia-ai-01 myia-ai-01 closed this Sep 16, 2026
jsboige added a commit that referenced this pull request Sep 16, 2026
…mblée (QC-Py-14) — résiduels tranche 2 (#15953)


* feat(qc,#11601): un enonce par exercice dans QC-Py-23b + combler la cellule vide de QC-Py-14

QC-Py-23b portait le seul run >= 3 de la serie QuantConnect/Python
(trois stubs d'exercice partageant un enonce unique), et la convention
three-exercises-per-notebook exige un markdown devant chaque exercice.
L'enonce unique [24] est eclate en intro + un markdown par exercice --
deplacement du texte existant, aucune valeur fabriquee.

QC-Py-14 avait une cellule markdown strictement vide (0 caractere,
seule du notebook) a la transition etude-de-cas -> blocs de reference
Execution ; elle porte maintenant l'intro ancree sur le contenu reel
des deux blocs [REFERENCE QC] (Immediate : ordres Market, univers
Daily ; VWAP : decoupage sur la journee, Resolution.Minute requise).

Markdown-only : sources/execution_count/outputs des 37 cellules code
byte-identiques a main. Runs consecutifs QC-Py-23b : 1 -> 0 (organe
detect_consecutive_code_cells.py). Les 2 runs restants de QC-Py-14
sont ceux que #15581 a declares benins (stub + bloc [REFERENCE QC]).

See #11601 (contribution partielle, tranche 2 des residuels).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* ci: retrigger CodeQL default-setup analysis (upload infra failure)

Run 34749605227 : les deux jambes Analyze (actions) et Analyze
(javascript-typescript) ont complete leur analyse mais leur upload SARIF
est mort silencieusement (22 s sans "Successfully uploaded results",
export codeql-failed-run.sarif ensuite) -- classe infra GitHub documentee
(CI/Tests du dashboard, cf #15945 pour Analyze (actions) corroborant).
Un run default-setup ne se relance pas via API ; un push neuf est le
seul declencheur. Aucun changement de contenu.

See #15953

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants