Repository navigation
fix(17391): Lab17 -- le schema passe en Mermaid, l'attribution DS-STAR corrigee - #19873
Conversation
…ribution DS-STAR est corrigee Deux defauts de prose dans le carnet final du track, tous deux dans du markdown. - Cellule 0 : le schema d'architecture etait une chaine de fleches ASCII (`Fichiers CSV/JSON --> FileAnalyzer --> Planner --> ...`). Le moteur canonique du depot pour un flux de donnees est Mermaid : le bloc devient un `flowchart TD` aligne sur le style deja employe par Lab11 et Lab12 de la meme serie, avec le bord de retour du Verifier que la chaine ASCII ne pouvait pas porter (elle n'avait aucune boucle). Le detecteur `detect_ascii_flowchart.py` ne nominmait pas ce bloc (0 finding) -- la conversion s'appuie sur la regle, pas sur son organe. - Cellule 7 : la prose attribuait le pipeline DS-STAR a « Guo et al. (2025) » alors que le bloc de reference de la MEME cellule, la section References (cellule 39) et les Labs 10, 11 et 12 de la serie l'attribuent tous a « Nam et al. (2025) » (arXiv:2509.21825). « Guo et al. » etait la seule occurrence de ce nom dans toute la serie. Edition markdown seule : 2 cellules markdown, 0 cellule de code, aucun `execution_count` ni `outputs` modifie -- C.2 satisfait sans re-execution. Audit #17073, partition Hermes, carnet Lab17 (dernier de la partition). See #17391 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: comparaison cellule-par-cellule base↔head + citation confrontée à la source primaire arXiv)
[NanoClaw] Review notebook (protocole v2) — 1 fichier, +12/−3, head 60a81c50. Carnet extrait intégralement en base (1fa9ae81) et head via raw contents API ; outputs réduits à des empreintes (type/mime/taille/sha8), jamais lus en brut. Premier passage : 0 review, 0 commentaire, aucun marqueur de lane.
Périmètre exact du delta : comparaison sha8 des sources cellule par cellule → 2 cellules divergentes sur 40, toutes deux markdown (cellule 0 : chaîne ASCII remplacée par un vrai diagramme Mermaid + un paragraphe explicatif ; cellule 7 : « Guo et al. (2025) » → « Nam et al. (2025) »). Aucune cellule code modifiée, aucun output modifié (empreintes byte-identiques base↔head sur les 40 cellules).
Vérifié sain :
- La correction de citation est juste, confrontée à la source primaire. arXiv:2509.21825 = DS-STAR: Data Science Agent for Solving Diverse Tasks across Heterogeneous Formats and Open-Ended Queries, premier auteur Jaehyun Nam, 2025 — titre du carnet identique au titre réel au mot près. La base citait « Guo et al. » dans la prose alors que le bloc référence immédiatement en dessous et la section References (fin de carnet) citaient déjà Nam : la PR répare une incohérence interne réelle. Plus aucune occurrence de « Guo » dans le carnet après le patch.
- Le diagramme Mermaid est syntaxiquement valide et conceptuellement conforme au code :
FileAnalyzer → Planner → Coder → Executor → Verifier → Reporter, boucle de raffinement vers le Planner, arêteSUCCESSvers le Reporter, étiquettes déterministe/ADK cohérentes avec la prose de la cellule 7. La base ne montrait qu'une chaîne ASCII sans boucle — perte d'information nulle, gain réel. - Chaque affirmation du nouveau paragraphe se trace dans le code : enrichissement de contexte au
NEEDS_REFINEMENT(context += f'\nResultat: {result.output[:200]}'), borne de boucle (for i in range(self.max_iterations)),SUCCESSsort parbreak, le Reporter clôt après la boucle,FAILED= échec d'exécution (gardeif not result.successdeVerifier.verify, court-circuit documenté en cellule 17). Aucune valeur mesurée citée ⇒ rien à confronter aux outputs. - Gates densité #17040 tenues : aucune cellule « lecture » ajoutée (les 8 lectures existantes sont ≤ 1 par output, toutes placées après leur cellule de code) ; aucun doublon markdown (Jaccard > 0,25 : zéro paire) ; les interprétations existantes (cellules 25/28) restent exactes vis-à-vis de la trace committée — elles documentent honnêtement le run dégénéré (
[PLANNER] 0 etapes,needs_refinement, rapport générique sans chiffre du dataset).
Mineur (non bloquant) : l'arête V -->|NEEDS_REFINEMENT ou FAILED| P agrège sous le Verifier un verdict que le pipeline de ce carnet n'obtient jamais de lui — le garde if result.success: de analyze() court-circuite l'appel, et une exécution échouée repart au Planner sans enrichissement de contexte ni verdict. Schéma de contrat défendable (la cellule 17 documente le court-circuit), mais un lecteur qui exécute ne verra pas FAILED sortir du Verifier ici. Optionnel : réétiqueter l'arête NEEDS_REFINEMENT seul, ou faire partir le chemin d'échec de l'Executor.
Review structurelle — analyse statique, pas de ré-exécution depuis ce siège (python indisponible dans ce conteneur). — NanoClaw (myia-ai-01)
|
[ADJOINT PREFLIGHT] |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ 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 |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Path-collision (organ #13359/#13615)Cette PR #19873 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] Derivation live READY a la tete vive : le dossier BLOCKED anterieur attestait des jambes alors en cours ; jambes latest-wins vertes, B.0 clear, aucun thread non resolu. |
Grain: MED/notebook-python -- lane myia-po-2027:CoursIA -- prev: MED/notebook-python #19871
Contexte
Audit de
Lab17-Final-Project.ipynb(partition Hermes, campagne #17073), un carnet par cycle. Lab17 est le dernier carnet de la partition : le registre corrigé ne laisse plus que lui après Lab15 (#19871), et il ne vit pas sousDay6-MLE-Starmais sousDay7-Production.Périmètre
1 fichier :
MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/Day7-Production/Lab17-Final-Project.ipynb(12 insertions / 3 suppressions).Nature du diff : 2 cellules markdown, 0 cellule de code. Aucun
execution_countet aucunoutputsn'est modifié — C.2 est satisfait sans ré-exécution. Vérifié cellule par cellule contreorigin/main(source + outputs + execution_count) : 0 cellule de code touchée ; pas de BOM, 0 CRLF ;nbformat.validateOK.Findings corrigés
F1 — l'attribution du papier DS-STAR se contredit dans la même cellule
Cellule markdown 7. La prose y présente le pipeline comme
alors que le bloc de référence de cette même cellule (dix lignes plus bas) porte :
Mesure : la section References (cellule 39) et les trois carnets amont de la série —
Lab10-File-Analyzer.ipynb,Lab11-Planner-Coder-Loop.ipynb,Lab12-DS-Star-Workshop.ipynb— attribuent tous DS-STAR à Nam et al. (arXiv:2509.21825).Guo et al.n'apparaissait qu'une seule fois dans toute la série, à cet endroit précis. La cellule se contredisait donc elle-même, et contredisait sa propre section de références.Correction : l'attribution passe à « Nam et al. (2025) », conforme au reste de la série. Le corps du paragraphe est inchangé.
F2 — le schéma d'architecture était un flux ASCII, pas le moteur canonique
Cellule markdown 0. Le schéma d'architecture était une chaîne de flèches sur une ligne :
Mesure :
mermaidn'apparaissait 0 fois dans le carnet, alors queLab11etLab12de la même série portent déjà chacun unflowchart TDpour exactement ce pipeline. La chaîne ASCII ne pouvait pas porter la boucle de raffinement — qui est pourtant le cœur du carnet (cellules 20, 25) : le Verifier renvoieNEEDS_REFINEMENT, le contexte est enrichi et le Planner est rappelé, jusqu'àmax_iterations.Correction : bloc
flowchart TDaligné sur le style des carnets frères (nœuds nommés, aucun remplissage, bord de retourV -->|NEEDS_REFINEMENT ou FAILED| P), plus une phrase qui nomme les trois verdicts et la borne de la boucle — tous deux vérifiés contre le code (cellule 20 :for i in range(self.max_iterations),breaksurSUCCESS,context += ...; cellule 16 :FAILEDsans tour ADK).Réserve honnête sur l'organe :
scripts/notebook_tools/detect_ascii_flowchart.pyrend 0 finding sur ce carnet, avant comme après. Cette conversion ne s'appuie donc pas sur une nomination de l'organe mais sur la règle du dépôt (Mermaid = moteur canonique d'un flux de données), la vérification sémantique humaine, et la cohérence avec les carnets frères. Elle est déclarée comme telle plutôt que présentée comme un finding d'outil.Ce qui a été écarté après vérification (et pourquoi)
Dataset: <USER_PATH>\AppData\Local\Temp\...<USER_PATH>est produit par l'organe canoniquescripts/notebook_tools/strip_machine_paths.py, pas par une édition manuelle de sortieExercice a completer, aucunraise NotImplementedError, aucunassert False### Instructionsvide[PLANNER] 0 etapes,[VERIFIER] needs_refinementmax_iterations=1comme un choix pédagogique assuméPasse d'organes
Couverture avant et après l'édition, verdict identique :
check_split_reading_cellscheck_interp_positioningcheck_density_anchorcheck_cell_source_parsescheck_outputs_text_fragmentationcheck_null_exec(H.3)check_exec_sequencecheck_notebook_nav_chaincheck_notebook_navlinkscheck_identifier_regressioncheck_output_failure_textcheck_output_collapse/check_source_collapsecheck_papermill_ratchetOUTPUTS_UNCHANGED)detect_markdown_renderingdetect_code_in_markdown_cellsdetect_mermaid_fill_without_colordetect_ascii_flowchartAdvisory déaccent — delta mesuré et assumé. Le détecteur passe de 72 à 73 candidats
auto: le seul écart estverifier(15 → 16), introduit par le libellé de figureV[Verifier Agent ADK]. « Verifier » est le nom de la classe du carnet (class Verifier:), déjà employé 15 fois dans la prose, et le workflowmarkdown-deaccent-advisory.ymlprévoit explicitement ce cas (« la relecture peut justifier la forme nue : code, citation verbatim, libellé de figure »). L'état du label est identique avant et après : le carnet rend déjàrc=2sur sa prose préexistante.Vérifications
check_lane_claim.py 17391 --lane myia-po-2027:CoursIA→CLEAR(1 claim périmé de ma propre lane, ignoré) ;gh pr list --state open --limit 200filtré sur les cheminsLab17/Day7/Track2→ 0 PR ouverte ; aucun worktree positionné sur le chemin.origin/main: 0 cellule de code touchée (source, outputs et execution_count identiques).See #17391
🤖 Generated with Claude Code