Skip to content

fix(17391): Lab17 -- le schema passe en Mermaid, l'attribution DS-STAR corrigee - #19873

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17391-lab17-audit
Oct 8, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/17391-lab17-audit

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner

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 sous Day6-MLE-Star mais sous Day7-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_count et aucun outputs n'est modifié — C.2 est satisfait sans ré-exécution. Vérifié cellule par cellule contre origin/main (source + outputs + execution_count) : 0 cellule de code touchée ; pas de BOM, 0 CRLF ; nbformat.validate OK.

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

« le pipeline DS-STAR complet (FileAnalyzer -> Planner -> Coder -> Executor -> Verifier -> Reporter) tel que défini par Guo et al. (2025) »

alors que le bloc de référence de cette même cellule (dix lignes plus bas) porte :

« Reference : Nam, J., et al. (2025). DS-STAR: Data Science Agent for Solving Diverse Tasks across Heterogeneous Formats and Open-Ended Queries. arXiv:2509.21825 »

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 :

Fichiers CSV/JSON --> FileAnalyzer --> Planner --> Coder --> Executor --> Verifier --> Reporter

Mesure : mermaid n'apparaissait 0 fois dans le carnet, alors que Lab11 et Lab12 de la même série portent déjà chacun un flowchart TD pour 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 renvoie NEEDS_REFINEMENT, le contexte est enrichi et le Planner est rappelé, jusqu'à max_iterations.

Correction : bloc flowchart TD aligné sur le style des carnets frères (nœuds nommés, aucun remplissage, bord de retour V -->|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), break sur SUCCESS, context += ... ; cellule 16 : FAILED sans tour ADK).

Réserve honnête sur l'organe : scripts/notebook_tools/detect_ascii_flowchart.py rend 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)

Candidat Verdict Mesure
Cellule 22 — sortie Dataset: <USER_PATH>\AppData\Local\Temp\... pas un défaut <USER_PATH> est produit par l'organe canonique scripts/notebook_tools/strip_machine_paths.py, pas par une édition manuelle de sortie
Cellules 33/35/37 — stubs d'exercice non complétés conforme C.1 impriment Exercice a completer, aucun raise NotImplementedError, aucun assert False
Cellule 32 — ### Instructions vide idiome de série présent à l'identique dans Lab12, Lab14, Lab15, Lab16
Run de cellule 24 — [PLANNER] 0 etapes, [VERIFIER] needs_refinement documenté, pas un défaut l'interprétation de la cellule 25 décrit exactement ce comportement et sa cause ; la cellule 23 annonce max_iterations=1 comme un choix pédagogique assumé

Passe d'organes

Couverture avant et après l'édition, verdict identique :

Organe Verdict
check_split_reading_cells clean
check_interp_positioning 0 finding
check_density_anchor OK
check_cell_source_parses 0 finding
check_outputs_text_fragmentation 0 finding
check_null_exec (H.3) OK
check_exec_sequence 0 gap / 0 duplicate / 0 unordered
check_notebook_nav_chain OK
check_notebook_navlinks 0 lien cassé
check_identifier_regression OK
check_output_failure_text 0 régressé
check_output_collapse / check_source_collapse 0 flaggé
check_papermill_ratchet 0 régression (OUTPUTS_UNCHANGED)
detect_markdown_rendering 0 violation
detect_code_in_markdown_cells 0 nouvelle violation
detect_mermaid_fill_without_color 0 finding
detect_ascii_flowchart 0 finding (avant / après)

Advisory déaccent — delta mesuré et assumé. Le détecteur passe de 72 à 73 candidats auto : le seul écart est verifier (15 → 16), introduit par le libellé de figure V[Verifier Agent ADK]. « Verifier » est le nom de la classe du carnet (class Verifier:), déjà employé 15 fois dans la prose, et le workflow markdown-deaccent-advisory.yml pré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=2 sur sa prose préexistante.

Vérifications

  • Garde de collision (L898) avant édition : 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 200 filtré sur les chemins Lab17/Day7/Track2 → 0 PR ouverte ; aucun worktree positionné sur le chemin.
  • Le carnet n'est pas dans le registre des paires jumeaux : l'édition ne re-dérive aucune paire, aucune attestation n'est due.
  • Diff vérifié cellule par cellule contre origin/main : 0 cellule de code touchée (source, outputs et execution_count identiques).

See #17391

🤖 Generated with Claude Code

…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 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é: 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ête SUCCESS vers 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)), SUCCESS sort par break, le Reporter clôt après la boucle, FAILED = échec d'exécution (garde if not result.success de Verifier.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)

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19873
head: 60a81c5
complete: true
body: read
comments-reviewed: 0
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: ca7400a675d90d44850b6f15ed3a99b24f843da77b98c803ff02c72ba04c140e
diff-files: 1
diff-additions: 12
diff-deletions: 3
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 19873
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Oct 8, 2026

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

github-actions Bot commented Oct 8, 2026

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

github-actions Bot commented Oct 8, 2026

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

github-actions Bot commented Oct 8, 2026

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 github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 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 3.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.8s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.2s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 17.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.2s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 12.0s

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

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 17
  • 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 8, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19873 (fix(17391): Lab17 -- le schema passe en Mermaid, l'attribution DS-STAR corrigee) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA
pr: 19873
head: 60a81c5
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3caac8aeb5277291a1a194acf66f04a7fc9e6df425cbfce43dcef2a81904b0e8
diff-files: 1
diff-additions: 12
diff-deletions: 3
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
supersedes: 1
supersedes-why: le dossier BLOCKED precedent attestait un etat de jambes ou de levees depasse ; a la meme tete, la derivation live rend checks verts, B.0 clear
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19873
organ-rc: 0
[/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.

@myia-ai-01
myia-ai-01 merged commit daf0629 into main Oct 8, 2026
97 of 98 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants