You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Epic transverse] Convention 3 exercices par notebook #2161
Mandat user 2026-06-02 : « il faudrait prévoir les 3 exercices dans tous les notebooks ». Convention transverse à établir puis appliquer — d'abord aux notebooks de cette Epic, puis rollout tracké (pas les ~500 notebooks d'un coup).
Convention (à documenter)
3 exercices par notebook pédagogique, cohabitant avec les exemples guidés (résolus). Exemples et exercices cohabitent (cf .claude/rules/exercise-example-labeling.md).
Classification par contenu, pas par titre : code = solution complète → Exemple ; code = stub → Exercice.
Stubs : pass / print("Exercice à compléter") / return None / result = None # TODO. JAMAISraise NotImplementedError / assert False / 1/0 (règle C.1). Préserver # TODO / # Indice / # Étape N.
Pas de fuite de solution : le notebook s'exécute de bout en bout même exercices non complétés.
Livrables
Documenter la convention « 3 exercices par notebook » dans .claude/rules/ (ou docs/), en référençant exercise-example-labeling.md et C.1.
Appliquer aux notebooks de cette Epic en priorité :
Conway NB1 / NB2 / NB3 (A1-A3) — à créer avec 3 exercices.
Grothendieck Lean-13 (B1) — ajouter 3 exercices.
GameTheory SC-01..04 (C1) : SC-02 a 0 exercice (ajouter 3), SC-04 en a 5 (recadrer vers 3 cœur).
Rollout plus large : tracker par familles via issues filles ultérieures (ne pas tout faire ici).
Critères d'acceptation
Convention écrite et liée aux règles existantes (pas de doublon).
Notebooks de l'Epic à 3 exercices conformes C.1, vérifiés par exécution.
Pilotage
Transverse : po-2023 / po-2025 + tout agent notebook. Coordonné par ai-01.
[CLAIMED-AMEND] lane myia-po-2023:CoursIA — 2026-09-15T22:0xZ
Correction du claim précédent (c.5687046840) : sa cible SemanticKernel/semantic-fleet/dotnet/notebooks/01-* est un chemin fantôme — le scan count_exercises avait été lancé sur l'arbre partagé sale, pas sur un worktree frais (leçon stale-tree-drift : re-scan depuis origin/main = 221 notebooks, la sous-série semantic-fleet n'existe pas sur main, aucun historique git).
Nouvelle cible, mesurée sur worktree frais origin/main : MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-5-Qwen-Image-Edit.ipynb — [2/3] exercices (Exercice 1 c.11 « Validation et diagnostic de workflow », Exercice 2 c.23 « Carte de différences »). Livraison : +1 exercice (3/3), re-exec complète C.2 contre le service qwen réel (stack UP et prouvée ce soir, smoke t2i PASS).
Grain: MED/notebook-python — lane myia-po-2023:CoursIA — prev: PR #16287
[DELIVERED] Image/01-5-Qwen-Image-Edit 3/3 — PR #16330 (exercice 4 : politique de retry et timeout adaptatif, re-exec complete service reel 395.9s, 0 erreur). Lane myia-po-2023:CoursIA. Grain suivant du rollout a piocher dans le pool sous-seuil (16 restants au dernier scan frais).
Cible : MyIA.AI.Notebooks/GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-4-MCP-Server/auditer-un-serveur-mcp.ipynb — [2/3] mesuré sur worktree frais (Ex1 c.13, Ex2 c.15 stubs reconnus ; header Ex3 c.16 + cellule c.17 template-dict à remplir NON compté par design #15080 : TODO au-dessus d'un corps qui calcule). Gap réel au seuil.
Livraison : +1 Exercice 4 (diff d'inventaire entre deux versions du catalogue — audit v1/v2 : ajoutés/retirés/renommés, greffé sur le thème « auditer »), stub forme canonique (return None # <- remplacer), insertion pure après c.17, re-exec complète C.2 (notebook stdlib offline, kernel python3). 0 collision (aucune PR ouverte sur ce notebook).
Correction du claim (issuecomment-5691770048) : la re-mesure a la lecture du notebook a infirme le scan initial (« 0 exercice ») — le compteur cherchait des headers markdown, or les 3 stubs C.1 existaient deja en commentaires code (outputs « Exercice N a completer » committes). Livrable re-scope sur la vraie lacune : la couche placement de la convention (markdown contexte/objectif/indices devant chaque exercice, cf. style PyMC-03) manquait. PR #16366 = 3 cellules markdown enchries ancrees aux sections 4/6/8/9, markdown-only (+51/−0), 12/12 cellules code byte-identiques. Le compte >=3 etant deja tenu, contribution partielle : See, pas Closes.
Re-scope motivé (2e correction de mesure, celle-ci dans l'outillage canonique) : à la lecture du notebook, les 3 exercices EXISTENT déjà avec énoncés (Ex1 Shortcut Maze, Ex2 Prioritized Sweeping squelette, Ex3 κ-sweep). Le compteur rate Ex2 car STUB_PATTERNS[0] print\(["']Exercice[s]? a completer ne matche pas la forme numérotéeprint("Exercice 2 a completer") — idiome canonique C.1 du corpus. Mesure d'impact : exactement 5 notebooks 2→3 (rl_8, PT_11a, Search-03c, Planners-1, SL-12), chacun +1 vrai stub spot-checké, 0 faux positif. Livrable = fix regex + tests + preuve compteurs avant/après. Le notebook lui-même n'est PAS modifié (3/3 une fois le compteur corrigé) — pas de papermill dû.
Fix a la racine du compteur canonique : STUB_PATTERNS[0] accepte l'idiome C.1 numerote print("Exercice N a completer") (la forme dominante du corpus etait invisible des que la porte body-computes neutralisait les # TODO d'un squelette a return derive). Preuves : corpus 3695→3700 exercices, sub-threshold 75→70, les 5 notebooks recupertes spot-checkes (rl_8, PT_11a, Search-03c, Planners-1, SL-12), pytest 112/112 (1 nouveau test miroir du cas rl_8). rl_8 compte desormais 3/3 conforme — le notebook est byte-identique a main, aucun exercice ajoute car les 3 existaient. See (contribution outil au rollout, pas un Closes).
Activity
docs(rules): add three-exercises-per-notebook convention (#2161) (#2168)
enrich(Sudoku-1-Python): add validity-checker exercise (0->3 exercise…
enrich(Sudoku-6-Python): add 2 distributed exercises for 3-exercise c…
enrich(Sudoku-3-Genetic-Python): add weighted fitness + swap mutation…
enrich(Sudoku-2-DLX-Python): add DLX verification exercise (2->3 exer…
enrich(Sudoku-5-PSO-Python): add error breakdown + convergence exerci…
enrich(Sudoku-7,Sudoku-9): add exercises for #2161 rollout (2->3, 0->…
fix(tweety): add exercise stubs to 3 notebooks per convention #2161 (…
enrich(GameTheory): add exercises to GT-5, GT-6, GT-7 for #2161 rollout
enrich(gametheory): add exercise to GT-10, GT-12, GT-14 for #2161 (3/…
enrich(GameTheory-6): add 2 distributed exercises (1->3, #2161) (#2199)
enrich(GameTheory-3): add 2 distributed exercises (0->3, #2161) (#2202)
enrich(gametheory): add exercises to GT-4, GT-8, GT-8c, GT-15c (#2161 …
fix(symbolicai): add confirmation prints + re-execute AA and Lean-9 (…
302 remaining items
jsboige commentedon Sep 15, 2026
[CLAIMED-AMEND] lane myia-po-2023:CoursIA — 2026-09-15T22:0xZ
Correction du claim précédent (c.5687046840) : sa cible
SemanticKernel/semantic-fleet/dotnet/notebooks/01-*est un chemin fantôme — le scan count_exercises avait été lancé sur l'arbre partagé sale, pas sur un worktree frais (leçon stale-tree-drift : re-scan depuis origin/main = 221 notebooks, la sous-série semantic-fleet n'existe pas sur main, aucun historique git).Nouvelle cible, mesurée sur worktree frais origin/main :
MyIA.AI.Notebooks/GenAI/Image/01-Foundation/01-5-Qwen-Image-Edit.ipynb— [2/3] exercices (Exercice 1 c.11 « Validation et diagnostic de workflow », Exercice 2 c.23 « Carte de différences »). Livraison : +1 exercice (3/3), re-exec complète C.2 contre le service qwen réel (stack UP et prouvée ce soir, smoke t2i PASS).Grain: MED/notebook-python — lane myia-po-2023:CoursIA — prev: PR #16287
jsboige commentedon Sep 15, 2026
[DELIVERED] Image/01-5-Qwen-Image-Edit 3/3 — PR #16330 (exercice 4 : politique de retry et timeout adaptatif, re-exec complete service reel 395.9s, 0 erreur). Lane myia-po-2023:CoursIA. Grain suivant du rollout a piocher dans le pool sous-seuil (16 restants au dernier scan frais).
jsboige commentedon Sep 15, 2026
[CLAIMED] lane myia-po-2023:CoursIA — 2026-09-15T22:5xZ — Grain: MED/notebook-python — prev: PR #16330
Cible :
MyIA.AI.Notebooks/GenAI/Plateformes-Conversationnelles/AI-Engine-WordPress/03-Functional/03-4-MCP-Server/auditer-un-serveur-mcp.ipynb— [2/3] mesuré sur worktree frais (Ex1 c.13, Ex2 c.15 stubs reconnus ; header Ex3 c.16 + cellule c.17 template-dict à remplir NON compté par design #15080 : TODO au-dessus d'un corps qui calcule). Gap réel au seuil.Livraison : +1 Exercice 4 (diff d'inventaire entre deux versions du catalogue — audit v1/v2 : ajoutés/retirés/renommés, greffé sur le thème « auditer »), stub forme canonique (
return None # <- remplacer), insertion pure après c.17, re-exec complète C.2 (notebook stdlib offline, kernel python3). 0 collision (aucune PR ouverte sur ce notebook).jsboige commentedon Sep 15, 2026
[DELIVERED] WordPress-MCP 03-4 auditer-un-serveur-mcp 3/3 — PR #16331 (exercice 4 : rapport de derive de catalogue, re-exec complete 3.8s stdlib offline, 0 erreur, cellule Ex3 existante non touchee). Lane myia-po-2023:CoursIA.
jsboige commentedon Sep 16, 2026
[CLAIMED] 04-Tokenisation-From-Scratch.ipynb — myia-po-2023:CoursIA — 2026-09-16T03:56Z — paths: MyIA.AI.Notebooks/GenAI/RAG-et-Memoire-Semantique/04-Tokenisation-From-Scratch.ipynb — enrichissement exercices #2161 : 0 exercice mesuré (scan 32 cellules, 12 code), ajout de 3 exercices stub C.1 + re-exec papermill kernel coursia-ml-training. Preflight : 0 PR ouverte touchant le fichier, 0 claim #2161 le citant.
jsboige commentedon Sep 16, 2026
[DELIVERED] 04-Tokenisation-From-Scratch.ipynb — myia-po-2023:CoursIA — PR #16366 — paths: MyIA.AI.Notebooks/GenAI/RAG-et-Memoire-Semantique/04-Tokenisation-From-Scratch.ipynb
Correction du claim (issuecomment-5691770048) : la re-mesure a la lecture du notebook a infirme le scan initial (« 0 exercice ») — le compteur cherchait des headers markdown, or les 3 stubs C.1 existaient deja en commentaires code (outputs « Exercice N a completer » committes). Livrable re-scope sur la vraie lacune : la couche placement de la convention (markdown contexte/objectif/indices devant chaque exercice, cf. style PyMC-03) manquait. PR #16366 = 3 cellules markdown enchries ancrees aux sections 4/6/8/9, markdown-only (+51/−0), 12/12 cellules code byte-identiques. Le compte >=3 etant deja tenu, contribution partielle : See, pas Closes.
jsboige commentedon Sep 16, 2026
[CLAIMED] rl_8_model_based_dyna_q.ipynb — myia-po-2023:CoursIA — 2026-09-16T04:29Z — paths: MyIA.AI.Notebooks/RL/rl_8_model_based_dyna_q.ipynb — enrichissement exercices #2161 : 2/3 mesuré au compteur officiel count_exercises.py (liste sub-threshold du jour), ajout d'1 exercice stub C.1 avec énoncé markdown pour atteindre 3/3, re-exec papermill kernel python3. Preflight : 0 PR ouverte touchant le fichier, 0 claim le citant. Grain mesuré au compteur canonique (leçon cycle 9 : plus jamais de scan ad-hoc header-only).
jsboige commentedon Sep 16, 2026
[CLAIMED-AMEND] rl_8_model_based_dyna_q.ipynb — myia-po-2023:CoursIA — 2026-09-16T04:27Z — paths: scripts/notebook_tools/count_exercises.py, scripts/notebook_tools/tests/test_count_exercises.py
Re-scope motivé (2e correction de mesure, celle-ci dans l'outillage canonique) : à la lecture du notebook, les 3 exercices EXISTENT déjà avec énoncés (Ex1 Shortcut Maze, Ex2 Prioritized Sweeping squelette, Ex3 κ-sweep). Le compteur rate Ex2 car STUB_PATTERNS[0]
print\(["']Exercice[s]? a completerne matche pas la forme numérotéeprint("Exercice 2 a completer")— idiome canonique C.1 du corpus. Mesure d'impact : exactement 5 notebooks 2→3 (rl_8, PT_11a, Search-03c, Planners-1, SL-12), chacun +1 vrai stub spot-checké, 0 faux positif. Livrable = fix regex + tests + preuve compteurs avant/après. Le notebook lui-même n'est PAS modifié (3/3 une fois le compteur corrigé) — pas de papermill dû.jsboige commentedon Sep 16, 2026
[DELIVERED] rl_8_model_based_dyna_q.ipynb — myia-po-2023:CoursIA — PR #16367 — paths: scripts/notebook_tools/count_exercises.py, scripts/notebook_tools/tests/test_count_exercises.py
Fix a la racine du compteur canonique : STUB_PATTERNS[0] accepte l'idiome C.1 numerote
print("Exercice N a completer")(la forme dominante du corpus etait invisible des que la porte body-computes neutralisait les# TODOd'un squelette a return derive). Preuves : corpus 3695→3700 exercices, sub-threshold 75→70, les 5 notebooks recupertes spot-checkes (rl_8, PT_11a, Search-03c, Planners-1, SL-12), pytest 112/112 (1 nouveau test miroir du cas rl_8). rl_8 compte desormais 3/3 conforme — le notebook est byte-identique a main, aucun exercice ajoute car les 3 existaient. See (contribution outil au rollout, pas un Closes).jsboige commentedon Sep 16, 2026
[CLAIMED] Lab4-DataWrangling.ipynb — myia-po-2023:CoursIA — 2026-09-16T05:23Z — paths: MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab4-DataWrangling/Lab4-DataWrangling.ipynb — enrichissement exercices #2161 : 2/3 mesuré au compteur canonique (post-fix #16367), ajout d'1 exercice stub C.1 + énoncé markdown pour 3/3, re-exec papermill kernel python3 (grain code-notebook : nouvelles cellules code = outputs réels exigés). Preflight : 0 PR ouverte touchant le fichier, 0 claim le citant.
jsboige commentedon Sep 16, 2026
[DELIVERED] Lab4-DataWrangling.ipynb — myia-po-2023:CoursIA — PR #16370 — paths: MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab4-DataWrangling/Lab4-DataWrangling.ipynb
Les 3 exercices existaient (énoncés + stubs) ; l'Ex1 était invisible au compteur car ses placeholders
= Nonenus ne portent aucun marqueur C.1 (porte hole). Fix notebook :# TODO etudiantsur les 3 lignes (comment-only) + re-exec papermill complète kernel python3 (29/29, 0 erreur, exec 1-12), outputs byte-identiques après jointure (flip string->liste canonique documenté au body, leçon #14209). Compteur : 2/3 -> 3/3 Conforming. See.jsboige commentedon Sep 16, 2026
[CLAIMED] ICT-23-PersonaCatastrophe exercices 1-3 : marqueurs canoniques C.1 (print idiom) sur stubs invisibles au compteur (body-computes neutralise les #TODO des passthroughs empty_like) — myia-po-2023:CoursIA — 2026-09-16T06:02:28Z
paths: MyIA.AI.Notebooks/IIT/ICT-Series/ICT-23-PersonaCatastrophe.ipynb
jsboige commentedon Sep 16, 2026
[DELIVERED] PR #16373 — ICT-23-PersonaCatastrophe : 3 stubs existants (TODO etudiant + passthroughs empty_like) rendus visibles au compteur via print-idiom C.1 canonique. Re-exec complete 19/19, 0 erreur, compteur 1/3 -> 3/3. Grain LIGHT/notebook-python, prev MED/tooling #15919 — myia-po-2023:CoursIA
jsboige commentedon Sep 16, 2026
[CLAIMED] ICT-Series stubs neutralises par body-computes : print-idiom C.1 sur ICT-25-InoculationRL Ex1 + ICT-15e-Bridge2 Ex1/Ex2 (3 stubs TODO existants invisibles au compteur, return derive neutralise les comment-markers) — myia-po-2023:CoursIA — 2026-09-16T06:21:58Z
paths: MyIA.AI.Notebooks/IIT/ICT-Series/ICT-25-InoculationRL.ipynb
paths: MyIA.AI.Notebooks/IIT/ICT-Series/ICT-15e-Bridge2-RecoverabilityAgency.ipynb
jsboige commentedon Sep 16, 2026
[DELIVERED] PR #16441 — ICT-25-InoculationRL Ex1 (2/3 -> 3/3) + ICT-15e-Bridge2 Ex1/Ex2 (1/3 -> 3/3) : print-idiom C.1 canonique sur stubs TODO neutralises par la porte body-computes (return derive). Re-exec complete des 2 notebooks (53/53 et 24/24, 0 erreur, diff source chirurgical +3 lignes). Grain LIGHT/notebook-python — myia-po-2023:CoursIA