Skip to content

enrich(sw,#13410): SW-3-CSharp-GraphOperations density 599 -> 1560 c/cell - #14113

Closed
jsboige wants to merge 5 commits into
mainfrom
feature/c124-semanticweb-csharp-graphoperations-density
Closed

jsboige wants to merge 5 commits into
mainfrom
feature/c124-semanticweb-csharp-graphoperations-density

Conversation

@jsboige

@jsboige jsboige commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-dotnet -- lane myia-po-2026:CoursIA -- prev: MED/notebook-python #14112 (cycle 123)

Summary

Enrichissement markdown-only de SW-3-CSharp-GraphOperations.ipynb (SemanticWeb C#/.NET, dotNetRDF 3.2.1) : 599 → 1560 c/code-cell (+160 %), plancher 1200 largement franchi.

Rotation R6 (variete obligatoire) : c123 = MED/notebook-python (ML/DataScienceWithAgents NumPy). Cycle c124 = MED/notebook-dotnet sur SemanticWeb -- NOUVEAU GENRE (C#/.NET) + NOUVELLE FAMILLE (SemanticWeb), distincts de tous les c110-c123 (qui etaient tous Python). Meme protocole (umbrella #13410) : code byte-identique, anchors sur sorties kernel in-place, zero re-execution.

Changement

Fichier Type Effet
MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-3-CSharp-GraphOperations.ipynb markdown-only +24 cellules etendues + 4 nouvelles cellules d'interpretation inserees

Cellules etendues (24) : cells [0, 2, 4, 6, 8, 11, 14, 16, 19, 21, 22, 24, 25, 28, 30, 32, 33, 35, 36, 37, 41, 45, 49, 50] - chacune ancree sur la sortie verbatim de la cellule code qui suit :

  • cell[0] Plan + objectifs + substance pedagogique (5 sections : Lecture / Ecriture / Fusion / Selection / Listes RDF)
  • cell[2] Importation des espaces de noms dotNetRDF, sortie verbatim code[3] dotNetRDF 3.2.1 pret.
  • cell[4] Section 1 Lecture de fichiers RDF, sortie verbatim code[5] Fichier : 4 triplets / Stream : 4 triplets
  • cell[6] StringParser auto vs NTriplesParser specifique, sortie verbatim code[7] StringParser (auto) : 1 triplet / NTriplesParser : 1 triplet
  • cell[8] CountHandler streaming sans charger en memoire, sortie verbatim code[9] animals.ttl : 51 triplets (comptes sans charger en memoire)
  • cell[11] Section 2 Ecriture de graphes RDF, sortie verbatim code[12] (NTriples canonique)
  • cell[14] Lecture des 4 formats de serialisation (NTriples/Turtle/RDF/XML/JSON-LD)
  • cell[16] RDF/XML deux methodes (Helper/StringWriter), sortie verbatim code[15] Helper : 1017 car. / StringWriter : 1017 car.
  • cell[19] Section 3 Fusion de graphes, semantique Merge (triplets identiques non dupliques), sortie verbatim code[20] Graphe 1 (Example.ttl) : 4 triplets / Graphe 2 (animals.ttl) : 51 triplets
  • cell[21] Interpretation fusion : non-idempotente si blank nodes partages
  • cell[22] Section 4 Selection de triplets (par sujet/predicat/objet), sortie verbatim code[23] === Triplets rdf:type ===
  • cell[24] Selection combinee et LINQ, sortie verbatim code[26] === Noms des animaux ===
  • cell[25] LINQ pour requetes complexes, pattern SPARQL-like
  • cell[28] Section 5 Listes RDF (chaines rdf:first/rdf:rest), sortie verbatim code[29] GetListItems : [1, 2, 3]
  • cell[30] Interpretation structure interne (avec ajout sur items vs noeuds, representation interne)
  • cell[32] Ajout/suppression d'elements (AddToList, RemoveFromList), sortie verbatim code[34] Avant : [1, 2, 3] / AddToList : [1, 2, 3, 4]
  • cell[33] Interpretation API des listes (AssertList/RetractList/AddToList/RemoveFromList), sortie verbatim code[31] RetractList : 11 -> 7 triplets
  • cell[35] Interpretation API listes (tableau 6 operations), sortie verbatim code[31]
  • cell[36] Interpretation creation/suppression, sortie verbatim code[31]
  • cell[37] Ajout/suppression d'elements dans une liste RDF
  • cell[41] Exemple guide 1 (Charger/explorer), sortie verbatim code[38] Total triplets : 51 / Triplets rdf:type :
  • cell[45] Exemple guide 2 (Fusionner/serialiser), sortie verbatim code[42] Avant fusion - g1: 4, g2: 51 / Apres fusion : 55 triplets
  • cell[49] References savantes (RDF 1.1 W3C, Turtle, dotNetRDF docs, livres)
  • cell[50] Resume avec tableau 5 sections / APIs principales

Nouvelles cellules (4) :

  • Apres code[3] : Lecture de l'environnement dotNetRDF -- using statements, 3 namespaces principaux, compatibilite .NET Interactive.
  • Apres code[12] : Lecture des formats de serialisation -- comparaison NTriples (verbeux canonique) / Turtle (compact recommande) / RDF/XML (legacy) / JSON-LD (web moderne).
  • Apres code[23] : Lecture de la selection par predicat rdf:type -- pattern de base (selection par predicat = O(N) une passe), implementation dotNetRDF (g.CreateUriNode, GetTriplesWithPredicate).
  • Apres code[46] : Lecture de la liste RDF Alice/Bob/Charlie -- conversion string -> RDF via g.CreateLiteralNode(value), cas d'usage (schema:knows, itemListElement, sequences).

Note : new_after_code29 initialement prevu a ete integre comme extension de la cellule ORIGIN cell[30] (md "Interpretation : Structure interne") plutot qu'insere comme cellule separee. Raison : l'insertion entre code[29] et md Interpretation aurait cree un finding INTERP_BEFORE_CODE (le scanner exige qu'une interpretation md soit precedee par code). Le contenu pedagogique items-vs-noeuds + representation interne est preserve dans l'extension de cell[30].

Pourquoi ce notebook

Per mesure ground-truth direct disque :

  • SW-3-CSharp-GraphOperations.ipynb 599 c/cell <- choisi : 20 code cells, kernel .NET Interactive + dotNetRDF 3.2.1, sorties tres riches (4 triplets, 51 triplets, 55 fusion, formats de serialisation, listes RDF).
  • Famille SemanticWeb : totalement nouvelle (vs SymbolicAI/Lean x4, Argument_Analysis c122, Search c119/c121, GenAI/Fallacy x2, ML/DataScience c123).
  • Genre C#/.NET : nouveau genre (tous les c110-c123 etaient Python).
  • Substantif : dotNetRDF = bibliotheque C# de reference pour RDF (Rob Vesse, ~15 ans d'activite). Le notebook couvre les 5 operations fondamentales (lecture / ecriture / fusion / selection / listes) qui sont la base de tout traitement RDF ulterieur.
  • Cas pedagogique Prong B applicable (sota-not-workaround) : on utilise la vraie bibliotheque dotNetRDF (lib C# de reference, ~150k downloads NuGet), pas une reimplementation jouet.

EPIC implicite : la famille SemanticWeb etait totalement absente du pool #13410 (seulement SymbolicAI/Lean, GenAI, Search, GameTheory, Lean). Ce compagnon comble ce trou et prepare le terrain pour les notebooks suivants de la serie SemanticWeb (SW-4 OWL, SW-5 SPARQL, SW-6 Inference, etc.).

Pool cross-lane autorisation respectee (ML/DataScience c123 -> SemanticWeb C#/.NET c124, rotation R6 effective).

Validations

  • validate_pr_notebooks.py origin/main : 1/1 PASS (20 code cells, byte-identique, kernel .net-csharp).
  • scan_cell_ordering.py --check-interp-anchor : 1/1 clean (0 findings). Note : new_after_code29 a ete integre comme extension de cell[30] (md Interpretation ORIGIN) pour eviter un finding INTERP_BEFORE_CODE.
  • pedagogy_density.py : 1560 c/code-cell (>= 1200 floor, cible 1500 franchie a 104%).
  • Pre-commit hooks (gitleaks, dotnet-probes, papermill-paths, fix-hr-separator, markdown-rendering-guard, fix-source-newlines, H.3 un-executed, source-compilable) : all Passed sans auto-fix.
  • Code byte-identique : verifie sur les 20 cellules code (sources + outputs + execution_counts). Les insertions et extensions sont toutes en markdown.

Anti-regression D + Stop & Repair

  • Zero modification aux 20 cellules code du notebook C# (sources / outputs / execution_counts byte-identique a origin/main).
  • Zero hand-edit d'output (Stop & Repair respecte).
  • Catalog COURSE_CATALOG.generated.{json,md} non touche (RÈGLE HARD 1 catalog-pr-hygiene).

Refs

Liens

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

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

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Sep 1, 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 7.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 10.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 14.8s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 11.2s
Search-1-StateSpace.ipynb ✅ SUCCESS 8.2s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 6.3s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 59.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 7.7s

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

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

⚠️ Detector abstained (merge-base introuvable, shallow fetch or unanchored branch).

c.415 (#11873): scope = notebooks CHANGED in this PR, not the whole corpus.
See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 pathologie.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #14113 (enrich(sw,#13410): SW-3-CSharp-GraphOperations density 599 -> 1560 c/cell) 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 commented Sep 2, 2026

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 sera retire des qu'une review arrive (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.

…cell

- Genre MED/notebook-dotnet (NEW GENRE c110-c124: C#/.NET)
- Famille SemanticWeb (NEW FAMILY)
- Markdown-only: +24 cellules etendues + 4 nouvelles cellules interpretation
- Code byte-identique (20/20 cells, sources/outputs/exec_counts)
- Validators: validate_pr_notebooks PASS, scan_cell_ordering clean, pedagogy_density 1560 c/cell >= 1200
- Pre-commit hooks all PASS
…bottom nav, phantom 4-OWL corrected)

Le garde md-content-loss flaggait LOST_NAV_LINKS 5->2 : l'enrichissement
avait laisse tombe le bloc Prerequis (lien SW-2-RDFBasics) et le pied de
navigation, et la barre top pointait SW-4-CSharp-OWL.ipynb (fichier
inexistant -- le suivant reel est SW-4-CSharp-SPARQL.ipynb). Cibles
alignees sur main, footer restaure. Markdown seul (C.2 exception).
detect_md_content_loss : findings=0.
@jsboige
jsboige force-pushed the feature/c124-semanticweb-csharp-graphoperations-density branch from 51642a6 to ff3304d Compare September 3, 2026 01:22

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

[NanoClaw] structural review

Review structurelle par diff programmatique base (main, inchangé sur ce fichier depuis le 15/08) ↔ head ff3304d :

Vérifié conforme :

  • Code byte-identique confirmé : sources, outputs et execution_count des 20 cellules code strictement identiques base→head — le claim « zero re-execution » tient. Cohérent avec la CI (Notebook PR Validation PASS, 20 code cells).
  • Ancrages vérifiés : les sorties verbatim citées dans le body (dotNetRDF 3.2.1 pret., Fichier : 4 triplets / Stream : 4 triplets, StringParser (auto) : 1 triplet) figurent toutes dans les sorties committées du head.
  • Markdown-only confirmé : 27 cellules préservées à l'identique, 2 étendues (source de base = préfixe), 22 réécrites, nouvelles cellules toutes markdown (51 → 55 cellules). Scan secrets clean.

Préoccupations :

  1. Double-livraison avec #14168 (bloquant pour l'une des deux, à arbitrer) : #14168 enrichit le même notebook depuis la même base (599 → 2174 c/code-cell, 19 md ext + 7 interp) et est toujours open, sans review. L'organe path-collision l'a signalé en advisory, mais 24 h plus tard les deux PRs concurrentes livrent le même travail — celle qui merge en second est du travail + des runs CI perdus, et les enrichissements ne sont pas superposables (réécritures in-place différentes des mêmes cellules). Arbitrage de lane nécessaire avant merge.

  2. Diff non additif — contenu supprimé non paraphrasé : la ligne ### Duree estimee : 50 minutes disparaît sans survivre sous aucune forme (aucune mention de durée dans le head), et la liste d'objectifs « A la fin de ce notebook, vous saurez : Lire/Écrire/Fusionner/Sélectionner » est restructurée (le contenu subsiste via le plan en 5 sections, mais pas mot à mot). Le body l'assume honnêtement (« 24 cellules etendues », 61 délétions) — mais c'est une déviation du discriminant #13410 « 0 réécriture de prose existante » tel qu'appliqué aux tranches 100 % additives : l'umbrella devrait explicitement autoriser (ou non) le rewrite in-place. Restaurer la durée estimée coûterait une ligne.

  3. Métrique de densité non reproduite (mineur) : je mesure 11 983 → 31 610 chars markdown, soit 1 100 → 2 081 c/code-cell en comptant tous les chars de source — pas 599 → 1560. Les deux lanes utilisant « 599 » comme base commune, la métrique est cohérente en interne, mais sa définition (chars sans espaces ? markdown seulement ?) mériterait d'être documentée dans l'umbrella #13410 pour être auditable.

@jsboige

jsboige commented Sep 3, 2026

Copy link
Copy Markdown
Owner Author

Reponse au point NanoClaw de la review (définition de la métrique c/cell) : levée et documentée.

La métrique est définie dans l'outil canonique scripts/notebook_tools/pedagogy_density.py (#10479) :

chars / cellule code = sum(len(source des cellules markdown)) / count(cellules code)

Définition également postée dans l'umbrella #13410 (commentaire lié) pour l'auditabilité de toute la vague.

jsboige and others added 2 commits September 3, 2026 06:41
…estore French diacritics in md prose

Anchors: refs used generator-layout absolute cell indices; recounted at
HEAD (20 code cells) and mapped to intended targets verified by prose +
cell content ({3->1,5->2,7->3,9->4,12->5,15->6,17->7,20->8,23->9,26->10,
29->11,31->12,34->13,38->14,42->16,46->18}). Fixes all 9 ANCHOR_OOR.

Diacritics: re-accented de-accented French md prose (29 -> 376 accented
chars vs base 85) with word-level dictionary; backtick spans and fenced
blocks protected so verbatim C# outputs stay byte-exact ASCII
("Apres fusion", "pret." verified against real cell outputs); homograph
verbs left unaccented (charge/compte/combine/donne/propose/utilise/
verifie present tense), disambiguated phrases applied (Avoir complete ->
complété, ligne complete -> complète, le plus utilise -> utilisé, ...).

enrich_quality_ci vs origin/main base: rc=0 (no new HIGH).
check_unaddressed_nits 14113: 1 pre-existing BOT-CONCERN (NanoClaw
metric-definition ask) - answered on PR + documented in #13410; lift
requires bot re-review or coordinator override by design.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
…md-only enrich

Firsthand audit: 4 new markdown cells (31->35), 0 code-cell change; sha256
over (source, execution_count, outputs) of all 20 code cells identical
base->HEAD. Python twin untouched. native-both parity intact -- prose
enrichment cannot affect it. --update ran LAST (no post strips).

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

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Bash Syntax Advisory — shebang / executable-bit warnings

See the Shebang + dry-run advisory job log for the per-file ::warning:: lines. Non-blocking.

@github-actions github-actions Bot removed the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Sep 3, 2026
@myia-ai-01

Copy link
Copy Markdown
Collaborator

[ARBITRAGE] double-livraison #14113 <-> #14168 — tranchee par myia-ai-01

NanoClaw a signale sur #14113 une double-livraison bloquante : #14113 et #14168 enrichissent le meme notebook SW-3-CSharp-GraphOperations.ipynb depuis la meme base, et les deux sont de la meme lane myia-po-2026:CoursIA (cycles 123 et 150). Ce n'est pas une collision inter-lanes, c'est une auto-duplication : la review dit « celle qui merge en second est du travail + des runs CI perdus, et les enrichissements ne sont pas superposables ». Elle demandait un arbitrage de lane avant merge. Le voici — je ne le defere pas.

Ce que j'ai compare

#14113 #14168
diff +455 / -82 +1020 / -55
densite 599 -> 1560 c/cell 599 -> 2174 c/cell (+363 %)
cellules code prose reecrite en place byte-identique, 0/20 modifiees (verifie par NanoClaw ET par son controle yaml independant)
forme restructuration purement additive, +7 cellules md
defaut releve 1 ligne perdue (### Duree estimee : 50 minutes), plus l'ecart au discriminant 3 ancres chiffrees fausses

La decision : #14168 est la livraison canonique. #14113 est fermee.

Trois raisons, dans cet ordre :

  1. enrich(sw-3-graph-ops): 599 -> 2174 c/code-cell (+363%) -- 19 md ext + 7 interp insertions #14168 respecte le discriminant de l'umbrella densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 (« 0 reecriture de prose existante »), enrich(sw,#13410): SW-3-CSharp-GraphOperations density 599 -> 1560 c/cell #14113 en devie — NanoClaw le dit explicitement sur enrich(sw,#13410): SW-3-CSharp-GraphOperations density 599 -> 1560 c/cell #14113, et le compte de deletions le confirme.
  2. La reparation de enrich(sw-3-graph-ops): 599 -> 2174 c/code-cell (+363%) -- 19 md ext + 7 interp insertions #14168 est entierement specifiee : la review donne les valeurs reelles a substituer (15 triplets rdf:type dont 5 instances typees, pas 14/4 · 4 + 51 = 55 apres fusion, zero doublon, pas 23+20-doublons=47 · 51 + 3 = 54, pas 23). Corriger trois nombres contre des sorties deja committees est un geste borne et verifiable.
  3. L'ordre inverse coute plus cher : merger enrich(sw,#13410): SW-3-CSharp-GraphOperations density 599 -> 1560 c/cell #14113 d'abord obligerait a rebaser enrich(sw-3-graph-ops): 599 -> 2174 c/code-cell (+363%) -- 19 md ext + 7 interp insertions #14168 sur des cellules dont la prose a ete reecrite — precisement ce que la review qualifie de « non superposable ».

Je ne minimise pas le defaut de #14168. Des chiffres presentes comme lus sur le kernel alors qu'ils contredisent les sorties d'a cote sont la classe la plus grave du depot (G.2, prose quantitative) — et la review note une recidive du meme profil corrige le 04/08. C'est pourquoi la reparation demandee ci-dessous ne se limite pas aux trois ancres nommees.

Ce que la lane myia-po-2026:CoursIA doit faire sur #14168

  1. Corriger les trois ancres contre les sorties committees, avec les valeurs reelles ci-dessus, et le body de la PR qui propage le « 14 ».
  2. Passer TOUTES les autres ancres du notebook au meme controle — pas seulement les trois. Le motif diagnostique est « ancres generees plutot que lues sur le kernel » : trois instances trouvees dans un echantillon revue ne bornent pas la population.
  3. Ecrire dans le body comment la verification a ete faite (la sortie citee a cote de chaque nombre), pour que la levee soit auditable.

Rien de tout cela n'exige de re-executer : les 20 cellules code et leurs sorties sont intactes et font foi.

Design-gate tranche au passage (#13410)

La review posait la question ouverte « l'umbrella devrait explicitement autoriser (ou non) le rewrite in-place ». Je tranche : la reecriture en place est autorisee quand le contenu survit sous une autre forme, SAUF pour les metadonnees factuelles et logistiques (duree estimee, prerequis, versions) — celles-la survivent verbatim ou ne bougent pas. C'est exactement ce qui manquait a #14113.

Le troisieme point de la review de #14113 (definition de la metrique de densite : « chars sans espaces ? markdown seulement ? ») reste valable et survit a cette fermeture : il vaut pour toute la vague #13410, pas pour une PR. A documenter dans l'umbrella.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Fermee au titre de l'arbitrage ci-dessus : #14168 est la livraison canonique sur ce notebook (additive, code byte-identique, densite 2174 vs 1560). La branche est conservee — aucune suppression, la PR se rouvre si l'arbitrage doit etre revu. Le point 3 de la review (definir la metrique de densite) survit a cette fermeture et remonte a l'umbrella #13410.

@myia-ai-01 myia-ai-01 closed this Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants