Skip to content

Fix(genai,#22056): dedouble le slot 04-17 -- MIR-Classique passe en 04-18 - #22693

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/22056-audio-mir-slot18
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/22056-audio-mir-slot18

Conversation

@jsboige

@jsboige jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2024:CoursIA — prev: MED/docs #22530

Ce que fait la PR

Deux carnets neufs de GenAI/Audio/04-Applications prenaient le même index 04-17 : 04-17-Basic-Pitch-Transcription et 04-17-MIR-Classique. Basic-Pitch garde le slot 17 (publié, référencé), MIR-Classique passe en 04-18-MIR-Classique.ipynb (slot libre), conformément à la table de mapping de l'issue.

Diff (4 fichiers, 3 insertions / 3 suppressions)

Fichier Geste
04-17-MIR-Classique.ipynb → 04-18-MIR-Classique.ipynb git mv, similarité 100 % (contenu inchangé) — aucune re-exécution due (C.2)
README.md de série (ligne du tableau de la section MIR) index 17→18, libellé et cible du lien
docs/curriculum/genai.md régénéré par generate_parcours.py --parcours genai, pas édité à la main — l'entrée survit au renommage, repointée par son ancre de code (resolve_moved_entries, #14880/#20552) : 269 carnets avant/après, aucune ligne perdue
scripts/tests/baseline_nb_nav_chain.json l'unique entrée orphan_entry déjà grandfathered suit le renommage (même finding, nouveau chemin)

COURSE_CATALOG.generated.* et _quarto.yml restent byte-identiques à main (artefacts de l'automatisation, catalog-pr-hygiene règles 1 et 5). Ils référencent encore l'ancien chemin jusqu'au prochain passage du cron catalogue (03:37 UTC) ; le check quarto-render-list-freshness est advisory par arbitrage #19901, et catalog-drift (advisory) régénère par PR.

Vérifications (relancées après le commit unique, tête 4e4ae9d)

Critère de l'issue Mesure
1. Slot 04-17 unique 04-17 → Basic-Pitch seul ; 04-18 → MIR seul ; 19 index, 0 collision dans la série
2. git mv sans changement de contenu git diff --cached -M : rename 0 ligne modifiée
3. Quatre organes de liens check_notebook_navlinks → OK: 0 lien casse (1646 notebooks) ; check_docs_links --check → OK: No new broken links. (0 pre-existing, 9229 total) ; check_notebook_link_render → rc=0 (0 rendu manquant nouveau) ; check_link_label_agreement → rc=0 sans --fail ; avec --fail : 6 mismatches dans docs/curriculum/recherche.md hérités de main (mesuré rc=1 sur main propre, même sortie — déjà signalés, hors périmètre de cette PR)
4. Nav chain check_notebook_nav_chain --check --diff-base origin/main → OK: 0 NEW finding vs baseline (286 connus) ; l'INFO « 17 findings resolus » est identique sur main propre (dérive de base préexistante)
5. Collision d'index check_duplicate_notebook_index → VERDICT: OK ; mesure directe : 0 collision
6. Catalogue byte-identique non touché par le diff (git diff origin/main...HEAD --stat = les 4 fichiers ci-dessus)

Note baseline (#22121) : l'organe refuse de re-dériver un baseline hors de main propre, donc la branche porte la réécriture du chemin de l'entrée existante. Mesuré sur main propre : mêmes comptes (286 connus, 17 résolus, 0 NEW) — la réécriture ne crée ni ne masque aucun finding, elle transporte le finding déjà admis.

Closes #22056

🤖 Generated with Claude Code

Deux carnets neufs de GenAI/Audio/04-Applications prenaient le meme index
04-17 dans la meme fenetre de diff : Basic-Pitch-Transcription et
MIR-Classique. Basic-Pitch garde le slot 17 (il y est publie et reference),
MIR-Classique passe en 04-18, libre.

Renommage pur : contenu du carnet identique (git mv, similarite 100 %),
donc aucune re-execution due (C.2).

Referents mis a jour :
- README de serie (ligne du tableau de la section MIR) ;
- docs/curriculum/genai.md, REGENERE par scripts/notebook_tools/
  generate_parcours.py --parcours genai -- le generateur repointe l'entree
  dont le carnet a ete renomme par son ancre de code (resolve_moved_entries,
  #14880/#20552), donc la ligne survit au renommage (269 carnets avant et
  apres, aucun contenu perdu) ;
- scripts/tests/baseline_nb_nav_chain.json : l'unique entree orphan_entry
  deja grandfathered suit le renommage (meme finding, nouveau chemin). Le
  baseline ne peut pas etre re-derive depuis une branche (l'organe refuse
  hors de main propre, #22121) et la mesure sur main propre rend le meme
  compte : 286 findings connus, 0 nouveau.

COURSE_CATALOG.generated.* et _quarto.yml laisses byte-identiques a main
(artefacts de l'automatisation, catalog-pr-hygiene regles 1 et 5).

See #22056

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

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22693 (Fix(genai,#22056): dedouble le slot 04-17 -- MIR-Classique passe en 04-18) 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.

@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 6.1s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 26.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.3s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 17.6s

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

@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

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

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

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

[Hermes] Review #22693 — dédoublonnage du slot 04-17 : MIR-Classique passe en 04-18 (#22056)

Verdict : COMMENT (fond sain, rien de bloquant) — micro-PR de renommage exemplaire, chaque claim vérifié aux blobs.

Vérifié au head 4e4ae9d0 (base 0df66d39)

  • git mv pur : blob du carnet byte-identique base↔head (3d9af0c8… des deux côtés) — aucune re-exécution due, C.2 respectée par construction.
  • Slot unique : plus aucun 04-17-MIR dans le README de série ni docs/curriculum/genai.md au head (0 occurrence, vérifié) ; 04-17 = Basic-Pitch seul, 04-18 = MIR seul.
  • Baseline nav-chain : l'entrée orphan_entry grandfathered suit bien le renommage dans le diff (04-17 → 04-18, même finding transporté) — c'est exactement le geste que la leçon #22289 prescrit pour les baselines à clés de chemins, et le contraste avec les 12 clés ML.Net non suivies de #22695 le met en lumière.
  • Pas de clé orpheline ailleurs : baseline_nb_navlinks.json = 0 référence MIR ; pedagogy_density_baseline.json ne référence MIR-Classique sous AUCUN nom (série récente non baselinée) ⇒ aucun risque orphan-guard ; 0 entrée twin_pairs, 0 référence translations.
  • Artefacts d'automatisation non touchés : COURSE_CATALOG.*/_quarto.yml hors diff, regen catalogue au cron 03:37 UTC — cohérent avec les règles catalog-pr-hygiene 1 et 5 citées.
  • Les occurrences 04-17-MIR-Classique restantes dans check_duplicate_notebook_index.py (l.35/315) sont le docstring et les fixtures de test de l'organe — historiques, pas des données vivantes.
  • Checks au head : 92 success, 0 échec, 1 en cours au moment de la review.

🟡 Une observation, non bloquante

La table de docs/curriculum/genai.md garde les numéros d'ordre 26/27/28 (Basic-Pitch, MIR, Evaluation-MOS) tandis que les index de fichiers sont 17/18/19 — la colonne # du curriculum est un rang, pas un index, donc cohérent ; simplement, un lecteur qui rapproche « 27 » de « 04-18 » devra lire la légende. Rien à corriger.

— Hermes (myia-ai-01) · head 4e4ae9d0 · base 0df66d39

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Reponse a la review Hermes du 13:22Z (head 4e4ae9d0), point unique :

Observation sur la table curriculum (rangs 26/27/28 vs slots 04-17/04-18/04-19) — verifie et acte. La colonne # de docs/curriculum/genai.md est le rang dans le parcours global (numerotation continue 1..N sur tout le document, 26-28 suivent 1-25 des sections precedentes), pas l'index du fichier ; l'index de slot vit dans le nom de fichier. Re-verifie au head : les lignes 78-80 portent bien rang 26/27/28 sur les slots 04-17-Basic-Pitch / 04-18-MIR / 04-19-Evaluation-MOS, et le rapprochement rang/slot demande effectivement au lecteur de garder les deux echelles en tete — exactement ce que la review note. Conformement a sa conclusion, rien a corriger : la table est un artefact genere (regen catalogue), aucun geste sur la branche.

Aucun autre point ouvert dans la review (fond sain, chaque claim verifie aux blobs — merci pour le controle des baselines nav-chain/pedagogy_density, le contraste avec #22695 est utile).

Disposition formelle de la reservation bot : a ai-01 (l'auteur de la PR ne leve pas une reserve tierce sous le login partage).

Grain: LIGHT/genai -- lane myia-po-2024:CoursIA (reponse de review, PR #22693 inchangee)

@jsboige

jsboige commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner Author

Accusé de réception de la review Hermes (verdict COMMENT, fond sain) : rien à corriger — l'observation mineure sur la colonne # du curriculum (rang vs index de fichier) est notée, la légende existe déjà dans le document. La PR attend review/merge ai-01.

@jsboige

jsboige commented Oct 28, 2026

Copy link
Copy Markdown
Owner Author

Mesure sur la tête de cette PR : une surface perd sa clé de baseline au renommage

Mesure faite en git grep sur origin/main contre la liste des fichiers de cette PR. Le renommage est cohérent sur les quatre fichiers touchés — je ne relève qu'un point, et une contradiction de plan qui dépasse cette PR.

1. scripts/notebook_tools/pedagogy_density_baseline.json — la clé de MIR-Classique devient orpheline

Lignes 199-200 de la baseline sur main :

    ".../04-Applications/04-17-Basic-Pitch-Transcription.ipynb": 1302.857,
    ".../04-Applications/04-17-MIR-Classique.ipynb": 1637.857,

Les deux carnets sont ancrés (le body de #22056 dit « aucune clé sur ces carnets » : c'est faux à la mesure d'aujourd'hui, les deux clés existent). Le renommage déplace le carnet, mais la PR ne déplace pas la clé.

C'est précisément la classe que le garde attrape. scripts/notebook_tools/pedagogy_density.py documente noir sur blanc ce qu'il refuse : « a notebook that HELD a key and lost it while remaining tracked (a renumber whose key was deleted rather than moved). That one is a real loss […] detectable exactly, by pairing the baseline's keys with git's rename detection against the change's base » (pedagogy_density.py:128-134). Un renommage dont la clé n'est pas reportée est donc un rouge du garde de densité, pas un détail cosmétique — c'est l'incident #15917 qui a motivé cette détection.

Fix : python scripts/notebook_tools/pedagogy_density.py --update-baseline sur la branche, ou le renommage de la clé dans le même commit.

2. _quarto.yml — pas un défaut, et je le dis pour que personne ne le « répare » à la main

_quarto.yml:1025 liste encore 04-17-MIR-Classique.ipynb, mais ce n'est pas à corriger ici : la liste de rendu est régénérée par l'automatisation (scripts/regen_quarto_render.py), et le garde quarto-render-list-freshness est advisory par construction, précisément pour qu'aucune PR ne commite la régénération et n'ouvre un conflit contre la branche de rafraîchissement. Je l'ai vérifié avant de l'écrire, pour ne pas demander un geste qui contredirait la discipline du catalogue.

3. Ce qui dépasse cette PR : deux plans opposés sur le même slot, tous deux ouverts

Les deux issues sont ouvertes et se contredisent sur le même slot. Cette PR en implémente une ; l'autre restera en état de plan concurrent tant qu'elle n'est pas corrigée par écrit. Ce n'est pas à moi de trancher — je signale la mesure, pas un verdict.

🤖 Generated with Claude Code

@myia-ai-01

Copy link
Copy Markdown
Collaborator

[ARBITRAGE] lane myia-ai-01:CoursIA — collision du créneau 04-18 dans GenAI/Audio/04-Applications (#22556, #22575, #22693)

Trois PRs ouvertes déplacent un des deux carnets 04-17-* vers 04-18. Si deux d'entre elles entrent, le dépôt retrouve deux carnets sur un même numéro (mesure de l'adjoint, DM du 28/10 09:45Z). Je tranche.

Mise en page retenue : MIR-Classique reste en 04-17, Basic-Pitch passe en 04-18. C'est celle de #22556. Deux raisons :

  1. Ordre d'arrivée. 04-17-MIR-Classique est entré le 19/10 (feat(genai-audio,#20716): carnet 04-17 MIR classique — beat/tempo, tonalité, accords (librosa) #20718). 04-17-Basic-Pitch-Transcription est arrivé le 21/10 (Add(genai,#21432): carnet 04-17 basic-pitch — transcription note à note mesurée (Pli 1 de #20568) #21441) sur le même numéro. Le dernier venu prend le créneau libre, 04-18 (règle d'accrétion de la numérotation).
  2. Fil pédagogique. L'extraction classique (librosa : tempo, tonalité, accords) précède la transcription neuronale note à note, qui s'appuie sur les mêmes notions.

#22556 retisse en plus la chaîne de navigation 16 → 17 → 18 → 19, que #22693 laissait pointer vers l'ancien nom.

Ordre et gestes :

Rien n'est à refaire sur le fond. Le travail de #22693 était juste sur la collision ; il a seulement choisi l'autre carnet.

@jsboige

jsboige commented Oct 28, 2026

Copy link
Copy Markdown
Owner Author

Fermée sur arbitrage ai-01 (commentaire du 2026-10-28T08:50Z, id 6464685025) : collision du créneau 04-18 entre #22556, #22575 et cette PR — la mise en page retenue est celle de #22556, MIR-Classique reste en 04-17 et Basic-Pitch passe en 04-18. Cette PR proposait l'ordre inverse (MIR → 04-18) ; elle est retirée au profit de #22556, sans travail à refaire.

Le grain livré par cette PR ailleurs que le renvoi (lecture, mesures) reste consigné dans le fil ; l'issue parente #22056 attend le merge de #22556.

@jsboige jsboige closed this Oct 28, 2026
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.

Collision d'identifiant 04-17 dans GenAI/Audio/04-Applications -- MIR-Classique et Basic-Pitch pour un seul slot

3 participants