Skip to content

fix(sweep-15719): échapper les pipes des code spans — 10e_LLamaSharp (relais grain g1-genai) - #16184

Merged
clusterManager-Myia merged 1 commit into
mainfrom
wt/vibe-g1-genai-relay
Sep 15, 2026
Merged

clusterManager-Myia merged 1 commit into
mainfrom
wt/vibe-g1-genai-relay

Conversation

@jsboige

@jsboige jsboige commented Sep 14, 2026 •

Copy link
Copy Markdown
Owner

Résumé

Relais du résidu du grain Vibe g1-genai (sweep #15719, contrat scanner md-table).

Cette PR échappe les pipes nus (\|) des code spans en prose des cellules 19 et 21 de 10e_LLamaSharp_DotNet_BakeOff.ipynb. Diff chirurgical +5/−5 sur un seul fichier, aucune re-sérialisation du notebook.

Périmètre effectif — un fichier, et un seul

Fichier touché + −
MyIA.AI.Notebooks/GenAI/Texte/10e_LLamaSharp_DotNet_BakeOff.ipynb 5 5

Aucun autre fichier n'est modifié. La version précédente de ce body portait un tableau de six lignes mêlant fichiers inspectés et fichiers touchés : le garde perimeter l'a lu comme une assertion de périmètre contredisant la liste effective (gh pr view 16184 --json files, #11268), et il avait raison. Corrigé ici.

Effet mesuré : 4 findings → 0

Scan en place, au chemin réel, aux deux révisions (scan_md_table_syntax.py --json sur le seul fichier) :

Révision total détail
origin/main (981d38ac98) 4 NO_BLANK_BEFORE cell 18 L12 · NO_BLANK_AFTER cell 18 L13 · NO_BLANK_BEFORE cell 20 L12 · NO_BLANK_AFTER cell 20 L13
tête PR (375f54adb2) 0 —

Mécanisme, qui n'est pas évident et mérite d'être noté pour la suite du sweep : aucun de ces 4 findings n'est un CODE_SPAN_PIPE, et pourtant ce sont bien les deux pipes nus qui les causaient. La ligne de prose contenant `{"relu": float|None, ...}` était reconnue comme ligne de table, ce qui faisait flaguer ses voisines comme fusionnant avec un bloc de table fantôme. Échapper les pipes dissout la table fantôme et les 4 findings avec elle.

Conséquence de méthode : un finding CODE_SPAN_PIPE peut en masquer plusieurs autres en aval, et le compte brut du scanner sur-estime le nombre de causes distinctes. Ici, 2 échappements réparent 4 findings.

FINAL_RESIDUAL — le résidu, chiffré

Le contrat de #15719 fixe un plancher de 10 findings confirmés par fournée, avec une exception : « résidu final : moins de 10 défauts confirmés encore libres après re-scan frais et déconfliction ; le body chiffre le résidu ». Cette PR relève de cette exception, et voici la mesure qui l'établit.

Re-scan frais — origin/main 981d38ac98, scan_md_table_syntax.py --json MyIA.AI.Notebooks docs, 2576 fichiers, 0 erreur de parse :

Pathologie N
CODE_SPAN_PIPE 30
NO_BLANK_BEFORE 20
COL_MISMATCH 20
NO_BLANK_AFTER 7
ORPHAN_TABLE_ROW 5
NO_SEP 3
MATH_SPAN_PIPE 1
total 86 sur 46 fichiers

Le « 222 » du titre de #15719 est le compte brut d'origine, que le body de l'issue désavoue lui-même (« ce total brut mélange des défauts réels avec des faux positifs récurrents »). Aucun fichier du corpus ne porte ≥ 10 findings : une fournée conforme au plancher est nécessairement multi-fichiers, et aucun fichier seul ne peut l'atteindre.

Déconfliction du domaine GenAI — 12 findings / 6 fichiers avant cette PR, 8 après, dont 0 défaut confirmé libre :

Fichier Findings restants Statut
GenAI/Audio/README.md L96 1 COL_MISMATCH appartient à #16102 — la ligne fautive décrit 02-7-YuE2-Song-Generation, notebook que #16102 ajoute
GenAI/Audio/02-Advanced/README.md L28 1 COL_MISMATCH appartient à #16102 — même ligne, même cause
GenAI/FineTuning/FT-04-RLHF-DPO.ipynb cell 12 L20 1 ORPHAN_TABLE_ROW FP famille (3) — π*(y|x) : pipe de conditionnement mathématique en prose
.../03-assistant-pro/presentations/structure-presentation.md L41, L146 2 NO_SEP FP famille (4) — boîtes ASCII à traits verticaux
.../05-projets-avances/integration-outils/bonnes-pratiques.md L792-793, L838 2 NO_BLANK_*, 1 NO_SEP FP famille (2) — fences de code JavaScript lues comme pseudo-tables

Correction d'une affirmation fausse du body précédent : il tabulait les deux README Audio à « 0 / rien à faire ». C'était mesuré sur la base périmée du worktree de relais. Sur origin/main courant ils portent 1 COL_MISMATCH chacun — et ils ne sont pas à reprendre ici, puisqu'ils relèvent de #16102.

Les 6 findings FP ne se « réparent » pas dans les notebooks : #15719 exige qu'ils soient supprimés à la source du scanner par tests positifs/négatifs, pas par ajout de headers inventés. Ils sont donc hors du travail de fournée par construction.

Historique du relais

Le worktree CoursIA-vibe/g1-genai portait 4 commits sur une base périmée. Vérification byte-level :

  • c9c4ceb8b (SheetSage2 + structure-presentation) et 8cf9b3e7c (newline SheetSage2) : déjà dans main, contenu identique.
  • 42af9095b (10e_LLamaSharp) : jamais livré — cherry-piqué sur origin/main comme 375f54adb.

Relais effectué par l'executor po-2025 (lane Mistral Vibe, mandat budget user 10/09) ; PR reprise par myia-ai-01 faute de tag Grain: (PR orpheline).

See #15719

Grain: LIGHT/genai -- lane myia-ai-01:CoursIA -- prev: MED/tooling #16187

🤖 Generated with Claude Code

Corrige 4 défauts scan_md_table_syntax (NO_BLANK_BEFORE/AFTER) en échappant
les pipes nues dans des code spans inline : float|None -> float\|None,
MEME_SESSION\|INTERDITE. Les autres fichiers targetPath ont des NOOP justifiés
(faux positifs connus : prose mathématique, boîtes ASCII, || JS dans code).

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
@jsboige

jsboige commented Sep 14, 2026

Copy link
Copy Markdown
Owner Author

Concern: Encore une PR de l'épaisseur d'une feuille de papier à cigarettes. Est-ce que vraiment sur le geste déposé il n'y avait plus qu'un fichier à corriger?

@github-actions

Copy link
Copy Markdown
Contributor

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

@github-actions github-actions Bot added the variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Sep 14, 2026
@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

Grain tag obligatoire (#10045, bloquant).

Grain tag absent (no Grain: / in body).

Pour passer ce gate, le body doit porter en tete une ligne de la forme :

Grain: <DEEP|MED|LIGHT>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<GENRE> #<PR>

Le <genre> doit figurer dans l'enumeration §1 de variation-protocol.md (lean, qc, training, genai, notebook-python, notebook-dotnet, notebook-lean, slides, docs, guard, refactor, ledger, readme, test, tooling, research-code). Les 3 formes tolerées par l'extracteur : Grain: TIER/GENRE, **Grain:** TIER/GENRE, ## Grain + tag sur la ligne suivante. La lane doit suivre le format <machine>:<workspace> (cf. lane-claim-protocol.md).

@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 2.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 2.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 1.7s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 13.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.3s

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: 12
  • 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)

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Réponse mesurée, et la réponse est en deux morceaux : vous aviez raison, mais pas sur le diff — sur le body.

1. « Est-ce qu'il n'y avait plus qu'un fichier à corriger ? »

Dans le domaine GenAI : oui, effectivement. Dans le corpus : non, loin de là.

Re-scan frais sur origin/main 981d38ac98 (scan_md_table_syntax.py --json MyIA.AI.Notebooks docs, 2576 fichiers) :

N
findings restants, corpus entier 86 sur 46 fichiers
findings restants, domaine GenAI, avant cette PR 12 sur 6 fichiers
… après cette PR 8, dont 0 défaut confirmé libre
fichiers du corpus portant ≥ 10 findings 0

Les 8 restants en GenAI se répartissent ainsi : 2 (Audio/README.md L96, Audio/02-Advanced/README.md L28, deux COL_MISMATCH) appartiennent à #16102 — la ligne fautive décrit 02-7-YuE2-Song-Generation, le notebook que cette PR-là ajoute ; les 6 autres sont les faux positifs connus (pipe de conditionnement π*(y\|x) dans FT-04, boîtes ASCII de structure-presentation.md, fences JavaScript de bonnes-pratiques.md), que #15719 exige de tuer à la source du scanner par tests, jamais par ajout de headers inventés dans les fichiers.

Donc la minceur du diff n'était pas le défaut. Le « 222 » du titre de #15719 est d'ailleurs le compte brut d'origine, que le body de l'issue désavoue lui-même — il ne mesure plus l'état du dépôt depuis longtemps.

2. Ce qui était réellement fautif — et un garde l'avait dit

Le body. Il tabulait six fichiers pour un diff qui en touche un, en mêlant fichiers inspectés et fichiers touchés. Le garde perimeter a rendu exactement ce verdict, sept minutes après votre commentaire :

A perimeter assertion on this PR (body or review) contradicts the effective file list. Truth source: gh pr view 16184 --json files (#11268). Fix the assertion to enumerate the real files.

PR ouverte 16:24:46Z → votre Concern 16:26:13Z → garde rouge 16:33:07Z. Vous et l'organe avez vu la même chose.

Le body portait aussi une affirmation fausse : les deux README Audio y étaient donnés à « 0 / rien à faire ». C'était mesuré sur la base périmée du worktree de relais ; sur origin/main courant ils portent 1 COL_MISMATCH chacun.

3. Ce que j'ai vérifié en faveur de la PR

La PR annonçait « findings → 0 » sur son fichier. J'ai d'abord cru l'inverse : le scan corpus ne montrait aucun CODE_SPAN_PIPE sur ce notebook, alors que la PR prétend en échapper — ça ressemblait à une réparation de non-finding. Scan en place, aux deux révisions, avant d'écrire quoi que ce soit :

Révision findings
origin/main 981d38ac98 4 (NO_BLANK_BEFORE/NO_BLANK_AFTER, cellules 18 et 20)
tête PR 375f54adb2 0

L'annonce était juste, et le mécanisme mérite d'être retenu pour la suite du sweep : la ligne de prose contenant `{"relu": float|None, ...}` était lue comme ligne de table, ce qui faisait flaguer ses voisines comme fusionnant avec une table fantôme. Échapper 2 pipes dissout la table fantôme et 4 findings avec elle. Autrement dit, un CODE_SPAN_PIPE peut en masquer plusieurs autres en aval — le compte brut du scanner sur-estime le nombre de causes distinctes, ce qui est une raison de plus de ne pas piloter ce sweep au compteur.

4. Ce que j'ai corrigé

Body réécrit : périmètre effectif ramené au fichier réel, marqueur FINAL_RESIDUAL avec le résidu chiffré et déconflicté (l'exception prévue au contrat de #15719, que cette PR n'avait jamais invoquée), correction des deux README Audio, mesure 4 → 0 documentée, et Refs #15719 → See #15719 — Refs ferme l'issue parente à la fusion sur ce dépôt (incident #2211), ce qui aurait clos le sweep alors qu'il reste 86 findings.

Le tag Grain: manquait : la PR était orpheline, donc elle est à moi, pas à une lane. Je la porte. Les deux organes bloquants (tag_required, perimeter) sont relancés sur le body corrigé.

@github-actions github-actions Bot added variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) and removed variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) labels Sep 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Grain tag obligatoire (#10045, bloquant).

Grain tag absent (no Grain: / in body).

Pour passer ce gate, le body doit porter en tete une ligne de la forme :

Grain: <DEEP|MED|LIGHT>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<GENRE> #<PR>

Le <genre> doit figurer dans l'enumeration §1 de variation-protocol.md (lean, qc, training, genai, notebook-python, notebook-dotnet, notebook-lean, slides, docs, guard, refactor, ledger, readme, test, tooling, research-code). Les 3 formes tolerées par l'extracteur : Grain: TIER/GENRE, **Grain:** TIER/GENRE, ## Grain + tag sur la ligne suivante. La lane doit suivre le format <machine>:<workspace> (cf. lane-claim-protocol.md).

@github-actions github-actions Bot added variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) and removed variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) labels Sep 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA a deja consomme son budget LIGHT du jour (#16138 (merge a 2026-09-14T10:03:54Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-14) :

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.

@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

prev: genre mot-clé fermant (#10093) — LEVÉ (2026-09-14T19:36:04Z).

aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #16187

Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs Always-on guards de la PR.

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

Approval — exact head 375f54adb2a37fd873f07c8cb7b920030f0bc72a

I independently reread the complete PR body, all comments, reviews, inline comments and threads, the single commit, complete notebook diff, closing references, and latest occurrence of every exact-head check.

Verified:

  • the effective scope is one notebook and the diff is surgical: four prose-only pipe escapes plus the final newline, with no code-cell or output mutation;
  • the corrected body now matches the effective file list and documents the fresh in-place scan from four findings on the base to zero on this head;
  • the earlier grain-tag, perimeter, and prev: failures are historical body iterations; the latest Always-on guards, perimeter guard, and PR gate are successful after the last body edit;
  • closingIssuesReferences is empty, so this delivery does not close the parent sweep;
  • there is no existing review, inline comment, unresolved thread, or current-head changes request;
  • the owner concern about the narrow scope was answered with a fresh corpus scan and explicit residual/deconfliction evidence.

The lane-level variation notices are advisory and the bot explicitly classifies this PR as content that must not be held for that signal. No blocking finding remains on this head.

@clusterManager-Myia
clusterManager-Myia merged commit a089c2d into main Sep 15, 2026
120 of 128 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants