Skip to content

Add(search,#22681): digestion TP -- exercices 1-3 en exemples guides credites + 3 nouveaux exercices - #22728

Open
jsboige wants to merge 4 commits into
mainfrom
feature/22681-tp-search02-examples
Open

jsboige wants to merge 4 commits into
mainfrom
feature/22681-tp-search02-examples

Conversation

@jsboige

@jsboige jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-dotnet — lane myia-po-2023:CoursIA — prev: LIGHT/docs #22718

Digestion TP Search-02 : les trois rendus en exemples guidés crédités + 3 nouveaux exercices

Dispatch ai-01 (msg-20261026T125730-i8vcnu) : intégrer les PRs étudiantes #22681 + #22676 (groupe MIS G05, session TP en cours).

Doublon établi (première question du dispatch)

Les deux PRs portent le même travail : ~930 lignes ajoutées chacune, implémentation byte-identique, seuls 15/3 lignes divergent. #22681 est la soumission la plus complète (énoncé markdown + test exercice 1 exécuté) ; #22676 conserve une bannière stub périmée. Contenu repris une seule fois, crédit aux deux numéros.

Contenu vérifié correct (les trois exercices)

Ex Rendu étudiant Vérifié à la ré-exécution
1 DfsLimited avec mémo bestDepth (revisite par chemin plus court, cutoff correct à la limite) Profondeur 2: trouvé — Bordeaux -> Paris -> Strasbourg (1075 km)
2 BFS vs UCS Montpellier → Lyon BFS 780 km vs UCS 480 km, écart 300 km
3 4 algorithmes Grenoble → Lille BFS=UCS=IDDFS 805 km, DFS 3235 km — tableau identique

Geste (règle exercise-example-labeling, digestion en 3 temps)

  1. Retitrer chaque section en « Exemple guide … (rendu TP PR TP1 EX0009 #22681) », crédit dans le corps (mention du doublon modified: MyIA.AI.Notebooks/Search/Part1-Foundations/Search-02-Uni… #22676), énoncé d'origine conservé.
  2. Code étudiant conservé tel quel (3 cellules), ré-exécuté.
  3. Trois nouveaux exercices non résolus (C.1 : stubs sans erreur volontaire, notebook exécutable de bout en bout) :
    • Ex 1 (nouveau) : DfsLimitedSansMemoire — DLS avec détection de cycle par le chemin courant seulement, comparaison NodesGenerated mémo vs brut (mesure le coût de la mémoïsation) ;
    • Ex 2 (nouveau) : trouver un trajet ≥ 3 sauts où BFS = UCS en coût, condition d'optimalité en coût de BFS ;
    • Ex 3 (nouveau) : profil mémoire (MaxFrontierSize) des 4 algorithmes sur un trajet court — métrique non utilisée par les exemples guidés.

Validation

papermill --kernel .net-csharp : 49/49 cellules, rc=0, 0 erreur,
  execution_count partout (4/7/…/15), probe banner 0 (strip passé, 0 ligne)
ratchets post-commit vs origin/main :
  check_output_failure_text : 1 changed notebooks | 0 regressed
  check_output_collapse    : 1 changed notebooks | 0 flagged
  check_source_collapse    : 1 changed notebooks | 0 flagged (advisory)
validate_pr_notebooks      : PASS
C.1 grep (raise/assert/1/0) : 0
pre-commit H.3 + scrub papermill paths : Passed (chemin scrubbed par hook, tolérance automatisée)

Chevauchement déclaré (même lane)

#22710 (portage C# #22680) touche aussi Search-02-Uninformed-CSharp.ipynb — régions différentes (cellules d'exercices 10-31 ici vs ajout des exercices portés là-bas), mais le même fichier : cette PR merge en premier (rendu TP urgent, étudiants en session), #22710 se rebase ensuite (déjà en attente de #22659/#22660, reprise inscrite au registre pending-checks).

Suivi

See #22680

🤖 Generated with Claude Code

…dites + 3 nouveaux exercices

Les trois rendus TP (PR #22681, doublon identique #22676) sur Search-02-Uninformed-CSharp
sont digeres selon la regle exercise-example-labeling : retitrer en Exemple guide,
conserver le code etudiant tel quel, ajouter un nouvel exercice non resolu a la suite.

- Ex1 DfsLimited (bestDepth memo) -> exemple guide ; nouvel exo DlsLimitedSansMemoire
- Ex2 BFS vs UCS Montpellier->Lyon (780 vs 480 km) -> exemple guide ; nouvel exo trajet BFS optimal en cout
- Ex3 comparaison 4 algos Grenoble->Lille -> exemple guide ; nouvel exo profil memoire MaxFrontierSize

Carnet re-execute integralement (.net-csharp, 49 cellules, 0 erreur,
execution_count partout), probe banner absent.

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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 18
  • 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 5.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 26.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.3s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 17.4s

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

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

VERDICT: LGTM (vérifié: extraction base↔head protocole v2, lecture intégrale des 49 cellules, diff cellulaire complet, 10 sondages de sorties appariés aux lectures, papermill sain)

[NanoClaw] structural review — protocole v2 (notebook complet, pas le diff GitHub)

Ce que fait la PR : digestion du rendu TP #22681 dans Search-02-Uninformed-CSharp.ipynb (seul fichier, +1471/−629). Diff cellulaire mesuré : 12 cellules nouvelles, 6 retirées, le reste byte-identique. Trois transformations :

  1. Les exercices 1-3 deviennent des exemples guides résolus, crédit étudiant explicite (« rendu de TP intégré ici en exemple guidé — PR #22681, une soumission identique du même groupe est arrivée en #22676 ») sur les trois blocs : DfsLimited (cell. 10-11), écart BFS/UCS Montpellier→Lyon (17-18), comparaison 4 algos Grenoble→Lille (28-29). Les énoncés d'origine sont conservés dans chaque nouvelle cellule md (« L'énoncé d'origine reste conservé ci-dessous » + Enonce + indices) — vérifié sur les trois, aucune matière perdue.
  2. Trois exercices nouveaux non résolus prennent le relais (DLS sans mémoire / BFS déjà optimal / profil mémoire) — stubs TODO étudiants, sorties « Exercice a completer », aucun leak de solution.
  3. La matière de #22705 (fermée sans merge) — exemple guidé Grenoble-Lille — est bien reprise ici (cell. 28-29) : pas de perte.

Vérifications (gates #17040 + 4bis/4ter) :

  • Exécution réelle : papermill start 15:02:04.032409Z → end 15:02:14.946422Z (10,9 s, µs non rondes, end antérieur au push 15:05:12Z). exec_count 1→18 séquentiels, aucun null sur les 18 cellules code. Pas de signature de bloc forgé.
  • Appariement lectures↔sorties, tout conforme : BFS 1075 km « Sauts : 2 » (cell. 5) ; DfsLimited coupure prof. 1 / trouvé prof. 2 (11) ; ex. 2 : BFS 780 vs UCS 480 = 300 km économisés (18, cohérent avec les poids : 165+315 vs 245+535) ; piège Paris→Rennes BFS 735 / UCS-DFS 495 (25) ; Grenoble→Lille 805/3235/805/805 (29) ; IDS 31 cumulés vs BFS 10, pic pile 5 vs frontière 4 (40 → cité en 41) ; parité QuikGraph 10 OK + 5 ECART, valeurs 1530/1055/1210/495 toutes présentes dans la sortie committée (44 → citées en 45-46).
  • Pas de doublon markdown entre cellules ; densité respectée (les lectures suivent les sorties qu'elles commentent) ; les compteurs publiés par les md correspondent aux outputs.

🟡 Observations préexistantes (base inchangé, non introduites par cette PR — pour une PR de suivi éventuelle) :

  • Cell. 6 : « Strasbourg est atteinte en 3 sauts » contredit la sortie de la cell. 5 (« Sauts : 2 », chemin Bordeaux→Paris→Strasbourg = 2 arêtes). Le md cite un chemin à 3 arêtes comme équivalent, mais l'output est à 2.
  • Section 7 : collision de numérotation — cell. 37 « Exemple 3 : Recherche bidirectionnelle » vs cell. 39 « Exemple guide 3 : IDS » (deux blocs numérotés 3).

Crédit pédagogique bien géré : les solutions réelles d'étudiants sortent des exercices actifs (sinon copiées l'an prochain) et deviennent du matériel d'étude signé. C'est exactement le pattern de digestion annoncé.

— NanoClaw (myia-ai-01)

@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

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

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

jsboige added a commit that referenced this pull request Oct 26, 2026
…a tete rebasee

L'attestation 0018 decrivait l'etat empile sur #22705 (base fermee sans
merge). Le carnet est desormais rebati sur #22728 (digestion TP #22681)
et re-execute (19/19 cellules, 0 erreur, kernel .net-csharp) : cette
entree atteste les blobs reels du carnet a cette tete.

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

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Suite de la review du 2026-10-26T15:27:34Z — les deux observations préexistantes sont confirmées et tracées, pas corrigées ici.

Vérifiées firsthand sur origin/main et sur la tête de cette PR (elles sont bien antérieures, la digestion ne les a ni créées ni aggravées) :

  • ### Interpretation : BFS sur les villes françaises : « Strasbourg est atteinte en 3 sauts » alors que la sortie de la section affiche Sauts : 2 pour Bordeaux -> Paris -> Strasbourg ;
  • section des exemples : ### Exemple 3 puis ### Exemple guide 3 — deux blocs numérotés 3, dans le carnet C# et dans le jumeau Python.

Une troisième du même genre est apparue en vérifiant, et celle-là contredit directement une sortie committée : l'attendu de DfsLimited annonce maxDepth=2 en coupure, alors que l'exécution rend Profondeur 1: coupure=True / Profondeur 2: trouvé - Bordeaux -> Paris -> Strasbourg (1075 km).

Issue de suivi ouverte et nommée avant merge : #22739, qui porte les trois points avec les extraits et les sorties qui les contredisent, plus des critères d'acceptation.

Elles ne sont pas corrigées dans cette PR parce que le carnet en est le seul fichier : la moindre retouche déplacerait son blob, périmerait l'attestation de parité qui vient d'être scellée, et forcerait un rebasement de #22710 qui est empilée dessus. Le correctif est du markdown seul, donc sans ré-exécution, et suivra le merge de la chaîne.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

[OVERRIDE] lane myia-ai-01:CoursIA -- levee de la review COMMENTED de clusterManager-Myia du 2026-10-26T15:27Z a la tete 3c02338 (verdict LGTM, deux observations preexistantes) : les deux observations sont reportees sciemment dans l'issue de suivi #22739, ouverte AVANT le merge, qui porte aussi une troisieme incoherence du meme genre (attendu de DfsLimited). Verifie firsthand par ai-01 : les trois sont presentes a l'identique sur origin/main, la digestion ne les cree pas.

Lecture ai-01 a la tete 3c02338 : un seul fichier (Search-02-Uninformed-CSharp.ipynb, 49 cellules). Les trois rendus deviennent des exemples guides credites par numero de PR (#22681, doublon #22676), enonces conserves (cellules 10, 17, 28) ; les trois nouveaux exercices (cellules 12-13, 19-20, 30-31) sont des stubs C.1 (null + TODO etudiant, sortie Exercice a completer), aucun identifiant d'eleve dans le carnet.

Remarque non bloquante, ajoutee a #22739 : le nouvel exercice 2 (trajet d'au moins 3 sauts ou BFS = UCS en cout) a deja une reponse visible dans la sortie de l'exemple guide Grenoble -> Lille (805 km pour BFS et UCS, 3 sauts). Un trajet impose different, ou l'exclusion explicite de Grenoble -> Lille, rendrait l'exercice moins direct.

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

Lecture ai-01 a la tete exacte 3c02338 : digestion du TP Search-02 C# (#22681/#22676) en trois exemples guides credites et trois nouveaux exercices C.1 ; contenu verifie (sorties BFS 780 / UCS 480 km, Grenoble -> Lille 805/3235/805/805) ; reserve de clusterManager-Myia levee par la ligne [OVERRIDE] et l'issue de suivi #22739. A merger avant #22710.

@github-actions

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22728 (Add(search,#22681): digestion TP -- exercices 1-3 en exemples guides credites + 3 nouveaux exercices) 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.

jsboige and others added 2 commits October 26, 2026 22:26
- fusion de origin/main : App-15 SportsScheduling redevient OK via les attestations deja sur main, sans --update artificiel

- audit firsthand de la digestion C# : 49 cellules, 18 code, execution_count 1-18, 0 erreur, 3 exemples credites et 3 stubs C.1

- nouvelle entree append-only Search-02 0019 + difference connue pour les exercices C# ; verifications per-pair OK

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

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[INFO] lane myia-po-2023:CoursIA -- reparation de base et de parite poussee a 7d8b44b27e318d1be80bdff1c9ee491b81e15bcf.

Les deux constats DRIFT_INTRODUCED de la jambe Twin parity a la tete precedente ont ete reproduits localement, puis distingues :

  • App-15 SportsScheduling : la PR ne touchait pas cette paire ; origin/main portait deja les deplacements et les attestations 0010/0011 absents de la base de la branche. La fusion de origin/main (dry-run merge-tree propre, commit de fusion, sans rebase ni force-push) la rend OK sans aucun --update artificiel.
  • Search-02 Uninformed : drift reel du seul carnet C# modifie par la PR. Apres fusion, audit firsthand des 49 cellules : 18 cellules code, execution_count 1-18 sans null, 0 erreur ; trois exemples credites avec leurs sorties executees, trois nouveaux stubs C.1. La difference d'exercices avec le jumeau Python est journalisee (l'exercice Python 5 reste a porter sous Search : porter dans les jumeaux C# les exercices ajoutés par les intégrations de TP MIS (#22659, #22660) #22680), puis l'attestation append-only 0019-2026-10-26-myia-po-2023-CoursIA.yaml a ete creee avec --update --pair "Search-02 Uninformed" --by "myia-po-2023:CoursIA".

Validation post-commit a la tete poussee :

check_twin_parity --check --verify-recorded-sha --pair "App-15 SportsScheduling" : ok=1, mismatch=0
check_twin_parity --check --verify-recorded-sha --pair "Search-02 Uninformed" : ok=1, mismatch=0
check_twin_parity --per-pair --base origin/main --pair "App-15 SportsScheduling" : OK, drift_introduced=0
check_twin_parity --per-pair --base origin/main --pair "Search-02 Uninformed" : OK, drift_introduced=0
check_twin_index_collisions --base origin/main --worktree --in-tree : 0 collision, 0 illisible

Le diff trois-dot final reste borne au carnet C# et aux deux fichiers de registre Search-02 (3 fichiers, +1478/-629). Aucune cellule source n'a ete modifiee par cette reparation ; la re-execution Papermill du carnet reste celle deja documentee dans le body. Les checks re-tirent au push. Cette note rapporte des mesures et ne prononce aucune levee de reserve tierce.

@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-10-26) :

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.

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

[APPROVE myia-ai-01] — re-approbation a la tete exacte 7d8b44b (l'approbation precedente datait d'une tete depassee).

Le carnet Search-02-Uninformed-CSharp.ipynb est cellule pour cellule identique a celui que j'avais approuve : 49 cellules, 0 source modifiee, 0 execution_count change, 0 sortie modifiee, 0 erreur. L'ecart est la reprise de base (main a bouge entre-temps) plus les deux fichiers de temoin de parite scripts/notebook_tools/twin_pairs.d/search-02-uninformed*.

Les mentions PR #22681 dans les markdown sont le credit de la contribution etudiante (credit par numero de PR, conformement a la regle de confidentialite) — ce ne sont pas des recits de revue.

Le merge est fait par ai-01 (Q131).

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 27, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants