Skip to content

fix(semanticweb,#17066): redressement critique de SW-4-CSharp-SPARQL -- reference de campagne - #17069

Merged
myia-ai-01 merged 7 commits into
mainfrom
fix/17066-sw4-redressement-reference
Sep 25, 2026
Merged

myia-ai-01 merged 7 commits into
mainfrom
fix/17066-sw4-redressement-reference

Conversation

@myia-ai-01

@myia-ai-01 myia-ai-01 commented Sep 20, 2026 •

Copy link
Copy Markdown
Collaborator

Grain: DEEP/notebook-dotnet -- lane myia-ai-01:CoursIA -- prev: DEEP/guard #17068

Réparation de référence de la campagne #17066. Ce body est le gabarit : les points 1 à 3 (plan, détail des consolidations, verdict de séquence) sont ce que chaque PR de la campagne doit porter. Ils existent pour une raison précise — un reviewer ne peut pas relire 218 notebooks, mais il peut confronter un plan annoncé au notebook en deux minutes, et un plan fabriqué se voit.

Notebook choisi : celui que le user a nommé (SW-4-CSharp-SPARQL.ipynb), qui portait « Résumé » deux fois — cellules 60 et 61, adjacentes.


1. Plan du notebook après réparation

# Section Ce qu'elle enseigne
— Titre, navigation, objectifs 6 objectifs, durée, prérequis SW-3
— Cadrage pourquoi ce notebook dans la série ; les deux approches (chaîne brute vs QueryBuilder) qui structurent tout le notebook
— #r nuget + using chargement dotNetRDF 3.2.1
— Lecture de l'environnement les 5 namespaces et ce que chacun apporte ; persistance des using en .NET Interactive
1 Introduction à SPARQL SPARQL = SQL du web sémantique ; table de correspondance SQL↔SPARQL ; les 3 composantes (pattern matching, filtres, formes de résultat) ; syntaxe de base
2 SELECT : requêtes de base pattern minimal, pourquoi SELECT d'abord
→ code + Interprétation correspondance code→SPARQL ; piège QueryBuilder (.Object("x") produit une variable, pas un littéral)
→ code + Interprétation PREFIX ; conjonction de patterns = INNER JOIN ; cardinalité du résultat
3 FILTER et OPTIONAL annonce les deux clauses comme opposées : FILTER restreint, OPTIONAL élargit
→ code + Interprétation FILTER numérique ; double rôle de ?age (pattern et filtre)
→ code + Interprétation FILTER regex, flags, portée XQuery≠POSIX ; récapitulatif des 3 formes de FILTER
→ code + Interprétation OPTIONAL + FILTER ; unbound ; INNER JOIN vs LEFT JOIN ; le Filter dans l'Optional
4 UNION
→ code + Interprétation UNION vs OPTIONAL (la confusion classique) ; coût de la double évaluation
5 ORDER BY, LIMIT, OFFSET
→ code + Interprétation tri ascendant par défaut ; pourquoi la cellule suivante bascule en chaîne brute (le QueryBuilder n'expose pas LIMIT/OFFSET)
→ code + Interprétation pagination ; les 3 dernières lignes de sortie viennent de l'analyse statique, pas de la requête ; OFFSET est O(N), LIMIT sans ORDER BY est non déterministe
6 QueryBuilder : construction programmatique
→ code + Interprétation les 4 clauses en un appel fluide ; ce que le QueryBuilder coûte autant que ce qu'il apporte
→ code + Interprétation passage de « afficher la requête » à « l'exécuter » ; d'où viennent les suffixes ^^xsd:string
→ code + Interprétation OPTIONAL sur résultats réels ; pourquoi HasBoundValue est obligatoire côté C#
7 Exercices (3 stubs) SELECT+FILTER · QueryBuilder+OPTIONAL · requête sur animals.ttl
— Résumé récap par section, correspondance SPARQL↔QueryBuilder, choix d'approche, pour aller plus loin, références W3C, navigation

La progression tient : chaque clause est montrée (requête affichée) en sections 1-5, puis exécutée sur un graphe réel en section 6, puis pratiquée en section 7.

2. Détail de chaque consolidation

Aucune section n'a été choisie à pile ou face. Pour chaque paire, ce que portait A, ce que portait B, ce qui a été gardé.

Cellules A portait B portait Gardé
3 + 4 une phrase tronquée la même phrase + liste des namespaces + note .NET Interactive 3 devient l'intro courte avant le code ; le reste part en 6 (voir ci-dessous)
4 + 6 liste des namespaces, note .NET Interactive, sortie verbatim namespaces SPARQL détaillés, où s'exécutent les requêtes les deux, fusionnés en un tableau de 5 namespaces + les deux notes. A était placée avant le code qu'elle commentait → déplacée après
10 → 8 redéfinition de SPARQL (déjà en 8), 3 composantes, syntaxe de base — les 3 composantes et la syntaxe rejoignent l'introduction ; la redéfinition est supprimée
12 + 13 sortie verbatim, décomposition, pourquoi QueryBuilder tableau code→SPARQL, piège .Object("John Smith") les deux — le piège est le contenu le plus précieux des deux cellules, il aurait disparu dans un tirage au sort
15 + 17 tableau des préfixes, SPARQL généré, conjonction décomposition, analogie INNER JOIN, cardinalité ≤ 50 les deux. 17 était après l'en-tête de la section 3 → ramenée avant
19 + 20 sortie verbatim, décomposition, cas d'usage traduction C#→SPARQL, double rôle de ?age les deux
22 + 23 flags regex, portée XQuery, quand l'utiliser tableau récapitulatif des 3 formes de FILTER les deux ; les flags, présents dans les deux, ne sont plus donnés qu'une fois
25 + 26 + 27 sortie verbatim, pourquoi OPTIONAL est critique, bloc C# unbound, comparaison INNER JOIN, bloc C# identique les trois, bloc C# une seule fois ; 27 apporte le tableau avec/sans et le SPARQL
30 + 31 UNION vs OPTIONAL, performance, portée 1.1, + un bloc C# OPTIONAL hors sujet tableau des 3 cas, SPARQL contenu UNION des deux ; le bloc C# OPTIONAL est supprimé — il était copié depuis la section 3 dans une section qui parle d'UNION
34 + 35 sortie verbatim, variantes, pourquoi en fin de requête tri ascendant par défaut, tableau des approches, limite LIMIT/OFFSET les deux ; la limite devient la transition explicite vers la cellule suivante
37 + 38 + 39 métadonnées parsées, cas d'usage, keyset pagination sortie verbatim, décomposition les deux ; 39 apporte le tableau des 4 clauses. OFFSET O(N), présent deux fois, n'est plus dit qu'une fois
42 + 43 avantages/inconvénients, recommandation tableau des 4 clauses, ordre de composition les deux, le pour/contre condensé en un tableau
45 + 46 sortie verbatim, code d'exécution, caractéristiques tableau des APIs, couverture SPARQL 1.1 les deux ; ajout d'une phrase expliquant les suffixes ^^xsd: visibles dans la sortie, que ni A ni B ne commentaient
48 + 49 + 50 motif HasBoundValue, méthodes de SparqlResult sortie verbatim, comparaison avec/sans les deux ; 50 (3 lignes) était intégralement redite par 49
55 + 56 énoncé de l'exercice 2 en-tête « Exercice 2 » fusionnés — l'énoncé était placé avant son propre en-tête
60 + 61 tables SPARQL↔QueryBuilder et approches, prochaine étape, références, navigation récap par section, pour aller plus loin les deux, dans l'ordre : récap → correspondance → approches → pour aller plus loin → prochaine étape → références → navigation en dernier. Sur main la navigation était au milieu, suivie d'un second Résumé

Deux suppressions sans consolidation, justifiées :

  • cellule 54 — une « Lecture de l'exercice 1 (stub) » qui commentait une cellule affichant Exercice a completer, et qui donnait sous **Code attendu** : la solution complète de l'exercice. C'est une fuite de solution produite par la densification. Supprimée entièrement ; rien n'en a été conservé.
  • cellule 7 — un *** seul dans sa cellule, alors que la cellule suivante commence déjà par ***.

3. Verdict de séquence

Ce qui va. La progression montrer → exécuter → pratiquer est maintenant lisible de bout en bout. Les interprétations suivent toutes la cellule de code dont elles commentent la sortie — ce n'était le cas que d'une partie d'entre elles sur main. Les transitions entre cellules sont explicites et justifiées par le contenu (la limite du QueryBuilder sur LIMIT/OFFSET annonce le passage en chaîne brute ; la section 6 annonce l'exécution réelle). Le pied de navigation est en dernière position.

Ce qui reste imparfait, sans être de la dégénérescence — je le dis plutôt que de le taire :

  • L'exercice 3 (animals.ttl) n'a que deux lignes d'énoncé, là où les exercices 1 et 2 ont objectif, sortie attendue et indices. C'est une asymétrie réelle, mais combler cet écart serait de la densification — interdite dans cette PR (§interdit 3 de Redressement critique des 218 notebooks a sections dupliquees -- lecture de bout en bout, consolidation, pas suppression mecanique #17066). À traiter séparément si le déséquilibre gêne.
  • La section 6 porte trois cellules de code et leurs interprétations, contre une ou deux ailleurs. C'est cohérent (c'est la section qui exécute réellement), mais elle est nettement plus longue que les autres.
  • La cellule d'en-tête de la section 6 reste brève (deux phrases) comparée aux autres en-têtes de section. Je l'ai laissée telle quelle : l'étoffer serait de l'ajout.

Ce que je n'ai pas vérifié : je n'ai pas ré-exécuté le notebook. Le diff est markdown-only, donc C.2 ne l'exige pas — mais cela veut dire que je n'ai pas revalidé que les sorties committées correspondent au code. Elles sont inchangées depuis main.

4. Comptes de l'organe (plancher réfutable, pas critère)

$ python scripts/notebook_tools/check_duplicate_sections.py <nb>     # AVANT (main)
    dup_closing  « resume » x2 (cellules 60,61)
    dup_reading  « interpretation » x3 (cellules 13,15,50)
1 porteurs, 0 illisibles, 1 scannes

$ python scripts/notebook_tools/check_duplicate_sections.py <nb>     # APRÈS
0 porteurs, 0 illisibles, 1 scannes

$ python scripts/notebook_tools/check_split_reading_cells.py <nb>
clean

$ python scripts/notebook_tools/restore_accents_canonical.py <nb> --check
would cure 0 accent(s) in 0/26 markdown cells    (rc=0)

Ce zéro ne prouve rien à lui seul — c'est le point 2 ci-dessus qui porte la preuve du travail. L'organe dit seulement que le défaut nommé a disparu.

5. Le code n'a pas bougé

code cells: main=16 → head=16 | modifiées: AUCUNE
outputs: 36 → 36
execution_count tous non-nuls: True
markdown: 46 → 26
nbformat valide, 42 cellules
liens: SW-3-CSharp-GraphOperations.ipynb OK · SW-4b-Python-SPARQL.ipynb OK · SW-5-CSharp-LinkedData.ipynb OK

Diff : markdown uniquement (compte à jour dans l'onglet Files ; +40/−40 ajoutés par le second passage d'accents).

Note sur les accents

Mon premier jet a réécrit les cellules sans accents (« requetes », « donnees ») là où le notebook en portait — une régression que j'ai introduite. Corrigée par l'organe du dépôt, restore_accents_canonical.py (133 cures, markdown-cell-source strict, cibles de liens protégées), et non par un script ad-hoc : c'est exactement ce que le registre #2876 demande, et les 11 formes hors table (observée ×8, début ×2, décale) ont été traitées à part, hors fences et hors cibles de lien.

Second passage (25/09, commits 5c8fca1f15 et a4cf4d8064). La table de l'organe ne couvrait pas toutes les formes désaccentuées par le premier jet. 43 formes l'étaient encore alors qu'elles portaient un accent en base : Interprétation ×11 (titres), prédicat ×7, défaut ×4, décroissant ×4, série, littéral(e), générée, référence(s), chargée, régulières, vérifie, exécutée, triée, complété/complète selon le contexte, Combinés à.

  • Périmètre. Elles sont restaurées dans 16 cellules markdown, hors blocs de code, hors code inline et hors cibles de lien. Aucune cellule de code ni aucune sortie n'est touchée : +40/−40 lignes, sur 16 cellules toutes de type markdown.
  • Contrôle. Après ce passage, restore_accents_canonical.py --check rend 0 cure.
  • Parité. La paire jumelle est ré-attestée : check_twin_parity.py --update puis --check, et SW-4 SPARQL rend OK. L'attestation du 24/09 est remplacée par celle du 25/09. Le seul DRIFT du registre, Probas-5, est hérité de la base et n'est pas touché par cette PR.

See #17066, #13410

🤖 Generated with Claude Code

jsboige and others added 2 commits September 20, 2026 23:24
… l'identique

Demande user 2026-09-20 : mesurer l'ampleur des notebooks portant un resume
final double, apres constat que la passe corrective de densite laisse passer
des sections d'interpretation et des resumes en double.

Trois signaux :
  - dup_closing  : meme titre de cloture repete (DUR, FP quasi nul)
  - dup_reading  : meme titre d'interpretation repete (DUR)
  - multi_closing: clotures distinctes en fin de notebook (advisory)

Mesure sur main : 218 notebooks porteurs / 1366 scannes.

L'organe est un PRODUCTEUR DE LISTE DE TRAVAIL et un plancher refutable, PAS
un critere d'acceptation : le champ JSON `not_an_acceptance_criterion` porte
ce rappel jusque dans la sortie machine, parce qu'un consommateur qui cable
un gate dessus le lira la plutot que dans la docstring.

Robustesse : un JSON corrompu est rendu comme finding `unreadable` sans
interrompre le balayage -- un scanner qui s'arrete au premier corrompu ne
mesure que le prefixe de l'arborescence.

Tests : 17 cas, controles positifs (resume double, empilement de lectures,
emphase + numerotation) ET negatifs (notebook sain, lectures distinctes,
cloture unique), plus la continuation du balayage apres un corrompu.

See #13410

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(reference de campagne)

Le notebook signale par le user portait « Resume » deux fois (cellules 60 et 61,
adjacentes) et « Interpretation » trois fois. La lecture de bout en bout en a
revele bien davantage : 13 sections empilees a consolider, un bloc de code C#
OPTIONAL colle quatre fois dont une dans la section UNION ou il n'a rien a faire,
deux lectures de sortie placees AVANT le code qu'elles commentent, l'enonce de
l'exercice 2 place avant son propre en-tete, le pied de navigation au milieu du
notebook, et une FUITE DE SOLUTION : une pseudo-lecture du stub de l'exercice 1
donnant le code attendu complet.

Geste : consolidation, jamais suppression a pile ou face. Chaque paire fusionnee
garde ce que CHACUNE des deux apportait -- le tableau de correspondance et le
piege QueryBuilder de l'une, la decomposition et l'analogie INNER JOIN de l'autre.

46 -> 26 cellules markdown. 16 cellules de code byte-identiques, 36 outputs et
tous les execution_count intacts : diff markdown-only, pas de re-execution
requise (C.2).

Accents restaures via l'organe du depot (restore_accents_canonical.py, 133 cures)
plutot qu'un script ad-hoc -- c'est precisement ce que le registre #2876 demande.

check_duplicate_sections : 2 findings -> 0
check_split_reading_cells : clean
restore_accents_canonical --check : rc=0

See #17066

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@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 20, 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

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.

jsboige added a commit that referenced this pull request Sep 20, 2026
Pattern reference #17069 : les 19 titres de lecture prennent la forme
'### Interprétation : <sujet>' (le token du titre de base survit, passe 3
du detecteur #14532) et les 7 ex-'Lecture qualitative' portent le lead
'**Lecture qualitative ancrée des sorties.**' (passe 2, prefixe bold).
Markdown-only, cellules code byte-identiques, organ 0 finding.

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

jsboige commented Sep 20, 2026

Copy link
Copy Markdown
Owner

[DIAGNOSTIC PREFLIGHT — myia-po-2026:CoursIA]

Rouges du head a88ecdd :

@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

github-actions Bot commented Sep 20, 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 4.3s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 13.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 21.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 26.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.5s

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

@github-actions

github-actions Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17069 (fix(semanticweb,#17066): redressement critique de SW-4-CSharp-SPARQL -- reference de campagne) 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 github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 20, 2026
myia-ai-01 pushed a commit that referenced this pull request Sep 21, 2026
…s de doubles lectures, double bibliographie fusionnee, 2 repositionnements (#17080)

- 14 retitrages '### Interpretation : <sujet>' (pattern #17069) + cellule 24
  refocalisee sur les baselines + fusion 52+53 en une lecture walk-forward
- fusion 42 dans 39 (double lecture de la comparaison RF/XGBoost)
- fusion des deux sections 'References academiques' de la conclusion (union 8 entrees)
- repositionnements : lecture split apres son code (15), lecture importance RF
  apres sa demo (25), sorties des blocs Exercice 1/2
- organ check_duplicate_sections : 17 sections en exces -> 0 finding
- markdown-only : 28 cellules code byte-identiques, outputs et execution_count
  inchanges, 67 -> 65 cellules

See #17066

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 21, 2026
…es (#17086)

- 8x 'Lecture du resultat' + 2x 'Lecture du graphique' identiques -> 10 titres
  sujet-specifiques (motif reference #17069) ; corps des cellules inchanges
- lecture critique de bout en bout (34 cellules) : les 10 lectures sont
  autonomes, chacune lit une sortie distincte, positions correctes — aucune
  double lecture, aucune fantome ; incoherence apparente open/close BTC
  (3746.71 vs 3843) tranchee sur l'output committe : les deux nombres sont
  exacts (open vs close du 2019-01-01)
- accents normalises sur 'resultat' (5 cellules titrees sans accent sur main)
- markdown-only : 14 cellules code byte-identiques (sha1 multiset), 34 cellules
  conservees, diff 10+/10- (titres seulement)

See #17066

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17069
head: a88ecdd
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 81c19b01079996ad7791957ad5cf45a02a42b5c9b120b49c37fe21339d125c18
diff-files: 3
diff-additions: 764
diff-deletions: 685
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner

UNKNOWN -- pull request changed while prevalidation snapshot was read

@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-22) :

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.

myia-ai-01 pushed a commit that referenced this pull request Sep 23, 2026
… de doubles lectures, énoncé Exercice 3 restauré (#17081)

* fix(qc,#17066): redressement QC-Py-15 - 8 lectures titrees, 7 fusions generique->mesuree, enonce Exercice 3 restaure

- 8 retitrages '### Interpretation : <sujet>' (pattern #17069) dont le QCAlgorithm
  final repositionne contre son code (87 -> 90 avant les blocs QC Cloud)
- 7 doubles lectures fusionnees : la cellule generique '### Interpretation' est
  absorbee par la lecture mesuree qui lit la meme sortie (31, 34, 50, 53, 65, 73,
  85) avec preservation documentee de leur contenu unique (glossaires, legendes,
  tranches WFER/CV, etapes du pipeline, contraste Sharpe/Calmar recale)
- cellule 67 : sauts de ligne perdus de l'enonce Exercice 3 restaures (preuve :
  egalite whitespace-insensitive, zero caractere modifie)
- lecture des helpers repositionnee contre son import (8 apres 6)
- organ check_duplicate_sections : 15 titres -> 0 finding ; markdown-only :
  32 cellules code byte-identiques, outputs/exec_count inchanges, 92 -> 85 cellules

See #17066

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

* repair(qc,#17066): corriger les 2 violations markdown-rendering de la cellule 62

Reproduit localement au head 7e6a568 : detect_markdown_rendering --check
rc=1, 2 violations ERROR nouvelles dans la cellule de l'enonce Exercice 3
restaure : [yaml_block_open_no_close] (le separateur initial "---" ouvre un
frontmatter jamais ferme, rendu en bloc setext geant) et [heading_in_list]
x2 ("- # Indice :" en ATX heading dans un item de liste). Reparation par
les fixers outilles prescrits par l organe (fix_hr_separator + fix_hint_headings,
notebook entier) : "---" -> "***", "# Indice" passe en code-span. Prose et
enonce integralement preserves, markdown-only, aucune re-execution. Gate
rc=1 -> rc=0.

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 23, 2026
… en H3 sujet-specifiques (0.88 vs 16.06 MAE, 4 canaux sous 0.65, covariable 0.5285 vs 0.4480, calibration 0.792/0.80) (#17098)

Tranche 9 campagne #17066, motif pur #17069 (titration seule — lectures
saines et bien positionnees, verifiees contre les outputs commites).
Markdown-only, 10 cellules code byte-identiques.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 24, 2026
…→0, lectures replacées, corrections factuelles (#17072)

* fix(pedagogy,#17066): QC-Py-21 - consolidation sections dupliquees 37->0

Retitrage specifique des 19 lectures (double generation Interpr/Lecture -> une
section, contenu integral preserve), fusion 59+60 (deux lectures d'une meme
sortie), reecriture 63 (claims faux stub/pass/ImportError corriges - la cellule
62 execute reellement, exec_count 23), lecture comparative unique en 65,
placement des lectures 20/29/47 contre leurs demos 17/26/44, closings
sujet-d'abord, refs inter-cellules recalees. Markdown-only : 24 cellules code
byte-identiques (sha1), outputs intacts, nbformat valide.

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

* fix(qc,#17066): retablir les tokens plan-loss dans QC-Py-21

Pattern reference #17069 : les 19 titres de lecture prennent la forme
'### Interprétation : <sujet>' (le token du titre de base survit, passe 3
du detecteur #14532) et les 7 ex-'Lecture qualitative' portent le lead
'**Lecture qualitative ancrée des sorties.**' (passe 2, prefixe bold).
Markdown-only, cellules code byte-identiques, organ 0 finding.

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

* Fix: QC-Py-21 — 8 valeurs reancrees sur les sorties (review NanoClaw #17072)

Chaque point a ete verifie firsthand contre les sorties committees AVANT
correction (le verdict d'un reviewer est un verdict, pas une preuve) :

  - cellules 27 : les deux « ici » de la generation 1 (« alpha ~ 0.8 ici »,
    « ~50% ici ») sont dementis par la generation 2 de la MEME cellule et par
    les mesures (alpha = 0.020, condition number 21.3 -> 19.2 = 10%). Bornes
    au regime generique vise.
  - cellule 30 : « les poids bougent de moins de 1% par actif » contredit par
    l'output (ASSET_1 : 0.9% -> 2.1% = +1.2 pt). « d'au plus 1.2 pt, 9 actifs
    sur 10 sous 1 pt ».
  - cellules 35 et 38 : R2 test -0.180 -> -0.179 (l'output rend -0.179).
  - cellules 35 et 38 : importance de return_20d 0.15 -> 0.14 (0.144271 ;
    0.15 est kurtosis a 0.154614).
  - cellule 37 (hors liste du reviewer) : « R2 test modeste (~0.1-0.3) »
    contredit par -0.179, dans la meme section. Corrige et signale comme tel.

Markdown-only, en place : 66 cellules avant et apres, 8 lignes remplacees.
Les 24 cellules de code et leurs outputs sont bit-identiques (assertion sur le
multiset de SHA du JSON canonique).

Note : la citation du reviewer visait « #27 » pour la phrase « moins de 1% » ;
elle est en realite dans la cellule 30 (grep exhaustif : 1 occurrence). Le
defaut corrige est le defaut reel, pas la citation.

Signale, NON corrige ici (sujet distinct, et preexistant a la base) :
check_density_anchor signale que les cellules 21 et 30 suivent un stub
d'exercice (cellules 20 et 29, byte-identiques en base). L'organe craint une
divulgation de reponse ; le contenu n'en divulgue aucune (21 = limites de
Mean-Variance, 30 = synthese du shrinkage). Le deplacer serait un autre sujet.

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 24, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17069
head: 509abc5
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: fedab5268fa64352a5f63ac297e819195507ee4505b78455fb837e0541d1aae1
diff-files: 1
diff-additions: 237
diff-deletions: 685
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Re-stamp c.92 (recalcul GitHub terminé)

Re-stamp exact-head post-recalcul GitHub. Tête 509abc51 vérifiée live REST (Tell c.117 strict fondateur), mergeable: true. Dossier c.88 périmé remplacé.

Aucun rouge actif à la tête actuelle. Dossier READY pour ai-01.

… redressement

Le redressement du jumeau C# ne touche que le markdown (46 -> 26 cellules,
sections dupliquees consolidees) ; les 16 cellules de code sont identiques en
source et en sorties entre la base et la tete. L'axe de parite semantique est
inchange, le jumeau Python n'est pas touche : rebaseline + ligne en tete de
known_differences, comme le demande le Twin parity audit (#8057).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 24, 2026
…→0, lectures replacées, 2 fusions (#17078)

* fix(qc,#17066): QC-Py-18 consolidation sections dupliquees 17->0

Retitrage specifique des 18 lectures '### Interpretation' (pattern #17069
'### Interpretation : <sujet>'), fusion des 2 doubles lectures (simulation
fondamentale 23+29, execution pipeline 53+55), replacement des lectures
contre leurs demos (inversions P1-P6 : lectures avant le code qu'elles
lisent, lectures apres les exercices), 2 refs recalees, 8 ids cellulaires
repares (6 vides pre-existants + 2 des fusions). Markdown-only, 25 cellules
code byte-identiques (sha multiset).

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

* fix(qc,#17066): QC-Py-18 retablir les 6 ids vides pre-existants

check_kernel_drift.py aligne les cellules code par id : sur base ces
3 cellules code portent id "" (non matchable dans base_ids) ; les avoir
renommees les faisait apparaitre comme 'added code cells' -> faux
signature_drift cellfix02/04/06 (cause heuristique NumPy trompeuse).
Les ids des 2 cellules fusionnees (markdown) restent : invisibles au
garde, valides nbformat. Le deficit nbformat 4.5 des 6 ids vides est
pre-existant sur main, hors scope de cette campagne (1 sujet par PR).

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

* fix(qc,#17078): QC-Py-18 — aligner 3 lectures sur les sorties committées (F1/F2/F3 Hermes)

Corrections numériques in-place demandées par la review Hermes du 2026-09-21
(head cac7975, CONCERNS) — md-only, aucune prose ajoutée hors requalification :

- F1 (cell 52) : bloc dimensions 350/150/15 -> 312/134/14, valeurs exactes de
  la sortie committée de la cellule 51 ; cadrage « sortie de l'exécution »
  explicite dans le titre du bloc.
- F2 (cell 52) : comptage features — param n_features=15 (code, inchangé)
  mais 14 retenues après suppression des corrélées ; « Garder » -> « Demander »
  sur la ligne de paramètre, retentions corrigées (bullet 4, selected_features_,
  cell 54 item 4).
- F3 (cell 54) : Accuracy Train 0.9295 / Test 0.5597 (sortie cell 53) ;
  « sur-apprentissage modéré » requalifié « marqué » avec l'écart chiffré.

Cellules code byte-identiques (vérifié : seules 52 et 54 changent, +170 c md).

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 24, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17069
head: f087aea
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 93304143e1e2970824b1fa467e1dbb1614b439e0c9d86fbf2f7528167da2cbdd
diff-files: 3
diff-additions: 244
diff-deletions: 685
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Re-stamp c.94 (Twin parity audit levé par push porteur)

Re-stamp exact-head post-f087aea2. Tête vérifiée live REST (Tell c.117 strict), mergeable: true. Twin parity audit (#8057) levé par push porteur — plus de contradiction sur latest-wins-green. Dossier c.92 (CID 5815605933) périmé par le push du porteur entre c.92 et c.93 (head 509abc5 -> f087aea), diff-files 1 -> 3 (push a ajouté 2 fichiers), diff-additions 237 -> 244.

Aucun rouge actif à la tête actuelle. Dossier READY pour ai-01.

@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 Sep 24, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17069
head: f087aea
complete: false
body: read
comments-reviewed: 13
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: b7d485a381505fd9c6d26bfc507c8e8a563fcb449eae7dc4cca56638ed5456c1
diff-files: 3
diff-additions: 244
diff-deletions: 685
checks: BLOCKED
b0: blocked
scope: fail
domain: fail
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Sep 24, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17069
head: f087aea
complete: true
body: read
comments-reviewed: 14
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 9d721aba4839ce8751342794607ae484722ded25d35f5675d911eb0f22a5e7e3
diff-files: 3
diff-additions: 244
diff-deletions: 685
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

jsboige and others added 3 commits September 25, 2026 03:21
…arkdown (43 formes)

Le redressement avait desaccentue des formes accentuees en base
(Interpretation, predicat, defaut, decroissant, serie...). Markdown seul,
hors blocs de code et code inline : aucune cellule de code ni sortie touchee.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…s (markdown seul)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@myia-ai-01

Copy link
Copy Markdown
Collaborator Author

[INFO] lane myia-ai-01:CoursIA -- Tête a4cf4d8064 : second passage d'accents. 43 formes désaccentuées subsistaient hors de la table de restore_accents_canonical.py ; elles sont restaurées dans 16 cellules markdown. Ce passage ne touche ni cellule de code ni sortie. Après correction, l'organe rend 0 cure, et la paire SW-4 SPARQL est ré-attestée (check_twin_parity --check : OK). Le détail est dans le body, section « Note sur les accents ». Les dossiers antérieurs sont périmés : un dossier tiers est demandé à la nouvelle tête, après échéance du plancher DWELL.

@github-actions github-actions Bot added the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Sep 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR gate absent du rollup (advisory, #10928)

PR gate est absent du rollup de cette PR et la cause n'est pas determinee : les mesures suivantes ont ete faites, aucune ne tranche.

  • mergeable_state = blocked (pas dirty) ;
  • aucun evenement base_ref_changed dans la timeline ;
  • le sujet du commit de tete ne porte pas le token [skip ci] ;
  • auteur : myia-ai-01 (pas une PR bot).

Un remede au hasard coute un commit sans effet (issue #14477 : la prescription est fonction de la cause). Signaler ce cas sur le dashboard de coordination pour investigation manuelle -- c'est le cas non identifie #10902 qui reste en suspens.

Cause mesuree : mergeable_state=blocked, pas de base_ref_changed, sujet sans [skip ci], auteur myia-ai-01

@github-actions github-actions Bot removed the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Sep 25, 2026
@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17069
head: a4cf4d8
complete: true
body: read
comments-reviewed: 17
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 0b3c196e2017a714ea0f0b038028dc2ba6ada438e70782cb67f7bf122a605545
diff-files: 3
diff-additions: 237
diff-deletions: 678
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit bfce31f into main Sep 25, 2026
90 of 110 checks passed
jsboige pushed a commit that referenced this pull request Sep 25, 2026
…17069)

SW-4-CSharp-SPARQL.ipynb avait ete modifie par la Phase 1 (commit 78ce56a)
alors que la note de perimetre de la PR le declare hors scope au profit de
#17069. Le fichier est restaure a la version de main : le diff ne le porte
plus, et la note de perimetre devient vraie au head.

Co-Authored-By: Claude Code <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants