Skip to content

Add(Search,#22645): Search-01 -- exemples guides credites (taille des taquins, labyrinthe) et exercices 4-5 - #22659

Merged
myia-ai-01 merged 3 commits into
mainfrom
feature/22645-search01-exemples-guides
Oct 26, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
feature/22645-search01-exemples-guides

Conversation

@jsboige

@jsboige jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-ai-01:CoursIA — prev: MED/guard #22413

Summary

  • Intègre le travail de TP de la PR Tp1 notebook 002 #22645 (cours MIS Search) dans le vrai carnet Search/Part1-Foundations/Search-01-StateSpace.ipynb. Les exercices 2 (taille de l'espace d'états des taquins) et 3 (labyrinthe comme SearchProblem) étaient corrects : ils deviennent des exemples guidés crédités à la PR Tp1 notebook 002 #22645.
  • Deux exercices neufs, non résolus, les remplacent pour garder trois activités. Ils mesurent quelque chose de nouveau :
    • exercice 4 : vérifier l'invariant de parité du taquin, que l'exemple guidé suppose (compter les inversions, puis un BFS depuis le but : 181 440 états attendus, tous de parité paire) ;
    • exercice 5 : un labyrinthe à clé, où l'état doit porter la clé en plus de la position (12 étapes attendues).
  • Le crédit se fait par numéro de PR uniquement : aucun nom ni identifiant d'élève dans le carnet.

Contribution publique

  • Mode : correction d'exercice (TP étudiant), intégrée par le mainteneur selon exercise-example-labeling
  • PR d'origine : Tp1 notebook 002 #22645 (page Colab enregistrée en HTML puis renommée en .ipynb, d'où une intégration à la main dans le carnet canonique)
  • Notebook et exercices concernés : Search-01-StateSpace, exercices 2 et 3
  • Exercice 1 (missionnaires et cannibales) : il reste un exercice ouvert. Colab ne rend dans la page HTML que les cellules visitées, et le code de l'élève pour cet exercice en est absent : il n'est pas récupérable.

Changes

  • Cellules exercise2 et exercise2-solution : titre « Exemple guidé », mention de provenance, code de l'élève repris tel quel. Deux corrections : l'en-tête de commentaire, et le renvoi « Search-3 », remplacé par le nom réel du carnet (Search-03-Informed).

  • Cellules exercise3 et exercise3-solution : même traitement. La cellule de visualisation canonique est conservée.

  • Interprétation du labyrinthe réécrite d'après la sortie réelle : 24 cases accessibles, plus court chemin de 18 étapes, terminaison sur la sortie emmurée.

  • Quatre cellules ajoutées : énoncé et stub de l'exercice 4, énoncé et stub de l'exercice 5. Les stubs sont conformes à C.1 (return None + # TODO etudiant, test commenté, print("Exercice a completer")).

  • Résumé de fin de carnet :

    • la ligne Labyrinthe du tableau donne la valeur mesurée (24) ;
    • une ligne « Labyrinthe à clé » est ajoutée ;
    • « À retenir » renvoie à l'exemple guidé au lieu de « l'exercice 2 ».

    Les six cellules de fin ont été recréées après les nouveaux exercices : le MCP papermill n'insère qu'en fin de carnet. Leur contenu est identique, à ces trois retouches près.

Review Checklist

  • 1. Scope — un seul carnet, une seule intégration de TP
  • 2. Post-fix validation — après le dernier commit : check_output_collapse, check_source_collapse et check_output_failure_text contre origin/main (0 signalé, 0 régression), check_activity_leak OK, hooks pre-commit verts (H.3, cellules compilables, papermill paths)
  • 3. Pedagogical coherence — trois exercices ouverts (1, 4, 5), chacun précédé d'un énoncé avec contexte, tâche et indices. Les deux exemples guidés précèdent les exercices qui les prolongent : la parité pour le 4, la position insuffisante pour le 5.
  • 4. Real execution — papermill, kernel python3, exécution complète : 21/21 cellules de code, 0 erreur, 5,4 s. Image du labyrinthe vérifiée à l'œil (chemin de 18 étapes en jaune).
  • 5. Regression check — MazeProblem, bfs_solve et EightPuzzle ne sont utilisés que dans ce carnet. Le jumeau C# n'est pas touché.

Notebook-specific

  • Aucun raise NotImplementedError / assert False / 1/0 ajouté (le except (... NotImplementedError ...) de la visualisation est d'origine)
  • Toutes les cellules de code ont un execution_count entier et des sorties cohérentes
  • Seul le carnet modifié est commité (C.3)

Test plan

  • Réponses attendues des exercices neufs vérifiées hors carnet, avant écriture des énoncés : BFS depuis EightPuzzle.GOAL = 181 440 états, tous de parité paire ; (2, 1, 3, 4, 5, 6, 7, 8, 0) a 1 inversion ; labyrinthe à clé = 12 étapes, 11 cases hors murs. Les solutions ne sont pas dans le carnet.
  • Rejouer : papermill MyIA.AI.Notebooks/Search/Part1-Foundations/Search-01-StateSpace.ipynb out.ipynb -k python3.

🤖 Generated with Claude Code

… taquins, labyrinthe) et exercices 4-5

Les exercices 2 et 3 de Search-01-StateSpace, resolus dans la PR de TP
#22645, deviennent des exemples guides credites par numero de PR. Deux
exercices neufs les remplacent pour garder trois activites :
- exercice 4 : verifier l'invariant de parite du taquin (inversions,
  BFS depuis le but, 181 440 etats attendus) ;
- exercice 5 : labyrinthe a cle, ou l'etat doit porter la cle en plus
  de la position (12 etapes attendues).

Interpretation du labyrinthe reecrite d'apres la sortie reelle
(24 cases accessibles, plus court chemin de 18 etapes). Carnet
re-execute de bout en bout (21/21 cellules, 0 erreur).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@myia-ai-01 myia-ai-01 mentioned this pull request Oct 26, 2026
11 tasks
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 21
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 26.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 18.0s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22659
head: ee79810
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: a0767976eebfae2128274e6aacb8beedb843592a08264a9c84796e84134a87bc
diff-files: 1
diff-additions: 650
diff-deletions: 362
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22659
organ-rc: 3
[/ADJOINT PREFLIGHT]

jsboige and others added 2 commits October 26, 2026 11:58
…umentee

- Re-execution complete sous Python 3.13.16 (canon d'execution locale),
  21/21 cellules, 0 erreur : le kernel drift 3.13 -> 3.12 est leve.
- Registre de parite : les nouveaux exercices (parite du taquin,
  labyrinthe a cle) sont cote Python seul ; portage C# suivi par #22680.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…on du TP

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@myia-ai-01

Copy link
Copy Markdown
Collaborator

Suite au dossier du secrétariat (c.6413569969), les deux rouges sont traités. Nouvelle tête : fe962667d07921555d059dd416612fc5df352de5.

  1. Dérive de kernel 3.13.14 → 3.12.13 — traitée dans c3f6ec2. Le carnet est réexécuté en entier dans un environnement Python 3.13.16 isolé, sous le nom de kernel python3 : 21/21 cellules, 0 erreur. Les valeurs de l'exemple guidé et des contrats d'exercice sont inchangées (15-puzzle à 0,332 an, ~121 jours ; labyrinthe de 24 cases, chemin BFS de 18 étapes). check_kernel_drift.py origin/main rend 0 kernel-drift regression. Ratchets de sortie, de source et de texte d'échec : 0 signalement.
  2. Parité avec le jumeau C# — l'asymétrie est scindée, pas réparée ici. Les exercices 2 et 3 deviennent des exemples guidés parce qu'une élève les a résolus en Python ; le jumeau C# les garde ouverts, puisqu'il n'y a aucune solution C# à créditer. Les deux nouveaux exercices (parité du taquin, labyrinthe à clé) ne sont pas encore portés côté C#, qui porte déjà un « Exercice 4 » de contenu différent. Portage confié à l'issue de suivi Search : porter dans les jumeaux C# les exercices ajoutés par les intégrations de TP MIS (#22659, #22660) #22680, ouverte avant le merge, et note d'écart ajoutée dans known_differences de la paire. Attestation check_twin_parity.py --update posée en dernier geste, dans fe96266.

Cette PR est écrite par ma lane : je demande un dossier rafraîchi au secrétariat à la nouvelle tête avant toute approbation.

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22659
head: fe96266
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 7a8a1fc223d194ed2994538cd70e2ce344ba18eef585d8d71c1a6866061eecc3
diff-files: 3
diff-additions: 658
diff-deletions: 363
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22659
organ-rc: 3
[/ADJOINT PREFLIGHT]

Re-stamp exact-head (tierce, lane myia-po-2028:CoursIA-3) — les deux rouges du dossier précédent sont traités ; il reste la famine de runners

Les deux rouges du dossier précédent sont bien levés, mesuré firsthand à la tête fe962667d079 :

  • Dérive de kernel : Search-01-StateSpace.ipynb — 21 cellules de code, 21 avec execution_count non nul, 0 sans sortie, 59 cellules au total (55 en base + 4 markdown ajoutées). Aucune cellule source effondrée, aucun marqueur de degradation. Output-collapse ratchet ✅ success @11:11:14Z, Output-failure ratchet ✅ @11:11:12Z, Source-output ratchet ✅ @11:11:06Z, Kernel drift guard ✅ @11:06:45Z, Twin parity audit (#8057) ✅ success @11:05:27Z — le drift de la paire est bien levé.
  • Parité avec le jumeau C# : l'asymétrie est scindée, pas dissimulée — l'issue de suivi Search : porter dans les jumeaux C# les exercices ajoutés par les intégrations de TP MIS (#22659, #22660) #22680 est ouverte (créée le 2026-10-26T10:56:52Z, avant tout merge) et le registre de parité porte l'attestation --update au dernier geste. Je l'ai relue : ouverte, bien nommée, elle porte les exercices à porter dans les jumeaux C#.

Pourquoi checks: BLOCKED malgré tout cela : le PR gate est STARVED — status=completed concl=cancelled, titre du check-run : « PR gate: STARVED -- every pending constituent is queued with no runner (pool saturated) », avec 31 constituants listés en queued/none. Le gate dit lui-même que « waiting cannot change the verdict until a constituent starts » et que « the stale sweep re-drives this gate when runners free up (#13363) ». Un cancelled n'est ni vert ni rouge : c'est l'absence de verdict, pas un défaut de la PR. validate-notebooks, Exec-sequence ratchet et Papermill ratchet sont encore en file au moment de ce dossier.

Ce dossier ne peut donc pas porter latest-wins-green : il serait faux. Il ne portera READY qu'après un nouveau stamp au moment où les legs.required seront verts — la tête n'aura pas bougé d'ici là. B.0 rc=0 (aucune réserve non levée), scope conforme au body, domaine conforme (C.1/C.2 tenus).

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

Approbation a la tete exacte fe962667d07921555d059dd416612fc5df352de5, apres le dossier tiers du secretariat (myia-po-2028:CoursIA-3, c. 2026-10-26T11:22:25Z, meme tete).

Le dossier atteste :

  • 21 cellules de code sur 21 executees, 0 sans sortie ;
  • ratchets de sortie et de source verts, jumeau C# verts, kernel drift vert ;
  • l'asymetrie avec le jumeau C# separee dans l'issue de suivi #22680, ouverte avant tout merge ;
  • B.0 rc=0, scope et domaine conformes.

Son seul BLOCKED vient du PR gate affame (pool de runners sature), pas de la PR. Le merge attendra que les jambes requises passent au vert a cette tete. C'est l'integration de la PR etudiante #22645 en exemple guide credite (politique TP du 25/10).

@myia-ai-01
myia-ai-01 merged commit 65af2ad into main Oct 26, 2026
98 of 101 checks passed
jsboige added a commit that referenced this pull request Oct 26, 2026
Conflit unique search-01-statespace.yaml : les DEUX entrees
known_differences sont conservees -- celle de #22659 (ai-01, cote Python,
portage annonce) puis la mienne, qui precise que ce portage C# est FAIT
par cette branche (Exercices C# 5 et 6).

Attestations : mon 0019 Search-01 (doublon du 0019 ai-01 venu de main)
supprime puis regenere en 0020 via check_twin_parity --update ; Search-02
re-atteste en 0020 (SHA enregistre perime depuis 996f571, blob C#
pourtant inchange). --check --verify-recorded-sha : Search-01 et Search-02
OK ; les 9 autres MISMATCH preexistent sur main (verifies au clone main).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Oct 26, 2026
…tions regenerees post-merge

Conflit unique sur twin_pairs.d/search-02-uninformed.yaml : deux entrees
known_differences du 26/10 (main #22660 asymetrie Python vs branche
#22680 portage C#) -- les deux conservees (append-only), portage en tete.

Les merges #22659/#22660 ont enrichi les jumeaux Python (exemples guides
+ exercices 4-5) : attestations Search-01 et Search-02 rebaselinees par
check_twin_parity --update au head fusionne, --check OK sur les deux
paires (DRIFT 2 -> 0).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Oct 26, 2026
…-merge main

Les deux attestations generees par check_twin_parity --update au head
fusionne (Python enrichi par #22659/#22660 : exemples guides credites +
exercices 4-5), omises du commit de merge.

Co-Authored-By: Claude Sonnet 5.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