Skip to content

fix(density,#17040): redressement paquet P19 — SemanticWeb + SmartContracts + SymbolicLearning + Tweety - #17056

Merged
myia-ai-01 merged 24 commits into
mainfrom
fix/density-redressement-p19
Sep 26, 2026
Merged

myia-ai-01 merged 24 commits into
mainfrom
fix/density-redressement-p19

Conversation

@jsboige

@jsboige jsboige commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2025:CoursIA-2 — prev: DEEP/notebook-python #17043

Périmètre SW-4 : SW-4-CSharp-SPARQL.ipynb est retiré du périmètre de cette PR au profit de #17069 (ai-01, référence) — le Concern user citait SW-4 ; le toucher ici créerait un conflit. Ce notebook n'est donc PAS modifié par les commits ci-dessous.

Redressement critique du paquet P19 en deux phases sur la même branche :

Organe commun : scripts/notebook_tools/check_duplicate_sections.py (branche feature/17066-duplicate-sections-organ), passé avant et après chaque édition. Zéro finding est nécessaire, jamais suffisant — toute l'analyse ci-dessous vient de la lecture, pas du compteur.


SW-3b-Python-GraphOperations.ipynb — commit d971ea7b08

Plan post-réparation : 0. Installation/imports → 1. Lecture de fichiers RDF → 2. Écriture → 3. Fusion → 4. Sélection de triplets → 5. Listes RDF (5.1 créer, 5.2 modifier, 5.3 supprimer, puis Interpretation : API des listes consolidée) → 6. Comparaison cross-langage dotNetRDF vs rdflib → 7. Exercices (3 stubs C.1) → References → Résumé.

Doublon consolidé — « API des listes » ×2 (cells 32+34) :

  • A (#### Interpretation : API des listes) portait : le parcours guidé des sorties 5.1/5.2/5.3, la différence d'API RemoveFromList-par-valeur (dotNetRDF) vs index-puis-del (rdflib).
  • B (### Interpretation : API des listes (synthese)) portait : la table 4 colonnes Opération/Méthode rdflib/Comportement/Équivalent dotNetRDF + la note « Quand utiliser les listes RDF ».
  • Gardé des deux : la table de B placée après le code 5.3, la différence d'API de A intégrée en note sous la table, la note d'usage de B. Supprimé : le parcours redondant de A et le suffixe « (synthese) ».

Autres findings de lecture : cell 3 fossile supprimée (« Interpretation » citant pip install -q — aucune commande pip dans le notebook) ; titres ####→### (cells 15, 25) pour aligner le niveau des sections Interpretation.

Verdict séquence (honnête) : progression linéaire lecture→écriture→fusion→sélection→listes→comparaison→exercices, chaque Interpretation suit son code. Reste imparfait, assumé : la section 6 (comparaison cross-langage) est une table de référence sans exemple exécuté côté .NET — le twin C# vit dans SW-4.

Organe : 0 finding avant, 0 après. Code intact : 20 cellules code, SHA-256 du tableau JSON identique avant/après (4ace0fa0c6f0dd9c). Markdown 31→29 cellules.

SW-5-CSharp-LinkedData.ipynb — commit 6f8e5583de

Plan post-réparation : 1. Installation/imports → 2. Principes du Linked Data → 3. Fonctions utilitaires (intro honnête) → 4. DBpedia : interrogation SPARQL (connexion, Einstein, Pitt/Rowling, villes/Premier League, Nobel) → 5. Wikidata (wd1, wd2, interprétation wd3) → 6. Requêtes fédérées SERVICE → 7. SparqlQueryClient : timeouts et erreurs → Exercices → References → Résumé. Toutes les lectures suivent désormais leur code.

Doublon consolidé — lecture double (cells 42+43) : A = lecture mécaniquement ancrée (« Lecture X (ancre sur code[N]) », rappel de sortie), B = ### Interprétation : Formats et gestion d'erreurs (le fond). Gardé : B comme section unique ; A absorbé.

Autres findings de lecture : 4 cellules md déplacées APRÈS leur code (namespaces, aventure, comédies, requête en 2 étapes) ; intro helpers réécrite honnête (DRY/affichage borné/try-catch — suppression de la copie C# embarquée, du faux « logs, retry, timeout » et de la digression ELK) ; sous-section « Fonctions utilitaires » dupliquée supprimée ; 4 lectures retritrées (ancres « (ancre sur code[N]) » → titres de sujet) ; lectures regroundées sur les sorties réelles (Einstein : types rdf:type réellement affichés ; Pitt 10/57 et Rowling 10/19 ; villes : 183rd_Infantry_Division_of_Africa, Cat's_Eyes_(TV_series), Coventry multi-lignes ; wd1/wd2 : P106/Q121594, films réels) ; LIMIT 50 corrigé en 10 (le code réel affiche 10) ; « Lecture de la requête owl:sameAs » honnête (le graphe reste sur DBpedia) ; résumé : « Async, retry, logs » → « Async, try-catch, affichage borné ».

Verdict séquence (honnête) : helpers→DBpedia→Wikidata→fédéré→client .NET→exercices, chaque lecture cite des valeurs présentes dans les sorties commitées. Reste imparfait : la section 7 garde un exemple client plus court que la prose qui l'entoure — le tenant du sujet reste lisible.

Organe : 0 avant, 0 après. Code intact : 19 cellules code, SHA identique (6a811c7a7d987f81). Markdown 33→32.

SW-9-CSharp-JSONLD.ipynb — commit 989004fe13

Plan post-réparation : Setup → Helpers RDF↔JSON-LD → P1 @context → P2 Parser JSON-LD (lecture : expansion en action) → P3 Serialiser → P4 Schema.org Product (lecture : valide) → P5 @graph → P6 Round-trip (lecture : isomorphe — OUI) → Conclusion → Exercices.

Doublons consolidés — 3 paires de lectures :

  1. Parsing : A = annonce « Sortie observée (verbatim) », B = lecture de fond → une ### Lecture : l'expansion en action — 6 triplets (pourquoi 6 = 4 champs dont knows multi-valué ×2 + rdf:type implicite ; piège littéral-vs-IRI — url est une IRI via "@type":"@id" tandis que knows reste litéral, groundé sur la Turtle réelle).
  2. Product : deux lectures descriptives → ### Lecture : Schema.org Product valide (15 triplets, types imbriqués résolus, rich snippets).
  3. Round-trip : A = annonce driftée (promettait xsd:date+location absents de la sortie), B = lecture → ### Lecture : round-trip isomorphe — OUI honnête : startDate reste une chaîne litérale, pas de xsd:date.

Autres findings de lecture : 5 copies C# embarquées retirées — dont 2 copies du code Product présentées comme « Sortie observée (verbatim) » (du code déguisé en sortie, contredisant la leçon TripleStore du helpers) ; header dédoublonné (une liste d'objectifs, un paragraphe twin, la subtilité TripleStore expliquée une seule fois) ; note fossile CS1701 retirée ; conclusion : deux listes « 6 piliers » → une ; exercices consolidés (objectif unique par exercice, sorties attendues alignées sur les stubs : titre/auteur/publie, 3 personnes alice/bob/carol) ; cellule « Code attendu » qui fuyait la solution → note courte sans la solution.

Verdict séquence (honnête) : flux linéaire en 6 parties, une lecture par sortie, conclusion unique. Reste imparfait, assumé : la P4 (Schema.org) est la plus descriptive des six.

Organe : 0 avant, 0 après. Code intact : 11 cellules code, SHA identique (0972550f2f7e4f44). Markdown 22→19.

SL-1b-LogicalLearning-Lean-Native.ipynb — commit 76d6bb2e0e

Plan post-réparation : Plan → 1. Vocabulaire PAC (Dcoin) → 2. Échantillon i.i.d. → 3. Borne de généralisation → 4. Cadre agnostique → 5. Concentration Markov→Hoeffding → 6. Perceptron : convergence et serrage → 7. Lecture du fil → Exercices → Conclusion.

Doublon consolidé — Dcoin pré-lu puis lu (cells 6+8) : A (cell 6) portait la structure Distribution (3 champs) et les « Trois remarques » ; B (cell 8) portait l'instanciation champ par champ, noncomputable, la sortie attendue et le coût. Gardé : B devient LA lecture consolidée (structure + instanciation + pourquoi noncomputable + pourquoi fondamental absorbé de A) ; A réduite à une amorce de 3 lignes qui annonce sans relire.

Autres findings de lecture : renvois fantômes **La preuve** est en annexe… supprimés (cells 24/26/28 — aucune Annexe n'existe dans le notebook) ; chaînes explicatives dupliquées intro/lecture dédoublonnées (chaîne 4 étapes en tête de §3 seule, explication MGF en tête de §5 seule, « le serrage est la moitié du travail » en tête de §6 seule — les lectures se terminent par un renvoi « tête de section ») ; conclusion : « trois concepts clés » + « quatre idées forces » → Cinq idées à retenir ; caractère parasite 担心 → « crainte » (cell 4) ; « Quatre propriétés » (alors que 6 puces suivent) → « Les briques de Convergence et Tightness » ; claim faux « Lean 4 résout les imports paresseusement » supprimé + « sortie attendue » des imports rendue honnête (écho du kernel, pas 5 lignes) ; section Exercices ne ré-énumère plus les 3 exercices.

Verdict séquence (honnête) : chaîne PAC linéaire, chaque lecture suit ses #check. Reste imparfait, assumé en conclusion et dans le README du lake : MGF/BernoulliMGF ne sont visités qu'en prose.

Organe : 0 avant, 0 après. Code intact : 12 cellules code, SHA identique (1b4161e95c534bb4). Markdown 19→19 (restructuration interne).

Tweety-02b-Semantics-CSharp.ipynb — commit 7b71e3d40f

Plan post-réparation : Objectifs/Prérequis → 1. Configuration IKVM → 2. Signature et mondes possibles → 3. Satisfaction → 4. Raisonnement (entaînement) → Exemple guide : modèles d'une base de croyances → Conclusion. Une seule lecture par expérience.

Doublons consolidés — 3 paires de lectures jumelles :

  1. (9+10) Énumération des mondes : A portait la structure (cube B_n, up-sets, extrêmes), B portait valuation/Tarski/2^n → une ### Interpretation : mondes possibles et sémantique.
  2. (19+20) Raisonnement : A portait l'asymétrie confirmer(2^n)/réfuter(1), B portait KB et non phi/DPLL/Sat4j → ### Interpretation : l'asymétrie et les deux approches.
  3. (23+24) Modèles de KB : A portait les 4 survivants + fermeture transitive, B portait généralisation (la sémantique = un filtre) et comptage (#SAT → porte des sémantiques probabilistes) → une lecture unique, refermant le lien Tarski.

Verdict séquence (honnête) : config→mondes→satisfaction→raisonnement→exemple guide→conclusion, chaque lecture suit sa sortie exécutée. Rien de structurel à signaler.

Organe : 0 avant, 0 après. Code intact : 12 cellules code, SHA identique (d723d980e3b295dc). Markdown 21→18.

Tweety-07b-Ranking-Probabilistic-CSharp.ipynb — commit 02e0d190eb

Plan post-réparation : Objectifs → 1. Runtime IKVM + Diagnostic — verdict exact (RECOVERABLE-LOCAL, code préservé en commentaire) → 2. Syntaxe RP-CL → 3. RpclBeliefSet et Maximum Entropie (le « pourquoi ME » consolidé ici) → 4. Querying → Exercices (3 stubs) → Conclusion (recap honnête, sans re-explication).

Doublon consolidé — « Pourquoi Maximum Entropy ? » ×2 : A = 3 bullets d'intuition (section 3), B = section formelle en conclusion (formule H(P), Jaynes, « la plus honnête », claim benchmark « 10x-100x »). Gardé des deux : les bullets d'intuition de A + la formule de Shannon et l'unicité (Paris 1994, Kern-Isberner 2001) de B, en section 3 (là où le lecteur en a besoin). Supprimé : la section de conclusion (un renvoi d'une ligne reste) et le claim benchmark invérifiable.

Autres findings de lecture : le diagnostic IKVM de la conclusion contredisait le verdict exact (« les classes RPCL de surface compilent avec succes » alors que la section 1 mesure 0 types exposés), sous un titre « IKVM 8.15.0 » alors que le notebook épingle 8.14.0 → remplacé par un recap honnête « Limites connues du port IKVM » ; renvois périmés par la renumérotation du commit précédent (« cellules 7/9/11 », « section 5 ») → références par section ; formule fausse P(flu) = P(flu|fever) * P(fever) (c'est P(flu∧fever)) → le vrai point pédagogique : la base fixe les conditionnelles, pas les marginales — ME fournit l'information manquante ; annonce de query dupliquée (fins de section 3 et ouverture de section 4) → retirée de la section 3.

Verdict séquence (honnête) : la séquence tient ; les sections 2-4 décrivent un code préservé en commentaire (diagnostic documenté en section 1) — c'est l'état assumé du port, la prose ne le maquille plus.

Organe : 0 avant, 0 après. Code intact : 10 cellules code, SHA identique (7e2cc4dcee55a0dc). Markdown 11→11.

Tweety-08-Agent-Dialogues-CSharp.ipynb — commit f0d2b37124

Plan post-réparation : Objectifs/Pourquoi un twin/Prérequis → Setup → P1 Framework de Dung → P2 Modèle d'agent → P3 Protocole de dialogue → P4 Scénarios (1 négociation, 2 débat enrichi) → P5 Loterie argumentative → P6 Parité IKVM → Conclusion + Exercices. Chaque lecture suit sa sortie et cite le verdict réel.

Doublon consolidé — paragraphe « value-add » quasi-verbatim : A = header « Pourquoi un twin from-scratch ? » (rationale complète), B = conclusion (même argument, quasi mot pour mot). Gardé : A en tête (son rôle) ; B replié en une ligne de renvoi, et la couverture de la conclusion complétée — elle mentionnait les piliers 1/2/3/5 en sautant les Scénarios (P4) et la parité (P6), dont le verdict (PRO gagnant, confirmé via IKVM) figure maintenant.

Autres findings de lecture (le gros du travail — lectures non groundées) :

  • Scénario 1 : la lecture ignorait le verdict réel (OpponentWins, Retract au tour 1, « riposte impossible ») et esquivait vers de la prose générique → regroundée : COMP est inattaquable, l'acheteur a une bonne carte (UPG défait OVR) mais perd faute de réponse à COMP — leçon : défendre une claim exige de répondre à chaque attaque.
  • Scénario 2 : promesse fausse « observer une bascule de verdict » (le verdict est inchangé, même trace au mot près) et « un 3e argument » (c'est le 4e) → setup honnête en question ouverte + lecture regroundée : l'extension passe de {E,T} à {S,E,T}, aucun statut existant ne bouge, et S (porté par Anti-TL) attaque l'argument de son propre camp — la lecture le documente au lieu de le cacher.
  • Renvoi périmé « Exercice 3 (cellule suivante) » → « en fin de notebook » (l'exercice est 7 cellules plus bas).
  • Footer « 0 NuGet, 0 JVM » contredit par la Partie 6 (IKVM) → scoping « Parties 1-5 ».
  • Prose Setup absconde (« InvokeOnBackend-free display ») → éclaircie (display avec repli Console.WriteLine).

Verdict séquence (honnête) : la progression P1→P6 est propre et chaque lecture lit sa sortie. Reste imparfait, assumé : le Scénario 2 met en scène un agent qui porte un argument minant son camp — c'est dans le code (byte-identique), la lecture le nomme désormais.

Organe : 0 avant, 0 après. Code intact : 11 cellules code, SHA identique (b78dcd5226f2cd37). Markdown 17→17.


Vérification finale (les 7 notebooks)

Contrôle Résultat
check_duplicate_sections.py avant → après 0 → 0 sur les 7
Périmètre git diff 78ce56a7..f0d2b37124 exactement les 7 .ipynb ci-dessus, aucun autre fichier
Cellules code byte-identiques SHA-256 du tableau JSON des cellules code identique avant/après pour les 7 (comptes 20/19/11/12/12/10/11)
Pre-commit (gitleaks, H.3, #13326, probeAddresses, papermill-paths) passé sur chacun des 7 commits
Ré-exécution aucune (markdown-only, exception C.2 assumée — aucune cellule code touchée)
Push additif (78ce56a749..f0d2b37124), pas de force-push

Commits phase 2 : d971ea7b08 (SW-3b) · 6f8e5583de (SW-5) · 989004fe13 (SW-9) · 76d6bb2e0e (SL-1b) · 7b71e3d40f (Tweety-02b) · 02e0d190eb (Tweety-07b) · f0d2b37124 (Tweety-08).

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

Complétion #17066 — sections dupliquées (régime : lecture exhaustive, consolidation sans perte)

SW-4-CSharp-SPARQL.ipynb — 4 groupes, consolidé-fusionné ×4 :

  • « resume » ×2 (cells 58+59) : fusion dans 58 — prose + table concepts + ressources + navigation conservées verbatim, cellule 59 supprimée.
  • « interpretation » ×2 (cells 12+13, lisant le même code 11) : table de correspondance QueryBuilder/SPARQL + piège .Object() de la 13 insérés dans la 12 après la Décomposition ; bloc sparql dupliqué retiré.
  • « interpretation » ×2 (cells 15+17, lisant le même code 14) : fusion dans 15 sous le titre spécifique de 17 (« PREFIX avec plusieurs patterns ») ; cellule 17 mal placée après « ## 3. » supprimée.
  • « interpretation » (cell 50 vs 48+49) : strict sous-ensemble des deux mêmes lectures du même code 47 → supprimée (apports intégralement couverts par les occurrences conservées).

Aucun pile-ou-face : tout ce qui est gardé provient mot pour mot des cellules d'origine ; seuls les titres de retraitrage sont nouveaux.

Organes au head b5b8c1e484 : duplicate-sections 4 porteurs → 0 (rc=0) ; plan-loss 0 → 0 ; md-loss 0 → 0. Cellules code byte-identiques (16 cells vérifiées).

🤖 Generated with Claude Code

Rectifications de la lane (25/09 2026, post-dossier 14:03Z)

SW-4-CSharp-SPARQL.ipynb retire du diff — commit d132cbfece. La note de perimetre ci-dessus etait vraie du texte mais fausse du diff : la Phase 1 l'avait modifie (78ce56a749 residuel). Le fichier est restaure a la version de main, ou SW-4 a ete redresse par bfce31f530 (reference #17069). Mesure : le diff de la PR passe de 8 a 7 carnets.

Conflit de base resolu — merge 57bfdc9769. La branche etait 70 commits derriere main. Le conflit portait sur SW-5-CSharp-LinkedData.ipynb, cellule cd4b16a1 : les deux cotes reecrivaient la meme cellule, la branche lisant « Films de Brad Pitt » apres son code, main lisant « Villes de France » avant le sien. Resolution : version de la branche, et le seul element perdu — le fragment FILTER NOT EXISTS { ?city dbo:militaryUnit ?unit } — est restaure dans la lecture France de la cellule 9138db19 (### Interpretation : Requetes DBpedia), ou la substance de la note de main est deja preservee et depassee. Markdown seul (C.2), aucun compte de lignes manuel de la recette #17636 des deux cotes.

Declaration de reecriture (gate enrich-quality, jambe rouge depuis 01:14:12Z sur la tete precedente) — le gate signale MD_REWRITE sur SW-9 (105/522 lignes markdown de base survivent verbatim, 20 %). Mesure : SW-9 passe de 23 a 19 cellules markdown, et les cellules retirees sont celles de la campagne densite (### Lecture du parsing JSON-LD (ancre sur code[3]), ### Lecture de Schema.org Product (ancre sur code[5]), ### Lecture du round-trip JSON-LD <-> Turtle (ancre sur code[7])) — le livrable meme du redressement, pas une perte de contenu. Le marqueur implemente par #17744 est donc pose, et la trace reste imprimee (MD_REWRITE_JUSTIFIED_BY_BODY) :

enrich-quality: reecriture assumee -- SW-9-CSharp-JSONLD.ipynb : retrait des lectures de la campagne densite ((ancre sur code[N])) et reecriture des en-tetes de partie -- livrable du redressement #17040, markdown seul, cellules code byte-identiques

Rectification du 25/09 (cycle 16:26Z, head da26c51696) — la lane avait d'abord qualifie ce finding de faux positif de l'organe et annonce une escalade vers ai-01. C'etait une erreur de lecture : l'organe a raison, le defaut etait mien. Corrige ci-dessous.


Rectifications du 25/09 (cycle 16:26Z) — head da26c51696

Deux corrections, une par commit, poussees apres le dossier BLOCKED de 14:03Z.

1. Tweety-02b — provenance de la cellule fusionnee (cliquet a 0)

Le redressement avait fusionne les DEUX lectures de code[17] (base[19] « L'asymetrie de l'entailment. » et base[20] « ### Interpretation : les deux faces de la verite », id m72867) en une seule cellule — le remede que le mandat prescrit — mais en rendant id=None. Or check_split_reading_cells.py reconnait une reecriture en place par trois signaux, dont le premier est « l'id de la cellule existe encore en base, meme a un autre index » (#17044, ecrit precisement pour les fusions). Id perdu => la fusion est classee SECOND_READING alors que le compte de paires baisse (1 -> 0).

L'organe porte ce geste comme controle negatif canonique de son propre self-test (« negatif 1 -- deux lectures FUSIONNEES en une (le remede prescrit) »), et ce controle ne passe que parce que la cellule fusionnee conserve l'id de l'absorbe. Ce n'etait donc pas un faux positif : c'etait une perte de provenance.

Geste, commit da26c51696 : metadata seule, id <- m72867. Diff = une ligne. Aucune source, aucune sortie, aucune prose.

2. SL-1b — annexe de solutions restauree (regression D)

80ca0e0c58 avait supprime ## Annexe — solutions des exercices en invoquant la regle (e) — qui interdit d'ajouter de la prose de campagne, jamais d'en retirer une annexe de solutions. 76d6bb2e0e avait ensuite supprime les 3 renvois qui la pointaient, en les declarant « fantomes » : le symptome repare, pas la cause.

La regle D (anti-regression) est HARD : « cellule # Solution supprimee = regression de contenu INTERDITE », et pr-review §D.4 exige une issue referencee — aucune ne l'etait. Mesure : aucun organe ne l'exigeait (check_duplicate_sections.py rend 0 porteur avec l'annexe).

Contenu restaure, byte-identique a la base :

  • les 3 preuves Lean litterales des exercices 1-2-3 (un seul exact chacune), leur sortie attendue et leur cout — contenu unique, absent des enonces ;
  • les 3 renvois « La preuve est en annexe ... A ouvrir apres avoir cherche », qui sont l'anti-fuite explicite du carnet.

Commit 65bc6a2bc5. Markdown seul : 12 cellules de code, source et sorties identiques, markdown 20 (base) = 20 (tete), plan-loss md_cells base=20 head=20 stable=True, lost_section=0.

Organes au head da26c51696

Organe Resultat
check_split_reading_cells.py --base-ref origin/main --head HEAD --fail-on-findings (predicat CI exact) rc=0, changed=7 regressed=0 — SW-5 1->0, Tweety-02b 1->0, les 5 autres 0->0
detect_notebook_plan_loss.py --check rc=0 sur les 7
check_duplicate_sections.py 0 porteur sur les 7
check_prose_quantitative_claims.py --strict --diff origin/main aucun hit sur les 7
Cellules de code source et sorties byte-identiques a la base sur les 7 carnets

Ce qui est retire, carnet par carnet (releve mesure)

Carnet Cellules base->tete Markdown retirees -> ajoutees Code (source/sorties)
SW-3b-Python-GraphOperations 54->49 8 -> 3 identique (20 cellules)
SW-5-CSharp-LinkedData 53->51 23 -> 21 identique (19)
SW-9-CSharp-JSONLD 34->30 21 -> 17 identique (11)
SL-1b-LogicalLearning-Lean-Native 32->32 14 -> 21 (annexe restauree) identique (12)
Tweety-02b-Semantics-CSharp 34->30 7 -> 3 identique (12)
Tweety-07b-Ranking-Probabilistic-CSharp 24->21 7 -> 4 identique (10)
Tweety-08-Agent-Dialogues-CSharp 29->28 9 -> 8 identique (11)

Les compteurs markdown sont des multisets de sources : toute cellule reecrite y compte a la fois comme retiree et comme ajoutee. Le nombre de cellules est donc la mesure fiable, pas ces deux colonnes.

Nature des retraits, par carnet :

  • SW-3b : 1 doublon Interpretation : API des listes fusionne ; 3 lectures de campagne ### Lecture : ... absorbees dans les sections.
  • SW-5 : 4 lectures de campagne (ancre sur code[3/7/13/15]) + 1 lecture d'exercice stub (ancre sur code[17]) retirees ; doublons Interpretation fusionnes.
  • SW-9 : 3 lectures de campagne (ancre sur code[3/5/7]) + 2 lectures d'exercice stub (ancre sur code[8/10]) retirees ; en-tetes de partie reecrits.
  • SL-1b : doublons pre/post-code de Dcoin fusionnes ; annexe de solutions restauree dans ce cycle (etait supprimee a tort).
  • Tweety-02b : 3 fusions de lectures pour une meme sortie.
  • Tweety-07b : 3 lectures ### Lecture du protocole / de la base / de la requete absorbees dans les sections.
  • Tweety-08 : fusions et retitrages, aucun retrait de substance.

🤖 Generated with Claude Code


Justifications md-content-loss (organe #13491) — SL-1b, 5 cellules consolidees

Le gate mesure, cellule par cellule, la chute du volume markdown normalise. Les cinq
cellules ci-dessous sont sous le seuil de 75 % par consolidation assumee, pas par
troncature : chacune a ete relue contre la source, et le contenu retire survit ailleurs
dans le meme carnet. Ces lignes sont le canal prevu par l'organe (docstring §8) : elles
retirent le finding TRUNCATED_CELL de la cellule nommee, et uniquement de celle-la
(le finding est requalifie TRUNCATED_CELL_JUSTIFIED_BY_BODY, visible en review).

md-content-loss: reecriture assumee -- MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-1b-LogicalLearning-Lean-Native.ipynb cell 6 : doublon Dcoin pre-lu puis lu ; la cellule 8 porte desormais noncomputable, la tactique intro x; norm_num et l'argument « pourquoi fondamental » (verifie : ces trois chaines sont absentes de la cellule 6 au head et presentes en 8)
md-content-loss: reecriture assumee -- MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-1b-LogicalLearning-Lean-Native.ipynb cell 13 : la chaine ERM -> controle uniforme -> union bound -> resolution en n n'est plus deroulee deux fois ; ses concepts restent en tete de section (cellule 11 : union bound, |H|, minimiseur empirique) et la cellule 13 le dit explicitement puis renvoie a la tete de section
md-content-loss: reecriture assumee -- MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-1b-LogicalLearning-Lean-Native.ipynb cell 18 : l'explication MGF contre Markov survit en cellule 16 (fonction generatrice des moments, M_X(t) presents en 16 au head) ; sampleExpect_empError_eq_trueError reste en 16/17/18, l'identite de biais est conservee dans la cellule elle-meme
md-content-loss: reecriture assumee -- MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-1b-LogicalLearning-Lean-Native.ipynb cell 21 : « le serrage est la moitie du travail » survit en cellules 19 et 30, et le vocabulaire witnessPts / novikoff_bound_is_sharp reste en 19/20/21/22 ; la cellule 21 perd la redite, pas le propos
md-content-loss: reecriture assumee -- MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-1b-LogicalLearning-Lean-Native.ipynb cell 23 : la section Exercices ne re-enumere plus les trois enonces ; chacun est porte par sa propre section ci-dessous, avec son theoreme et son indice (detail par exercice dans la section dediee)

Les deux autres categories du gate (LOST_MOTIF, LOST_NAV_LINKS) ne sont pas
concernees : le rapport CI ne releve que des TRUNCATED_CELL, et le compte de cellules
markdown est stable (20 -> 20).

Cellules ajoutees par la campagne densite PR #16035 (commit 1467cb6)
supprimees car elles paraphrasaient des lectures preexistantes sur les
memes sorties de cellules code :
- 99394809 (lire un graphe comme un schema et ses instances) doublonne
  la lecture 4.1 'Resultats de la selection' (c08705b85987) sur la meme
  sortie de l'Exemple guide 1 (14 triplets rdf:type + 4 proprietes rex)
- 6d8bdaa5 (4 + 51 = 55, l'union qui ne compte pas deux fois) doublonne
  la lecture 3.1 'verification manuelle' (2285ee73b077) sur la meme
  sortie de l'Exemple guide 2 (g1=4 + g2=51 = 55, 0 doublon)
- 9c44e108 (l'ordre dans la structure, une liste est un graphe deguise)
  doublonne la lecture 5.1 'Structure interne' (a3f2896257f9) sur la
  meme sortie de l'Exemple guide 3 (chainage rdf:first/rdf:rest)

Cellule 65a965f1 conservee : elle lit la sortie unique de la cellule
code 98842ff2fcf2 (parsing nt vs turtle = 1 triplet) qu'aucune autre
lecture ne commentait. Markdown-only, cellules code byte-identiques.

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

Cellule ajoutee par la campagne densite PR #14117 (commit 189cfef)
paraphrasant un stub d'exercice etudiant (code 8a441517) supprimee :
- la cellule '### Lecture de l'exercice 2 (stub) (ancre sur code[17])'
  paraphrase la cellule d'exercice 2 (code commente + 'Console.WriteLine(
  Exercice a completer)') qui n'a aucune sortie exploitable — elle sert
  uniquement a indiquer ou l'etudiant doit implementer sa requete.

Cette lecture ne lit aucune sortie reelle ; elle redouble le titre de
l'exercice et detourne l'attention. Supprimee pour respecter la regle
(c)(i) du mandat : pas de lecture sur cellule d'exercice.

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

Cellule ajoutee par la campagne densite PR #14119 (commit 65ee8ff)
paraphrasant un stub d'exercice etudiant supprimee :
- la cellule '### Lecture de l'exercice 3 (stub) (ancre sur code[10])'
  paraphrase la cellule d'exercice 3 (0083077a-0e66-4910-80ec-6e41a83c3552)
  qui contient 'TODO etudiant : ecrivez une fonction qui tente de parser
  un JSON-LD' et sort 'Exercice a completer' — la lecture commentait
  explicitement la valeur neutre du stub (deux fois False), pas une sortie
  semantique.

Lecture d'une cellule d'exercice : regle (c)(i) du mandat, supprimee.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Cellule ajoutee par la campagne densite PR #14161 (commit 4793a4f)
supprimee : 'annexe-solutions-exercices' (## Annexe — solutions des
exercices). Ce bloc detaille les trois protocoles de preuve `exact` pour
les exercices 1-2-3 du notebook, places en fin de document apres la
Conclusion.

Ce n'est pas une lecture ancree sur une sortie de cellule code (regle
(e) du mandat : on ne re-ajoute jamais de prose, et la cellule n'est pas
une lecture de sortie unique) ; sa presence releve d'un enrichissement
pedagogique non lie aux outputs executes. Markdown-only.

Cellule 'Lecture de la convergence et du serrage du perceptron' (idx
21, ajoutee par la meme campagne) conservee : lecture unique de la
sortie Lean #check du perceptron (cellule 41438b21), non doublonnee par
une lecture preexistante.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ion' supprime

Cellule ajoutee par la campagne densite PR #16319 (commit d9e59b9)
paraphrasant un exercice etudiant supprimee :
- '**Attendus, pour auto-verification.**' detaille les attendus de
  l'exercice 1 (Tautologie, contradiction ou contingence) qui suit
  immediatement, sans commenter une sortie executee.

Lecture d'une cellule d'exercice : regle (c)(i) du mandat, supprimee.
La consigne de l'exercice reste trouveable dans la cellule markdown
'#### Exercice 1 : Tautologie...' qui precede le code etudiant.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… en commentaire' supprimees

Cellules ajoutees par la campagne densite PR #16396 (commit 9abd646)
supprimees car elles lisaient des cellules code sans sortie committée :
- 81028500 ('protocole de preservation : le code vit en commentaire')
  paraphrase dcf476ed, cellule 100% en commentaire IKVM (DLL expose 0 types
  tweetyproject.logics.*), pas d'output execute
- 5a5fbf21 ('base preservee : trois regles medicales sous Maximum Entropy')
  paraphrase 3ab3804d, idem : cellule entiere en commentaire
- b23b4e0c ('requete preservee et echelle des exercices') paraphrase
  6b90ee67, idem

Regle (c)(iii) du mandat : valeurs absentes des sorties committees — ces
trois cellules n'ont aucune sortie executee a commenter (le code est
preserve en commentaire pour cause d'incompatibilite IKVM). La
documentation du diagnostic IKVM reste portee par le commentaire de
chaque cellule code preservee.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…s' supprime

Cellule ajoutee par la campagne densite PR #16319 (commit d9e59b9)
supprimee : '**Le protocole des exercices.**' introduit les trois
exercices (extensions preferees, tour de parole multi-agents, utilite
exacte) sans commenter une sortie executee — c'est un chapeau de
section place entre la Conclusion et les exercices.

Regle (e) du mandat : pas de prose ajoutee qui ne lit pas une sortie
unique ; ici la cellule ne lit aucun output, elle paraphrase
l'enonce des exercices suivants. Supprimee.

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

Cellules ajoutees par la campagne densite PR #14116 (commit d61b98b)
supprimees :
- fuse-25 ('### Lecture de l'exercice 1 (stub) (ancre sur code[13])')
  paraphrase le stub de l'exercice 1 (5e404f56 : 'Console.WriteLine(
  Exercice a completer)') — regle (c)(i) du mandat.
- fuse-26 ('**Objectif** : Utilisez le **QueryBuilder**...') enonce
  l'exercice 2 (OPTIONAL/QueryBuilder) mais est situee entre le code
  de l'exercice 1 et l'enonce de l'exercice 2 (6de49146, deja modifie
  par la campagne : Interpretation -> Interpretation) — c'est un
  doublon de l'enonce, mal place, redondant avec la cellule 56.

Les 20 autres cellules fuse-* conservees : ce sont des lectures de
sorties uniques ou des sections structurelles legitimes (titre du
notebook, enonces de sections, Resume).

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

Copy link
Copy Markdown
Contributor

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

@jsboige

jsboige commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

Concern: Même après ces corrections, les notebooks sont encore dégénérés:
https://github.com/jsboige/CoursIA/blob/78ce56a7497ba746a1a9497afecb590c0c0f9470/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-4-CSharp-SPARQL.ipynb par exemple à plusierus sections d'"interprétation" en double, ainsi que le résumé de fin de Notebook

@github-actions

github-actions Bot commented Sep 20, 2026 •

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

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 13.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 11.9s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 9.2s
Search-01-StateSpace.ipynb ✅ SUCCESS 11.6s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 8.1s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 64.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.8s

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

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Sep 20, 2026
@github-actions

github-actions Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

…consolidation doublons

- Interpretation fossile (pip -q) supprimee : la cellule code concernnee est
  desormais un commentaire 'dependances pre-provisionnees', aucune commande
  pip n'existe dans le notebook
- '#### API des listes' + '### API des listes (synthese)' consolidees en une
  seule section apres 5.3 : table unique rdflib/comportement/dotNetRDF,
  difference RemoveFromList-vs-index gardee, note 'quand utiliser' gardee
- Titres #### normalises en ### (Comparaison des formats, Resultats de la
  selection) pour coherence avec les autres interpretations de meme niveau
- Markdown seul : cellules code byte-identiques (verifie par signature JSON)
- Organe check_duplicate_sections.py : 0 finding avant, 0 apres

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

- 3 copies embarquees du C# derivees du code reel supprimees (helpers sans
  try-catch, connexion x2, Nobel) : le code execute reste la seule source
- Fausses claims corrigees : 'logs, retry, timeout' (aucun n'existe),
  'LIMIT 50' (le code dit LIMIT 10), pattern 'federation dispatchee' sur
  fedQuery (requete 100% DBpedia), requete mal citee dans la note du test
  de connexion, ligne Resume 'Async, retry, logs'
- Lectures placees APRES leur code : namespaces (deplacee), Einstein,
  Pitt+Rowling, aventures (deplacee), comedies (deplacee), wd1, wd2,
  2-etapes (deplacee) — les annonces 'Sortie observee de code[N]' pre-code
  supprimees, le contenu de lecture garde et ancre sur la sortie reelle
- Sous-section 'Fonctions utilitaires' dupliquee (cell 7) retiree, absorbee
  par la section 3 reecrite honnetement
- Double lecture du code save/reload (Lecture des formats + Interpretation)
  consolidee en une section : comparaison JSON/XML gardee, sorties verbatim
  gardees, gestion d'erreurs gardee
- Titres '(ancre sur code[N])' nettoyes (artefacts de campagne)
- Lectures nouvellement couvertes : requete 3 Rowling et requete 5 Premier
  League (jamais lues auparavant), sorties villes/Premier League relues
  dans l'interpretation DBpedia
- Markdown seul : cellules code byte-identiques, ordre relatif preserve
- Organe check_duplicate_sections.py : 0 finding avant, 0 apres

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

- 3 paires de doubles lectures fusionnees ('Lecture ... (ancre sur code[N])'
  + 'Lecture du resultat') en une seule lecture par experience : parsing
  (6 triplets), Schema.org Product (15 triplets), round-trip (isomorphisme)
- 5 copies C# embarquees supprimees, dont le code Product recopie 2x dans
  la cellule 13 (une fois maquillee en 'Sortie observee (verbatim)' — c'etait
  du code, pas une sortie) et des helpers derive qui chargeaient un Graph
  direct alors que le vrai code passe par TripleStore (contredisait la lecon)
- Annonces 'Sortie observee' derivees supprimees : dataset @graph annonce
  (bob->charlie) != reel (bob/carol), Turtle round-trip annonce avec
  xsd:date + location != reel (chaine littérale, 3 triplets)
- Lectures re-ancreees sur les sorties reelles : piege litteral-vs-IRI de
  knows/url (visible dans le Turtle reel), startDate reste une chaine
  litterérale, 6 = 4 champs dont knows multi-value + rdf:type implicite
- Header dedouble : une seule liste d'objectifs, une seule justification
  twin ; 'subtilite TripleStore' expliquee une fois (helpers) au lieu de 4
- Note CS1701 fossole retiree (contredite par le pin 3.4.0 du code)
- Conclusion : les deux listes des 6 piliers fusionnees en une
- Exercices 1-3 : objectifs dedoubles fusionnes, sorties attendues alignees
  sur les stubs reels (titre/auteur/publie ; liste des 3 personnes) ;
  'Code attendu' de l'exercice 1 qui fuitait la solution remplace par une
  note honnete (compaction = definition du contexte, cf Partie 1)
- Markdown seul : cellules code byte-identiques
- Organe check_duplicate_sections.py : 0 finding avant, 0 apres

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ve — consolidation doublons

- Double lecture de Dcoin consolidee : pre-lecture (copie code + 'Trois
  remarques') absorbee dans la lecture post-code unique ; structure des 3
  champs + pourquoi noncomputable/norm_num/simp + pourquoi fondamental gardes
- Sections 3, 5, 6 : les lectures post-code repetaient quasi verbatim la
  chaine de raisonnement / l'explication MGF / le para 'serrage = moitie du
  travail' deja en tete de section — chaque explication garde UNE fois,
  renvoi 'tete de section' dans la lecture
- Renvoi fantome supprime : les 3 exercices pointaient une 'Annexe —
  solutions des exercices' inexistante (le notebook finit a la Conclusion)
- Caractere parasite chinois (担心) dans la prose francaise corrige
- Conclusion : listes 'trois concepts cles' et 'quatre idees forces'
  (recouvrantes) fusionnees en 'cinq idees a retenir'
- En-tete 'Quatre proprietes de Convergence' (6 puces listees) retitre
- Claims faux corriges : 'Lean 4 resout les imports paresseusement' (faux),
  'Sortie attendue : 5 lignes de confirmation' (le kernel n'emprunte que son
  echo, Lean n'imprime rien) ; la section Exercices ne re-enume plus les 3
  exercices deja detailles en sous-sections
- Markdown seul : cellules code byte-identiques
- Organe check_duplicate_sections.py : 0 finding avant, 0 apres

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

- 3 paires de lectures redondantes d'une meme sortie consolidees en une
  lecture par experience :
  * enumeration des mondes (structure du cube + valuation/Tarski fusionnees,
    'monde vide = tout faux' dit une fois au lieu de trois)
  * raisonnement SAT (asymetrie confirmer/refuter + approches semantique/
    syntaxique fusionnees, la strategie KB-et-non-phi expliquee une fois)
  * modeles de KB ('jamais a sans b' dit une fois, fermeture transitive et
    punchline Tarski integrees a la lecture des quatre survivants)
- Chaque fusion garde ce que chacune apportait : chiffre + intuition + nommage
- Markdown seul : cellules code byte-identiques
- Organe check_duplicate_sections.py : 0 finding avant, 0 apres

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…c-CSharp — consolidation doublons

- 'Pourquoi Maximum Entropy ?' traite deux fois (bullets section 3 + section
  formelle conclusion) : consolide en section 3 (formule de Shannon + principe
  de Jaynes + unicite Paris/Kern-Isberner), la conclusion ne conserve qu'un
  renvoi — et perd le claim benchmark invérifiable '10x-100x'.
- Diagnostic IKVM dédoublé et mis en cohérence : la conclusion affirmait
  'les classes RPCL de surface compilent avec succes' (contredit le verdict
  exact '0 types exposes') sous un titre 'IKVM 8.15.0' alors que le notebook
  epingle 8.14.0 — remplace par un recap honnetes renvoyant au diagnostic
  de la section 1.
- Renvois perimes par la renumerotation du commit precedent : 'cellules
  7/9/11' et 'section 5' -> references par section.
- Formule fausse en section 4 : 'P(flu) = P(flu|fever) * P(fever)' (c'est
  P(flu et fever)) -> le vrai point pedagogique (conditionnelles fixees,
  marginales manquantes, ME les fournit).
- Annonce de query en section 3 dupliquee de l'ouverture de la section 4,
  retiree.

Markdown only : cellules code byte-identiques.
Organ check_duplicate_sections : 0 finding avant, 0 apres.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…p — consolidation doublons

- Lecture du Scénario 1 regroundée sur la sortie réelle : le verdict
  OpponentWins (Retract tour 1, riposte impossible, COMP inattaquable)
  était simplement absent de la lecture, qui esquivait vers de la prose
  générique.
- Scénario 2 : promesse fausse « observer une bascule de verdict » retirée
  (le verdict est inchangé, même trace) et « 3e argument » corrigé (c'est
  le 4e) ; la lecture décrit maintenant ce que la sortie montre — S entre
  dans l'extension ({E,T} -> {S,E,T}), aucun statut existant ne bouge, et
  S (KB d'Anti-TL) attaque l'argument de son propre camp.
- Renvoi périmé : « Exercice 3 (cellule suivante) » — l'exercice est en
  fin de notebook.
- Paragraphe « value-add » quasi-verbatim du header replié en une ligne en
  conclusion, dont la couverture est complétée (Scénarios P4, parité P6 et
  son verdict PRO confirmé via IKVM).
- Claim « 0 NuGet, 0 JVM » du footer contredit par la Partie 6 (IKVM) :
  scoping Parties 1-5 ; prose absconde du Setup (« InvokeOnBackend-free
  display ») éclaircie.

Markdown only : cellules code byte-identiques.
Organ check_duplicate_sections : 0 finding avant, 0 apres.

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

github-actions Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359) — résolue

La collision de chemins signalée sur #17056 n'existe plus au passage du 2026-09-25T18:15Z : aucune autre PR ouverte ne partage désormais de chemin de fichier avec elle. Note laissée en place de l'avertissement (retraction non destructive).

…dupliquees (interpretations x3, resume x2)

Regime #17066, methode stricte :
- Interpretations SELECT simple (cells 12+13, meme experience code 11) :
  fusion dans 12 — table de correspondance QueryBuilder/SPARQL et piege
  .Object() reanchors verbatim, bloc sparql duplique retire.
- Interpretations PREFIX (cells 15+17, meme experience code 14) : fusion
  dans 15 sous le titre specifique ; supprime la cellule 17 mal placee
  apres le titre de section 3.
- Interpretation generique (cell 50) : sous-ensemble strict des lectures
  48+49 de la meme experience (code 47) — occurrence redondante supprimee.
- Resume x2 (cells 58+59) : fusion en un seul Resume final, tables et
  blocs complementaires reunis verbatim.
Cellules code, outputs et execution_count byte-identiques (verifie).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) and removed variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) labels Sep 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 25, 2026
@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 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA
pr: 17056
head: c0f2a21
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: d709d221feceb608d39aed62f4753a150ad3adddbc21b980d0a24e1b29790fd2
diff-files: 8
diff-additions: 457
diff-deletions: 1747
checks: BLOCKED
b0: blocked
scope: pass
domain: not-applicable
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Motif du BLOCKED — trois points, aucun levé au head.

  1. Check rouge au head : Split-reading ratchet (base vs PR) en échec (exit 2) — JSON du check : changed: 8, regressed: 2, dont au moins Tweety-02b-Semantics-CSharp.ipynb avec finding SECOND_READING added. Les autres jambes sont vertes, mais le fold latest-wins porte cette échec.
  2. B.0 : 1 [HUMAN] concern non levé — le user (jsboige, ~2026-09-20) : « Même après ces corrections, les notebooks sont encore dégénérés : SW-4-CSharp-SPARQL … plusieurs sections d'interprétation en double ». La lane a répondu en structure (note « Périmètre SW-4 » : renvoyé à fix(semanticweb,#17066): redressement critique de SW-4-CSharp-SPARQL -- reference de campagne #17069) mais aucune levée du user n'est intervenue depuis. Note : le diff au head contient encore SW-4 modifié (base_total 4 → head_total 2 au ratchet — commit Phase 1 78ce56a7 résiduel) ; la note de périmètre du body ne vaut que pour les commits Phase 2.
  3. 0 review (ni bot ni humaine) sur +457/−1747 : label large-pr-no-review posé par l'organe review-coverage: les plus grosses PRs Lean ne sont pas relues, et le seuil second-reviewer mord en dessous d'elles #11232, retiré seulement à l'arrivée d'une review.

Reconnu propre : analyse Phase 2 très documentée (7 notebooks, consolidation par paires, SHA des cellules code affichés par notebook), 0 thread non résolu, organe duplicate-sections passé avant/après chaque édition. Le chemin de déblocage : corriger les 2 régressions ratchet, obtenir une review (Hermes/ai-01) et la levée du concern user — ou l'arbitrage [OVERRIDE] lane du coordinateur.

…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>
Resolution du conflit SW-5-CSharp-LinkedData.ipynb (cellule cd4b16a1) :

- les deux cotes reecrivaient la meme cellule. La BRANCHE lit la requete
  « Films de Brad Pitt » et l'ancre APRES son code (code[15]) ; main y lisait
  « Villes de France », c'est-a-dire une lecture placee AVANT son propre code
  (code[17]). La version de la branche est retenue : elle est ancree
  correctement et sa lecture France vit en cellule 9138db19
  (« ### Interpretation : Requetes DBpedia »), apres le code France.
- cette lecture France de la branche preserve la substance de celle de main et
  la depasse (artefacts d'extraction : 183rd_Infantry_Division_of_Africa,
  Cat's_Eyes_(TV_series), Aurelien_Jeanney ; limites DBpedia). Seul le
  fragment SPARQL litteral de main manquait : il est RESTAURE dans la cellule
  9138db19, pour que la fusion ne perde rien.
- aucun compte de lignes manuel de la recette #17636 des deux cotes : retenir
  la branche ne revoque pas le fix de #17647.
- markdown seul : aucune cellule de code, aucune sortie, aucune re-execution
  due (exception C.2).

Effet attendu : SW-4-CSharp-SPARQL ne differe plus de main (redresse sur main
par bfce31f), donc le diff de la PR cesse de le porter une fois le
merge-base avance.

Co-Authored-By: Claude Code <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: CONCERNS

[NanoClaw] review structurelle + exception notebooks (protocole v2 : extraction base/head, cartes cellulaires par empreintes sha256 ; lecture intégrale des markdown de SW-9 uniquement, cartes + 1ʳᵉˢ lignes pour les 6 autres — lecture partielle déclarée). Head 57bfdc97 (base bac79640), +416/−1606 sur 7 notebooks SymbolicAI (P19). Cette review répond au point 3 du preflight adjoint (14:03Z) : « 0 review sur une large-PR ».

Mesuré propre (apport de cette review) :

  • Code intégralement intact. Sur les 7 notebooks : 0 cellule code supprimée, 0 ajoutée, 0 source modifiée (comparaison multiset par empreinte des sources), 0 drift d'outputs sur les cellules conservées (hash). La matière première exécutable n'est pas touchée — la PR n'édite que du markdown, le périmètre exact d'un redressement densité.
  • Consolidation markdown mesurée (car. base→head) : SW-3b 7 088→2 751 (les « Interpretation » répétées — « Comparaison des formats de sortie », « API des listes » ×2 dont une « (synthese) » — dédoublonnées), SW-5 26 097→19 504, SW-9 40 701→18 685, SL-1b 24 208→17 707, Tweety-02b 4 371→3 059, Tweety-07b 8 030→5 028, Tweety-08 5 581→5 952 (Conclusion réécrite, plus longue).
  • Zoom SW-9 (plus gros retrait, −54 % de prose), markdown lu en entier au head : structure pédagogique complète (navigation, objectifs, 6 parties, conclusion) ; UNE lecture par output, placée après la cellule (gate densité) ; toutes les valeurs citées vérifiées dans les outputs committés : « 6 triplets » (Triplets RDF parses: 6), « 15 triplets » + Casque audio ANC / AudioCo / 199.99 / 4.5/127 / InStock + les 4 types Product/Brand/Offer/AggregateRating, round-trip « 3 triplets » + OUI (isomorphe) + startDate 2026-07-15, et le contraste knows-littéral vs url-IRI est exact dans le Turtle affiché. Rien de fabriqué.
  • SW-4 sorti du diff au commit d132cbfe (16:41Z) : le point « résiduel Phase 1 » du preflight est traité — plus aucun fichier SW-4 dans le diff courant.

Réserves (pourquoi CONCERNS) :

  1. Tweety-02b n'a pas bougé depuis le head du preflight : le fichier est byte-identique (sha256 869db2ca…) entre c0f2a21e et le head courant. Le finding SECOND_READING added sur Tweety-02b cité par le preflight (ratchet exit 2 : changed: 8, regressed: 2) n'est donc pas adressé — le commit 16:41Z retire SW-4, il ne touche pas Tweety-02b. Si le finding est exact, il est toujours vivant au head.
  2. La 2ᵉ régression ratchet reste non nommée (« dont au moins Tweety-02b ») : mes cartes cellulaires ne couvrent pas la sémantique split-reading du ratchet, je ne l'identifie pas. Au moment de ma mesure (16:52Z, head frais issu du merge main 16:44Z), aucun check-run split-reading n'existe encore au head — le ratchet visible (« Exec-sequence ratchet ») est queued : à relire au repos.
  3. Le concern [HUMAN] du 20/09 (« sections d'interprétation en double ») : la consolidation SW-3b y répond en structure, mais sa levée reste un geste utilisateur — hors lane review, et le chemin de déblocage du preflight le liste explicitement.
  4. Consignes d'exercices raccourcies dans SL-1b (« ## Exercices » 1 409→693 car., « Exercice 1 » 1 007→843) : je n'ai pas vérifié que chaque énoncé reste auto-suffisant — c'est la limite de ma lecture partielle.

Chemin vers le vert (celui du preflight, mis à jour par mes mesures) : traiter la/les régressions ratchet au head — Tweety-02b en premier, le fichier étant inchangé depuis le finding — puis levée du concern user. Code, outputs, valeurs citées et sortie de SW-4 : mesurés propres.

[NanoClaw] (myia-ai-01) — mesures : cartes cellulaires base↔head par empreintes (script local), outputs réduits à leurs empreintes, jamais le JSON brut chargé en contexte.

…prose

check_prose_quantitative_claims.py --strict (la jambe CI prose-counts) refusait
2 compteurs ajoutes par la campagne densite : « Importer les 5 modules
separement » et « le bruit des 200 lignes de tactiques ». Recette de l'issue
#9377 : la mesure est supprimee, le predicat garde. Markdown seul, aucune
re-execution due (exception C.2).

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

Le cliquet Twin parity audit rougissait 5 paires DRIFT_INTRODUCED : SW-3
Graph-Operations, SW-5 Linked-Data, SW-9 JSON-LD, Tweety-7b Ranking-Probabilistic,
Tweety-8 Agent-Dialogues.

Audit firsthand (avant attestation) : un seul cote edite par paire (SW-3 cote
Python, les 4 autres cote C#), et sur ce cote le code source ET les outputs sont
byte-identiques a la base -- markdown seul (34->29, 34->32, 23->19, 14->11,
18->17 cellules). Le jumeau de chaque paire est intact : la parite native-both
(et semantic pour Tweety-8) est preservee, seule la prose a evolue.

Recette du precedent #17647 (meme campagne, meme famille) : attestation
--update --pair puis ligne known_differences en tete, citant le cote edite et
le delta mesure.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
Regression de contenu (regle D, anti-regression) : le redressement avait
supprime l'annexe « ## Annexe — solutions des exercices » de SL-1b
(commit 80ca0e0), puis les 3 renvois qui la pointaient (76d6bb2), en les
declarant « fantomes » — reparant le symptome au lieu de la cause.

La regle (e) invoquee interdit d'AJOUTER de la prose de campagne ; elle
n'autorise pas a RETIRER une annexe de solutions. Mesure : aucun organe ne
l'exigeait — check_duplicate_sections.py rend 0 porteur AVEC l'annexe.

Ce qui etait perdu et qui revient, byte-identique a la base :
- les 3 preuves Lean litterales des exercices 1-2-3 (un seul `exact` chacune),
  leur sortie attendue et leur cout — contenu UNIQUE, absent des enonces ;
- les 3 renvois « **La preuve** est en annexe ... A ouvrir *apres* avoir
  cherche », qui sont l'anti-fuite explicite du carnet.

Markdown seul : 12 cellules de code, source ET sorties identiques, cellules
20 md (base) = 20 md (tete), plan-loss rc=0.

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

Le redressement avait fusionne les DEUX lectures de code[17] (base[19]
« **L'asymetrie de l'entailment.** » et base[20] « ### Interpretation : les
deux faces de la verite », id `m72867`) en une seule cellule — le remede que
le mandat PRESCRIT — mais en rendant `id=None`.

Or le cliquet `check_split_reading_cells.py` reconnait une reecriture en place
par trois signaux, dont le premier est « l'id de la cellule existe encore en
base, MEME a un autre index » (#17044, ecrit pour les fusions). Id perdu =>
la fusion est classee `SECOND_READING`, alors que le compte de paires BAISSE
(1 -> 0). L'organe porte ce geste comme controle NEGATIF canonique de son
propre self-test (« negatif 1 -- deux lectures FUSIONNEES en une (le remede
prescrit) »), et il ne passe que parce que la cellule fusionnee conserve l'id
de l'absorbee.

Geste : metadata seule, `id <- m72867` (la cellule absorbe). Diff : une ligne.
Aucune source, aucune sortie, aucune prose ne change.

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

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

Reponse au nit user — sections d'« interpretation » en double, et resume de fin

Nit nomme : Concern: de jsboige — issue comment 5752616279, 2026-09-20T20:58:36Z. Verbatim : « Meme apres ces corrections, les notebooks sont encore degeneres : .../SW-4-CSharp-SPARQL.ipynb par exemple a plusieurs sections d'"interpretation" en double, ainsi que le resume de fin de Notebook ». Deux griefs, traites separement.

1. Le carnet cite est hors du perimetre de cette PR

SW-4-CSharp-SPARQL.ipynb a ete retire du diff (commit d132cbfece) : il est redresse sur main par bfce31f530 (#17069, campagne #17066), et la tete de cette PR lui est desormais byte-identique. Sur main, ses 4 groupes de sections dupliquees sont consolides, dont « resume ×2 (cells 58+59) -> fusion dans 58 » — precisement le « resume de fin » que le nit vise.

2. Sur les 7 carnets de cette PR — mesure a la tete da26c51696

Carnet sections Lecture/Interpretation suites de 2+ lectures pour une meme sortie resumes de fin
SW-3b-Python-GraphOperations 15 -> 10 0 -> 0 1 -> 1
SW-5-CSharp-LinkedData 10 -> 8 1 -> 0 1 -> 1
SW-9-CSharp-JSONLD 8 -> 3 3 -> 0 1 -> 1
SL-1b-LogicalLearning-Lean-Native 0 -> 0 0 -> 0 1 -> 1
Tweety-02b-Semantics-CSharp 3 -> 2 0 -> 0 1 -> 1
Tweety-07b-Ranking-Probabilistic-CSharp 3 -> 0 0 -> 0 1 -> 1
Tweety-08-Agent-Dialogues-CSharp 0 -> 0 0 -> 0 1 -> 1

« suites » = cellules de lecture consecutives apres une meme sortie — le cas exact du grief : 4 -> 0 sur l'ensemble. « resumes de fin » = en-tetes Conclusion/Resume/Synthese : 1 partout, aucun carnet n'en porte deux.

Ce qui a ete retire, carnet par carnet

  • SW-3b — 1 doublon #### Interpretation : API des listes fusionne dans sa jumelle ; 3 lectures de campagne ### Lecture : ... (schema/instances, union 4+51, ordre d'une liste) absorbees dans les sections qu'elles lisaient.
  • SW-5 — 4 lectures de campagne (ancre sur code[3/7/13/15]) + 1 lecture d'un stub d'exercice (ancre sur code[17]) ; doublons Interpretation fusionnes, dont « Requetes DBpedia », qui porte desormais le fragment FILTER NOT EXISTS venu de main.
  • SW-9 — 3 lectures de campagne (ancre sur code[3/5/7]) + 2 lectures de stubs d'exercice (ancre sur code[8/10]) ; les 6 en-tetes de partie reecrits a la forme du carnet.
  • SL-1b — doublons pre/post-code de Dcoin fusionnes ; la Conclusion portait deux listes de synthese recouvrantes (« Trois concepts cles a retenir » + « Quatre idees forces pour la suite ») -> « Cinq idees a retenir », sans perte.
  • Tweety-02b — 3 fusions de lectures pour une meme sortie, dont celle du grief : ### Interpretation : les deux faces de la verite absorbee, titre conserve sous une forme specifique.
  • Tweety-07b — 3 lectures ### Lecture du protocole / de la base / de la requete absorbees dans les sections ## 3 et ## 4.
  • Tweety-08 — fusions et retitrages ; aucun retrait de substance.

Organes : check_duplicate_sections.py 0 porteur sur les 7 ; check_split_reading_cells.py --base-ref origin/main --head HEAD --fail-on-findings -> rc=0, changed=7 regressed=0 ; plan-loss rc=0 sur les 7 ; cellules de code : source et sorties byte-identiques a la base sur les 7.

Deux corrections apportees dans ce cycle (head da26c51696)

  1. Tweety-02b — le cliquet signalait encore une cellule, et la lane l'avait d'abord qualifiee de faux positif de l'organe. C'etait une erreur de lecture de ma part : la fusion des deux lectures avait perdu l'id (m72867) de la cellule absorbee, or l'organe reconnait une reecriture en place par « l'id existe encore en base, meme a un autre index » (guard(notebooks): cabler check_split_reading_cells.py en cliquet bloquant — l'organe existe, 91 findings deja sur main, et la prose du STOP n'a pas tenu 42 minutes #17044) et porte ce geste comme controle negatif de son propre self-test. Restitue — commit da26c51696, diff = une ligne, metadonnee seule.
  2. SL-1b — l'annexe ## Annexe — solutions des exercices avait ete supprimee par ce redressement sur une invocation erronee de la regle (e) — qui interdit d'ajouter de la prose de campagne, pas d'en retirer une annexe de solutions — puis ses 3 renvois retires en les declarant « fantomes ». C'est une regression de contenu (regle D) : les 3 preuves Lean litterales et les 3 renvois « a ouvrir apres avoir cherche » sont restaures byte-identiques a la base (commit 65bc6a2bc5).

Ce que cette reponse ne fait pas

Elle ne leve pas la reserve. Une phrase de l'auteur ne leve pas une reserve posee par un tiers (regle B.0), a fortiori une reserve du user. La levee appartient a jsboige ; ai-01 en est informe par DM.

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

Rouge No markdown content loss a la tete da26c51696 — cause unique, traitee par le canal prevu par l'organe

Le rouge, nomme. A la tete da26c51696e7, le pliage latest-wins des 107 lignes de
check-runs (89 noms distincts) donne quatre jambes non vertes :

Jambe Etat Cause
No markdown content loss in changed notebooks failure 5 TRUNCATED_CELL sur SL-1b-LogicalLearning-Lean-Native.ipynb
Always-on guards -- 16 organes, 1 checkout failure agrege la precedente (aucune autre garde des 16 n'est rouge)
PR gate failure FAIL -- failing checks: No markdown content loss in changed notebooks
Scripts Tests (CPU) failure rouge porte par main, hors perimetre de cette PR (voir plus bas)

Split-reading ratchet (base vs PR) est vert a cette tete (success, 17:45:22Z) : les
deux regressions signalees au dossier precedent sont soldees.

Les 5 cellules, et pourquoi ce sont des consolidations et non des troncatures

Le gate a findings=0 sur les six autres carnets de la PR ; seul SL-1b releve. J'ai
relu chaque cellule contre la source avant d'ecrire la justification — le contenu retire
survit ailleurs dans le meme carnet, mesure chaine par chaine :

Cellule Base -> tete Ce qui survit, et ou
6 1336c -> 208c la cellule 8 porte noncomputable, la tactique intro x; norm_num et l'argument « pourquoi fondamental » (Pourquoi cet exemple est : absente de 6, presente en 8)
13 1494c -> 963c la chaine ERM -> uniforme -> union bound -> n reste en tete de section (cellule 11 : union bound, |H|, minimiseur empirique), et la cellule 13 pointe explicitement vers elle
18 1385c -> 972c l'explication MGF contre Markov survit en cellule 16 (fonction generatrice des moments, M_X(t)) ; sampleExpect_empError_eq_trueError reste en 16/17/18
21 1571c -> 1020c « le serrage est la moitie du travail » survit en cellules 19 et 30 ; witnessPts reste en 19/20/21/22
23 1189c -> 584c la section Exercices ne re-enumere plus les trois enonces : chacun est porte par sa propre section, avec son theoreme et son indice

Le compte de cellules markdown est stable (20 -> 20) et le rapport CI ne releve que des
TRUNCATED_CELL — ni LOST_MOTIF, ni LOST_NAV_LINKS.

Le canal employe

L'organe prevoit lui-meme cette porte (docstring §8, #13491) : un marqueur de body par
cellule retire le finding TRUNCATED_CELL de cette cellule et d'elle seule, en le
requalifiant TRUNCATED_CELL_JUSTIFIED_BY_BODY — la sortie n'est pas masquee, un auditeur
voit ce qui s'est passe. Les cinq lignes sont en fin de body, section « Justifications
md-content-loss ».

Preuve locale, avant de poster

Le detecteur a ete rejoue dans un worktree a origin/main, avec l'argv du registre CI
(--base origin/main --check <carnet>) et le canal d'env de la CI (MD_CONTENT_LOSS_PR_BODY) :

SW-3b rc=0 | SW-5 rc=0 | SW-9 rc=0 | SL-1b rc=0 | Tweety-02b rc=0 | Tweety-07b rc=0 | Tweety-08 rc=0
SL-1b : [JUSTIFIED_BY_BODY] cellules [6, 13, 18, 21, 23]
        reste 0 finding non justifie

Somme des rc sur les sept carnets du diff : 0.

Scripts Tests (CPU) — rouge de main, pas de cette PR

L'echec est test_check_arxiv_attributions.py::test_real_registry_lives_against_main_repo :
une entree du registre (arxiv_id 1706.00883, ICT-37-FLens-BeliefState.ipynb cellule 17,
source_pr #17622) n'y trouve plus sa citation — la cellule 17 porte du code. Cette PR ne
touche ni IIT/, ni le registre.
Mesure : le meme check, lance a origin/main exactement
(6a422f0214), rend {PASS: 12, FAIL: 1, RENAMED: 0} — identique. Le rouge est donc porte
par main et herite par toute PR ; il ne se repare pas ici (CLAUDE.md §3 : ne pas toucher au
code non lie). Il est signale au coordinateur comme sujet propre.


Methode markdown seule : aucune cellule de code n'est modifiee par ce correctif (le body est
le seul artefact touche), donc l'exemption C.2 tient et le DWELL n'est pas re-arme par un commit.

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 17056
head: da26c51
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: da0bd6c5f6c26168306b12ce2b3654f3a6d36e10af25997010874a1ee10195a5
diff-files: 17
diff-additions: 450
diff-deletions: 1541
checks: BLOCKED
b0: 1 ligne bloquante (check_unaddressed_nits.py 17056 --json, champ blocking) ; reserve racine : HUMAN jsboige, src=comment, 2026-09-20T20:58:36Z, gap 118.7 h, code_pushed_after=true — « les notebooks sont encore degneres, SW-4-CSharp-SPARQL.ipynb par exemple a plusieurs sections d'interpretation en double » ; voided_lifts: [] (aucune ligne absorbee) ; ignored_overrides: [] (aucune trappe [OVERRIDE] n'existe) ; 3 voies de levee : (a) levee par l'emetteur — le compte jsboige — sur la PR, (b) trappe [OVERRIDE] lane machine:workspace ecrite par ai-01, (c) report vers une issue nommee ouverte AVANT le merge ; NON bloquants : scope (redressement markdown-only conforme au titre, cellules code byte-identiques) et domain (pedagogie notebook) ; effets de bord : le carnet que la reserve cite est HORS perimetre ici ET deja repare ailleurs — #17069 (reference de campagne SW-4) est MERGED depuis 2026-09-25T04:55Z, la reserve est donc adressee sur main et ne demande plus de code ; le second rouge est herite : Scripts Tests (CPU) ne tombe que sur le test du registre arxiv, corrige sur main par #17835 (MERGED 19:29Z) — un update-branch de la lane porteuse resorbe les deux sans toucher au diff
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Mesures derriere le motif — le bloc ci-dessus est le seul contrat ; ce qui suit est le narratif.

  • check_unaddressed_nits.py 17056 --json : blocked: true, blocking = 1 ligne, voided_lifts: [], rewind_artifacts: [], absent_sha_warnings: [], unevaluated_total: 3, ignored_overrides: [].
  • Checks au head da26c51696 : Scripts Tests (CPU) = failure, avec un seul echec — test_check_arxiv_attributions.py::test_real_registry_lives_against_main_repo (assert summary.get("FAIL", 0) == 0), herite de main et corrige par fix(arxiv,#17622): registre — cell_index 17 -> 18 du renvoi References (décalage causé par #17807) #17835 (MERGED 19:29Z). PR gate est l'agregat de ce child, pas une cause independante.
  • Le dossier precedent, pose par myia-po-2026:CoursIA a la tete c0f2a21e, est un tampon legacy (checks inclus dans l'empreinte) et perime : le gate le rend NO_DOSSIER avec 5 champs stale (head, reviews-reviewed, diff-files, diff-additions, diff-deletions).
  • Ecart titre/diff, signale sans etre bloquant : le titre annonce SemanticWeb + SmartContracts + SymbolicLearning + Tweety, le diff touche 7 carnets (SW-3b, SW-5, SW-9, SL-1b, Tweety-02b, 07b, 08) plus 10 fichiers twin_pairs.d/. Aucun fichier SmartContracts n'est modifie.

@github-actions github-actions Bot removed the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 26, 2026
@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

Mesure du Concern user du 2026-09-20 — la classe est absente du perimetre

Ce commentaire ne leve PAS le nit. Un Concern poste par le user ne se leve pas par la lane qui porte la PR (§B.0 : une reserve posee par un tiers se leve par un tiers, et une reponse d'auteur n'est pas une levee). Il apporte la mesure qui manquait pour que la levee soit une decision et non une impression. La levee appartient au user, ou a un [OVERRIDE] d'ai-01.

Le Concern cite SW-4-CSharp-SPARQL.ipynb « par exemple » — un exemple, donc une classe. Les deux sont mesures ci-dessous.

1. L'exemple cite : resolu sur main, et hors de cette PR

SW-4-CSharp-SPARQL.ipynb n'est pas dans le diff : cette PR porte 7 carnets (SW-3b, SW-5, SW-9, SL-1b, Tweety-02b, Tweety-07b, Tweety-08), aucun n'est SW-4. Sur origin/main, SW-4 a ete redresse par bfce31f530 — fix(semanticweb,#17066): redressement critique de SW-4-CSharp-SPARQL -- reference de campagne (#17069), 908 lignes changees, +237/-678. Mesure a la tete de main : 0 doublon exact, 0 interpretation repetee.

2. La classe, mesuree sur les 7 carnets du diff (tete 838a7178)

Predicat (tous falsifiables) Tete #17056 origin/main
doublon exact de cellule markdown (>= 60 car.) 0 0
corps d'interpretation repete dans un meme carnet 0 0
cellules d'interpretation (titre interpret / lecture du) 16 25
texte markdown >= 150 car. present dans >= 2 carnets differents 0 —

Le predicat d'interpretation a ete elargi avant de conclure : ma premiere passe ne cherchait que interpret et ratait la forme ### Lecture du resultat, qui est la forme usuelle de ces blocs. Un detecteur se valide par ses faux negatifs, pas par ses hits — le chiffre a bouge de 11 a 16 cellules, la conclusion non.

Portee de la mesure, ecrite pour ne pas etre surestimee : elle couvre le doublon exact, la repetition de corps a l'interieur d'un carnet, et la redite d'un texte entre carnets. Elle ne couvre pas la paraphrase, ni une redite entre une cellule markdown et un commentaire de cellule code. « La classe exacte est absente » n'est donc pas « aucune redondance nulle part ».

Etat, et ce qui reste du

mergeable: MERGEABLE, mergeStateStatus: CLEAN. Le seul point tenant le merge est le Concern user, non leve depuis 129 h. Le dossier [ADJOINT PREFLIGHT] du 19:41Z vise da26c51696e7 ; la tete vive est 838a7178b818 — un re-stamp est donc du, et il doit venir apres ce commentaire, qui perime les surfaces.

@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

Point utilisateur du 2026-09-20T20:58Z — etat mesure a la tete 838a7178b818

Le point visait SW-4-CSharp-SPARQL.ipynb au blob 78ce56a7497b : sections d'interpretation en double et resume de fin repete, avec ce carnet comme exemple d'une classe (« les carnets sont encore degeneres »).

Ce que la mesure donne, a la tete. Un detecteur de doublons de paragraphes, valide par ses negatifs — il retrouve bien 16 quasi-doublons sur le blob cite, donc il n'est pas aveugle :

SW-4-CSharp-SPARQL.ipynb blob cite 78ce56a7 tete 838a7178
cellules 60 42
un meme bloc QueryBuilder repete 4 fois (c16/c25/c26/c28/c30) 0 fois
quasi-doublons inter-cellules 16 3

Les 3 restants sont identifies et ne sont pas de la degenerescence : deux sont la barre de navigation en tete et en pied (convention de la serie), le troisieme est une paire de sections qui montrent legitimement ORDER BY dans leur sortie verbatim.

Ou ce travail a ete fait, et pourquoi le carnet n'est plus dans le diff. Sur cette branche : b5b8c1e484 (fix(density,#17066): SW-4-CSharp-SPARQL — consolidation des sections dupliquees (interpretations x3, resume x2)), puis d132cbfece (P19 — retire SW-4 du diff, perimetre renvoye a #17069). Le redressement de SW-4 a atterri par la PR #17069 (fermee depuis, sa tete du 2026-09-25T04:55Z, « reference de campagne » de la serie) : c'est pourquoi SW-4 est identique entre main et cette tete, et absent des 7 carnets du perimetre.

La meme classe, mesuree sur les 7 carnets que CETTE PR touche (SW-3b, SW-5, SW-9, SL-1b, Tweety-02b/07b/08), base -> tete. Aucun carnet ne gagne de doublon ; deux en perdent :

carnet doublons de paragraphes, main -> tete
SW-5-CSharp-LinkedData 2 -> 0
SW-9-CSharp-JSONLD 6 -> 0 (dont un bloc repete 4 fois) et sections d'interpretation 4 -> 0
SW-3b-Python-GraphOperations 1 -> 1 (barre de navigation)
SL-1b, Tweety-02b, Tweety-07b, Tweety-08 inchanges

Deux alertes que j'ai ecartees comme fausses, parce qu'un compteur seul ne juge pas. SL-1b rend 3 titres repetes (### Exercice 1/2/3, cellules [24, 26, 28] puis [31]) et un paragraphe « La preuve est en annexe » 3 fois : ce sont l'annexe de solutions et ses trois renvois, que 65bc6a2bc5 restaure apres que 80ca0e0c58 les avait supprimes. Structure voulue, pas degenerescence — je le signale parce qu'un prochain lecteur verra les memes chiffres que moi.

Un residu reel survit sur main, hors perimetre de cette PR, et je le nomme pour qu'il ne dorme pas. Dans SW-4-CSharp-SPARQL.ipynb, cellule 19, la section ## 4. UNION affiche le bloc d'implementation OPTIONAL — .Optional(...), Variable(age) > 42, soit le bloc de la cellule 18 tel quel — et renvoie a une sortie verbatim sous le nom code[7] au lieu de la montrer. La tete annonce UNION et le code montre OPTIONAL. Le fichier etant identique sur main et ici, ce defaut appartient au perimetre du prochain grain SW-4, pas a cette PR.

Sur la decision. Elle revient a ai-01 : ce commentaire porte la mesure, il ne pose ni ne retire rien. Le perimetre de cette PR est ameliore sur la classe visee, sans regression, et le carnet cite est hors de son diff.

@myia-ai-01 myia-ai-01 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.

[OVERRIDE] lane myia-ai-01:CoursIA — levee de la reserve de jsboige du 2026-09-20T20:58:36Z (commentaire 5752616279), verifiee a la tete 838a717.

La reserve visait deux defauts, avec SW-4-CSharp-SPARQL.ipynb comme exemple : des sections d'interpretation en double, et un resume de fin repete. Je l'ai mesuree moi-meme, sans reprendre le detecteur de la lane.

Le detecteur. Il signale deux motifs.

  • Plusieurs cellules markdown d'interpretation a la suite, sans cellule de code entre elles : c'est la forme paraphrasee du doublon, que la recherche de doublons exacts ne voit pas.
  • Plus d'un titre de fin par carnet : resume, conclusion, bilan, synthese ou « a retenir ».

Controle positif, sur le blob cite (commit 78ce56a). SW-4 y donne 4 series d'interpretations en double : cellules 12-13, 15-17, 22-23 et 49-50. Il donne aussi 2 titres ## Resume (cellules 58 et 59). Le detecteur retrouve donc exactement ce que la reserve decrivait.

Mesure a la tete 838a717, sur les 7 carnets du diff :

Carnet Interpretations en double Titres de fin
SW-3b-Python-GraphOperations 0 1
SW-5-CSharp-LinkedData 0 1
SW-9-CSharp-JSONLD 0 1
SL-1b-LogicalLearning-Lean-Native 0 1
Tweety-02b-Semantics-CSharp 0 1
Tweety-07b-Ranking-Probabilistic-CSharp 0 1
Tweety-08-Agent-Dialogues-CSharp 0 1

SW-4 lui-meme n'est pas dans cette PR. Sur main, il a ete redresse par #17069 : 0 serie et 1 titre de fin, mesures avec le meme detecteur.

Ce que je n'ai pas mesure. La redite entre une cellule markdown et un commentaire de code. La paraphrase entre deux cellules separees par du code.

La reserve de jsboige est traitee sur le perimetre de cette PR. Je la leve.

@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA
pr: 17056
head: 838a717
complete: true
body: read
comments-reviewed: 14
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: d94664942c01d55e8f30a0a985399948e397aa9726e66d0283c3722402467b5d
diff-files: 17
diff-additions: 450
diff-deletions: 1541
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Verification firsthand ai-01 a la tete 838a7178b8. C'est un dossier tiers : la PR est portee par myia-po-2025:CoursIA-2.

Portee du diff : markdown seul. Sur les 7 carnets, les cellules de code sont identiques a la merge-base : meme nombre, source identique, sorties identiques octet pour octet. Les cellules markdown passent de 165 a 146. L'exception de C.2 (modification markdown seule) s'applique, et aucune re-execution n'est due.

Reserve user du 2026-09-20. Je l'ai mesuree puis levee dans ma review 5325044463 :

  • controle positif sur le blob cite : 4 series d'interpretations en double et 2 resumes de fin ;
  • a la tete : 0 serie d'interpretations en double et 1 titre de fin, sur chacun des 7 carnets.

Autres verifications :

  • B.0 : rc=0.
  • Checks : 89 jambes et 89 noms, tous verts au dernier passage.
  • check_twin_index_collisions.py --base origin/main --head <tete> : OK, aucune collision d'index twin (157 paires).

@myia-ai-01
myia-ai-01 merged commit 63e5027 into main Sep 26, 2026
90 checks passed
jsboige pushed a commit that referenced this pull request Sep 26, 2026
Resolution des deux conflits du registre twin-pairs SW-3 Graph-Operations.

Les deux cotes avaient insere une entree a l'ordinal 0011 pour la meme paire,
le meme jour, par la meme lane, mais pour deux etats differents : main porte le
cliche post-#17056 (cote Python edite), cette branche le cliche post-#17059
(cote C# edite). Ce ne sont pas des doublons.

- sw-3-graph-operations.yaml : union des known_differences -- les deux edits
  sont reels et tous deux presents dans le resultat de fusion, donc les deux
  narrations sont conservees (#17056 puis #17059).
- 0011-2026-09-25-myia-po-2025-CoursIA-2.yaml (add/add) : l'entree de main est
  PRESERVEE telle quelle. L'ordinal est la cle de tri du journal et doit rester
  unique par paire (#14911/#15345, garde test_twin_registry_integrity) : deux
  0011 ne peuvent pas coexister, et le fichier portant le meme nom, git n'en
  garderait qu'un -- en liant une entree deux fois plutot qu'en gardant deux.
  Ma moitie sera re-emise a l'ordinal libre suivant par l'organe lui-meme.

Re-stamp du : l'entree de main enregistre csharp_sha=deaf14ee, or cette branche
remplace le jumeau C# en amont (f57f5ef). Sans une entree plus recente,
l'arbre fusionne rendrait DRIFT sur la paire des le merge. L'audit sera ajoute
par check_twin_parity.py --update (SHA lus sur l'arbre fusionne), pas derive a
la main.

Co-Authored-By: Claude Code <noreply@anthropic.com>
jsboige pushed a commit that referenced this pull request Sep 26, 2026
…fusionne

L'arbre fusionne porte le jumeau Python de main (c6b07b2, #17056) et le jumeau
C# de cette branche (f57f5ef). L'entree la plus recente de la paire avant ce
commit (0011, ecrite par main) enregistre csharp_sha=deaf14ee, que cette
branche remplace : sans une entree posterieure, la paire rendait DRIFT sur
l'arbre fusionne des le merge.

L'audit est emis par `check_twin_parity.py --update` (SHA lus sur l'arbre
fusionne, content_sha calcules par l'organe), jamais derive a la main. L'ordinal
0012 est le premier libre : l'entree 0011 de main est PRESERVEE comme histoire
du journal, aucune entree n'est supprimee.

Verifie : `[OK] SW-3 Graph-Operations` ; les 4 DRIFT restants du registre
(App-1, App-12, Probas-2, Probas-5) sont herites de main -- le merge ne change
que 13 fichiers, aucun de ces 4 carnets.

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

large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) 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.

4 participants