Skip to content

[Epic transverse] Convention 3 exercices par notebook #2161

Closed

Description

@jsboige

Contexte

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. JAMAIS raise 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

  1. Documenter la convention « 3 exercices par notebook » dans .claude/rules/ (ou docs/), en référençant exercise-example-labeling.md et C.1.
  2. 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).
  3. 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.

Activity

  1. 302 remaining items

  2. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    [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

  3. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    [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).

  4. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    [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).

  5. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    [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.

  6. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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.

  7. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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.

  8. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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).

  9. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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 completer ne matche pas la forme numérotée print("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û.

  10. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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 # 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).

  11. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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.

  12. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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 = None nus ne portent aucun marqueur C.1 (porte hole). Fix notebook : # TODO etudiant sur 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.

  13. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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

  14. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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

  15. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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

  16. jsboige commented on Sep 16, 2026

    @jsboige
    OwnerAuthor

    [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

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