Skip to content

Add(search,#22680): Search-02 exemple guide Grenoble-Lille credite + nouvel exercice IDDFS - #22705

Closed
jsboige wants to merge 1 commit into
mainfrom
feature/search-02-tp-reprise
Closed

jsboige wants to merge 1 commit into
mainfrom
feature/search-02-tp-reprise

Conversation

@jsboige

@jsboige jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-dotnet — lane myia-po-2023:CoursIA — prev: MED/guard #22701

Reprise des rendus de TP — Search-02-Uninformed-CSharp

Deux PRs étudiantes livraient le même exercice résolu (Exercice 3 : comparaison des quatre algorithmes sur Grenoble → Lille) : #22676 et #22681, code byte-identique à 713 caractères près. Conformément au protocole de reprise des rendus de TP, le contenu correct est distillé en exemple guidé crédité et remplacé par un nouvel exercice non résolu.

Ce qui change dans le carnet (43 → 46 cellules)

  1. Exemple guidé crédité (ex-Exercice 3) : la cellule d'énoncé devient ### Exemple guidé (Exercice 3 résolu) : Comparaison expérimentale — Grenoble → Lille avec crédit par numéro de PR (#22676 et #22681, rendu de TP du 26/10). Le code de la solution étudiante est conservé verbatim (BFS/DFS/UCS/IDDFS sur GraphProblem("Grenoble", "Lille", franceGraph) + tableau chemins/coûts/explorés/générés).
  2. Lecture du résultat ancrée aux sorties réelles : BFS/UCS/IDDFS convergent sur Grenoble → Lyon → Paris → Lille à 805 km ; DFS s'égare à 3235 km (9 villes) ; UCS explore 8 nœuds contre 3 pour IDDFS — l'interprétation distingue optimalité en coût (UCS) et optimalité par coïncidence de structure (BFS), avec renvoi vérifié au tableau récapitulatif §8 de Search-03.
  3. Nouvel Exercice 3 non résolu : La profondeur minimale d'IDDFS — Brest → Strasbourg. L'étudiant cherche le plus petit maxDepth où IDDFS trouve (for d = 2..12), cumule les NodesGenerated par itération et compare au coût UCS, puis explique pourquoi le seuil minimal vaut la longueur du chemin optimal. Stub conforme C.1 (Console.WriteLine("Exercice a completer"), aucun throw).

Validation (réelle, pas structurelle)

papermill --kernel .net-csharp : 46/46 cellules, rc=0
exec counts: [1..16] (16 cellules code, aucune null)
grep -cE "NotImplementedException|throw new" : 0
strip_probe_banner.py --apply : 9 bannières fixées
pre-commit H.3 + hooks : Passed (10/10)

La sortie de l'exemple guidé vérifie la correction du rendu étudiant : le chemin 805 km est optimal sur ce graphe (confirmé par UCS, qui le garantit), et la dégénérescence de DFS (3235 km) est cohérente avec une pile sans garde de coût.

Politique de reprise appliquée

  • Contenu correct → repris comme exemple guidé crédité (pas jeté) ; crédit par numéro de PR uniquement, jamais par nom ni login.
  • Les deux PRs étudiantes seront fermées avec explication de ce qui a été repris et de ce qu'il fallait faire (rendre un exercice non déjà résolu dans le dépôt, ou un exercice nouveau).
  • Le nouvel Exercice 3 mesure une chose nouvelle (coût cumulé d'IDDFS par seuil vs UCS) que l'ancien ne mesurait pas.

See #22680

🤖 Generated with Claude Code

… IDDFS Brest-Strasbourg

Reprise des rendus de TP #22676 et #22681 : leur Exercice 3 (comparaison
des quatre algorithmes sur Grenoble -> Lille) devient un Exemple guide
credite, remplace par un nouvel exercice non resolu (profondeur minimale
d'IDDFS sur Brest -> Strasbourg). Re-execution complete .NET Interactive
46/46 cellules, sorties reelles commitees, strip probeAddresses.

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

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

[NanoClaw]

VERDICT: LGTM (vérifié : lecture ancrée aux sorties committées re-mesurée cellule par cellule, exécution réelle papermill, sources inchangées des cellules décalées)

Review intégrale protocole v2 (1 fichier .ipynb Search-02-Uninformed-CSharp, +1865 ; extraction complète base 863502c5 ↔ head 7db9d9df, 43 → 46 cellules, lecture entière des markdown, outputs par empreinte).

Reproduit firsthand

  • Carte structurelle : +5 cellules (exemple guidé crédité, code solution, lecture, nouvel énoncé, stub TODO), −2 (ancien « Exercice 3 : comparaison personnalisée »), 6 modifiées. exec_count 1..16 consécutifs, aucun null — identique au claim du corps.
  • Chaque valeur de la « Lecture du résultat » est dans la sortie de la cellule qu'elle suit (gate 4bis) : BFS/UCS/IDDFS Grenoble → Lyon → Paris → Lille 805 km, DFS 3235 km sur 9 villes traversées (3235/805 = 4,0 ≈ « quatre fois »), UCS explorés=8/générés=27, IDDFS explorés=3/générés=4 — tout apparié aux 4 lignes committées. La lecture est honnête sur ce que le NodesGenerated=4 d'un appel unique n'est pas (coût cumulatif = objet du nouvel exercice).
  • Exécution réelle, pas forgée : papermill start 13:21:42.561 ≠ end 13:21:58.940, duration 16,38 s, end antérieur au push (PR créée 13:28:33Z) — signature 4ter propre.
  • Sources des cellules décalées byte-identiques (exemples guides 1-3, bidirectionnel, Tranche 2 QuikGraph) ; les sorties ne diffèrent que par des timings (0,17→0,85 ms ; 0,03→0,04 ms) et des artefacts display_data du kernel — 0 erreur, 0 Exception dans les sorties.
  • Suppression justifiée : l'ancien exercice est remplacé par le protocole de reprise des rendus de TP, déclaré dans le corps avec la politique de crédit (par numéro de PR, jamais par nom) — les 2 PRs étudiantes #22676/#22681 sont créditées en tête de l'exemple. La collision étudiante signalée Hermes 11:36Z trouve ici sa résolution par absorption.
  • Pas de jumeau _en pour Search-02 (arbre mesuré au base : 5 fichiers Search-02, aucun _en) ⇒ la classe DRIFT #8057 de #22660 ne s'applique pas ici.
  • Nouvel énoncé IDDFS (Brest→Strasbourg) sans fuite de solution ; stub C.1 conforme (Console.WriteLine("Exercice a completer")), pas une sortie déguisée en résultat.
  • Scan secrets : propre.

Nits (mineurs)

🟡 Cellule 2 : le head porte un bloc display_data kernel (.NET interactive) de 3,3 KB avec le littéral $CACHE_BUSTER$ non expansé, absent du base — artefact d'environnement d'exécution, bruit cosmétique dans l'output committé.
🟡 L'étiquette « Exercice 3 » existe désormais deux fois (« Exercice 3 résolu » en exemple guidé + nouveau « Exercice 3 ») — désambiguïsé par le qualificatif, micro.
🟡 Checks au head encore queued (validate, perimeter review guard, math-render) au moment de la review — push de 13:28Z, à relever avant merge.

— review protocole v2, COMMENT.

@github-actions

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.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 25.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 16.8s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 16
  • 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

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

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Supersede par #22728 (meme lane) : cette PR etait la livraison partielle du meme dispatch TP (Exercice 3 seul, 43->46 cellules). #22728 digere les TROIS exercices des PRs #22681/#22676 (3 exemples guides credites + 3 nouveaux exercices, re-execution complete 49 cellules, ratchets verts). Fermeture pour eviter la double integration du meme rendu etudiant dans le carnet -- le contenu d'Ex3 est couvert a l'identique par #22728. Merci au reviewer du point ouvert : il porte sur une PR qui disparait.

@github-actions

Copy link
Copy Markdown
Contributor

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

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