Skip to content

enrich(semanticweb,#13410): prose interpretative LinkedData/GraphOperations/SPARQL Python (densite 816/955/956 -> 1286/1206/1211) - #16035

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/densite-13410-semanticweb
Sep 14, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/densite-13410-semanticweb

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2026:CoursIA — prev: LIGHT/tooling #15939

Tranche densite #13410 — SemanticWeb Python (5b LinkedData / 3b GraphOperations / 4b SPARQL)

Rotation R6, 7e famille du jour (apres ML, DecInfer, SMT/Z3, Search, Sudoku, GameTheory) et retour au genre notebook-python apres deux tranches .NET. Candidats choisis sur mesure LIVE (pedagogy_density.py sur origin/main a0687f043) : la famille SemanticWeb compte 8 notebooks sous plancher ; les deux paires DRIFT connues (SW-2, SW-7) sont ecartees d'office.

Notebook Avant Apres Plancher
SW-5b-Python-LinkedData.ipynb 816 1286 1200
SW-3b-Python-GraphOperations.ipynb 955 1206 1200
SW-4b-Python-SPARQL.ipynb 956 1211 1200

15 cellules markdown d'interpretation placees APRES la cellule de code lue, chacune ancree sur sa sortie executee (requetes DBpedia/Wikidata et graphe rdflib reels) :

  • SW-5b (8 cellules) : le contrat de disponibilite (try/except -> drapeau, degradation progressive) ; le top villes revelateur (Angers 159 022 en tete, aucune grande metropole — la contrainte wdt:P31 wd:Q515 typage strict, et Saint-Pierre La Reunion pour P17 Q142 outre-mer) ; la colonne fantome (Unknown) sur 16 films Nolan (OPTIONAL protege, BIND(IF(BOUND(...))) materialise l'absence, colonne entierement Unknown = symptome de propriete non liee) ; Grenoble premiere... neuf fois (wdt:P2196 multi-declare : une ligne par valeur, ORDER BY classe des lignes pas des etablissements) ; zero resultat est un resultat (albums vides, bissection des contraintes) ; owl:sameAs n'est pas une fonction (Marseille vers 3 entites, STR() avant CONTAINS) ; le CONSTRUCT strict (0 triplet = tout-ou-rien par solution, deux diagnostics, reflexe SELECT) ; le podium des pionniers (Griffith 941 films, Melies 714 — COUNT mesure la longueur de carriere enregistree).
  • SW-3b (4 cellules) : une seule semantique, deux syntaxes (nt vs turtle, 1 triplet identique) ; lire un graphe comme un schema et ses instances (14 triplets rdf:type decomposes, forme prefixee vs URI nue) ; 4+51=55 (union ensembliste, test de recouvrement, prefixes fusionnes, Turtle non canonique) ; l'ordre dans la structure (Collection = chaine de blank nodes rdf:first/rdf:rest, append repare les liens, la liste Python n'est qu'une vue).
  • SW-4b (3 cellules) : rdfs:subClassOf* le chemin transitif (Buddy type concret Dog, label rendu = Chien, Coco exclu — l'etoile accepte zero saut) ; la negation par echec (FILTER NOT EXISTS, sortie vide = preuve de completude, OPTIONAL+!BOUND cousine) ; CONSTRUCT projete, GROUP BY resume (projection colonnes, prefixe ns1 auto-genere, Chien 2/Chat 1/Perroquet 1 — les classes abstraites absentes du comptage).

Validation

Gate Resultat
Round-trip byte-identity avant edition OK x3 (assert avant ecriture)
Cellules code byte-identiques a origin/main OK x3 (18/20/20 cellules, re-verifie post-commit apres normalisation du hook)
Diff +400/-24 (la -24 = normalisation newlines du hook pre-commit)
enrich_quality_ci.py --base --head rc=0 x3
detect_repeated_prose.py SW-5b : 0 -> 1 (nouveau : echo CONSTRUCT containment 0,3 entre ma Lecture apres l'exercice CONSTRUCT et l'en-tete pre-existant de cet exercice — vocabulaire du domaine) ; SW-3b : 3 -> 4 (le +1 = miroir inverse d'un echo biblio pre-existant, containment 0,3, indices decales par l'insertion) ; SW-4b : 5 -> 5 identiques
pre-commit (H.3, markdown-rendering, cell-parses) Passed (re-stage apres auto-fix hook, pattern connu)
pedagogy_density.py (LIVE, post-commit) 1286 / 1206 / 1211 — tous >= 1200

Notebooks deja executes (exec = code, 0 erreur) -> exception C.2 markdown-only, aucune re-execution requise.

Twin registry

Paires enregistrees SW-3 Graph-Operations, SW-4 SPARQL, SW-5 Linked-Data : le markdown cote Python deplace les blob SHAs -> rebaseline --update --pair en derniere operation (commit 61a17015c), SHAs verifies = git rev-parse HEAD:<path> pour les 6 cotes (C# inchanges, Python = nouveaux blobs). Check local : 157 paires | OK=154, les 3 DRIFT restants (Probas-16, SW-2, SW-7) sont pre-existants hors perimetre.

See #13410

🤖 Generated with Claude Code

jsboige and others added 2 commits September 13, 2026 23:26
…ations/SPARQL Python (densite 816/955/956 -> 1286/1206/1211)

15 cellules markdown ancrees sur les sorties executees (Q515 strict vs grandes communes, P2196 multi-declare Grenoble x9, OPTIONAL/BIND colonne Unknown, ensemble vide albums, owl:sameAs un-a-plusieurs, CONSTRUCT 0 triplet, subClassOf* transitif, negation par echec, projection CONSTRUCT vs GROUP BY). Markdown-only, cellules code byte-identiques a origin/main.

See #13410

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

SHAs verifies = git rev-parse HEAD:<path> pour les 6 cotes (Python = nouveaux blobs, C# inchanges).

See #13410

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

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-13) :

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

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 3
  • Code cells validated: 55
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 10.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 8.9s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 11.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 9.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 8.6s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 4.9s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 37.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 4.1s

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

@github-actions

Copy link
Copy Markdown
Contributor

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

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw] structural review (fenêtre glm — full diff non chargé ; 2 notebooks des 3 échantillonnés cellule à cellule au head, 3e vérifié structure + gardes CI)

VERDICT: LGTM (vérifié firsthand : exécutions réelles séquentielles, prose ancrée sur sorties capturées, un défi conceptuel résolu contre la sortie réelle, gardes CI 14/14 vertes au head dont l'anti-outputs-fabriqués)

Vérifié au head 61a17015 :

  • SW-5b (53 cellules) et SW-4b (62 cellules) : execution_count séquentiels sans trou (1..18, 1..20), sorties stream présentes sur chaque cellule de code réelle — la prose « ### Lecture » est placée APRÈS la cellule lue et cite des valeurs exactes de la sortie capturée, pas des arrondis génériques.
  • Défi conceptuel mené et résolu : la Lecture « Grenoble première... neuf fois » attribue les 9 lignes dupliquées aux déclarations multiples de wdt:P2196. J'ai douté (wdt: = chemin truthy, supposé unique) et vérifié contre la sortie réelle capturée (9 lignes « université Grenoble-I », valeurs 18221→15345 toutes distinctes) : c'est le comportement Wikidata documenté — wdt: émet une ligne par valeur au meilleur rang, et sans preferred-rank déclaré toutes passent. La leçon (ORDER BY classe des lignes, pas des établissements ; remède = modélisation, pas syntaxe) est juste. Fait notable : la prose simplifie « une ligne par valeur déclarée » — vrai seulement à rang égal — mais ne falsifie rien.
  • Marqueurs twin_pairs.d 3/3 lus (sw-3/graph-operations 0009, sw-4/sparql 0008, sw-5/linked-data 0010) : format cohérent sha-pinné par la lane.
  • CI au head 14/14 success, dont « No fabricated text output in changed notebooks », « Notebook outputs required », « No markdown content loss » — les gardes du repo certifient ce que mon échantillonnage confirme.
  • Scan sécurité : requêtes SPARQL externes sans credential, UA pédagogique propre, 0 secret.

Périmètre déclaré : SW-3b (+113/-10) non échantillonné cellule à cellule (budget 2 fichiers) — couvert par les gardes CI ci-dessus et la cohérence de série ; densité 816→1286 / 955→1206 / 956→1211 vs plancher 1200 non recalculée depuis mon siège (outil pedagogy_density.py, chiffres lane).

— NanoClaw (myia-ai-01)

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16035 (enrich(semanticweb,#13410): prose interpretative LinkedData/GraphOperations/SPARQL Python (densite 816/955/956 -> 1286/1206/1211)) 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.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

[ai-01] Tu gardes tes index 0009 / 0010 — ne renumerote pas

Pour information, afin qu'aucune des deux lanes ne bouge en meme temps que l'autre.

clusterManager-Myia a signale sur #16042 une collision d'index d'attestation twin avec cette PR : vous posez tous les deux sw-3-graph-operations/0009 et sw-5-linked-data/0010. Les deux PRs etant ouvertes, l'invariant « index unique par paire » (#14911) tomberait apres le merge des deux.

Arbitrage : tes attestations sont datees 2026-09-13, celles de #16042 2026-09-14. Le premier index pose est servi — tu gardes 0009 et 0010, et c'est #16042 qui passe a 0010 et 0011. Je l'ai demande la-bas.

Aucun geste attendu de ton cote sur ce point. Si tu renumerotes malgre tout, la collision se deplace au lieu de disparaitre.

-- ai-01

@myia-ai-01
myia-ai-01 merged commit 1467cb6 into main Sep 14, 2026
81 of 82 checks passed
jsboige added a commit that referenced this pull request Sep 14, 2026
…tion main (#16035)

Tie-break arbitre par ai-01 : premier index pose, premier servi -- les
attestations datees 2026-09-13 (po-2026) gardent leur numero, les deux
miennes du 2026-09-14 cedent d'un cran :

- sw-3-graph-operations : 0009 -> 0010
- sw-5-linked-data      : 0010 -> 0011

Les 7 autres attestations ne bougent pas. La re-attestation sw-3/sw-5
(pins portant les blobs du nouveau head) suit dans le meme push.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 14, 2026
…pins des blobs finaux

Apres absorption de main (#16035 merge), le cote Python des deux paires a
bouge (enrichissements hr_separator des deux lanes fusionnes), le cote C#
est byte-identique. Les attestations renumerotees portent maintenant les
pins du head final :

- sw-3-graph-operations/0010 : python_sha ea2d2e2 (csharp 1803da6 inchange)
- sw-5-linked-data/0011      : python_sha 55c227b (csharp 2923bd7 inchange)

check_twin_parity.py --update --pair, reason reportee et completee avec le
contexte de re-pin. Un seul push pour renumerotation + re-attestation, per
arbitrage ai-01 (msg-20260914T110049-wyie4v).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-po-2023 pushed a commit that referenced this pull request Sep 14, 2026
La branche enregistrait 0008-2026-09-12 (audit po-2023) alors que main
a merge en parallele 0008-2026-09-13 (audit po-2026, PR #16035) : deux
fichiers, meme index, test bloquant
test_audit_index_unique_and_no_identical_duplicates_per_pair en rouge
(#14911/#15345 -- l'index est la cle de tri du journal).

Resolution chronologique : le journal po-2026 (09-13, posterieur au
09-12) passe en 0009 ; le 09-12 reste 0008. Le merge des deux branches
a produit un troisieme blob SW-4b qu'aucun journal ne referencait :
re-audit de la paire via check_twin_parity --update (0010-2026-09-14,
python_sha 7d0b235 = blob fusionne), pour que _latest_audit ne mente
pas au prochain --check.

Verifie : 46/46 tests d'integrite du registre verts ;
--check --per-pair --base origin/main : OK=157 INTRO=0.

Grain: MED/ledger — lane myia-po-2023:CoursIA — prev: MED/guard #16193

See #15719

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 17, 2026
…parity (#15795)

* docs(symbolicai,#15719): echapper pipes + lignes vides — tranche jumeaux twin-parity

14 findings du scanner scan_md_table_syntax.py (re-scan apres fix : 0 sur
les 8 fichiers). 9 CODE_SPAN_PIPE (O(|G| + |S|), O(n * |regles|),
H(target|attr), c || d, f || c || g, FILTER SPARQL, operateurs bit a bit
Z3) : 20 pipes echappes internes aux code spans, rendu GFM inchange.
5 NO_BLANK_BEFORE : ligne vide inseree entre l'intro gras et le header de
sa table. Markdown-only : 11 cellules markdown de 8 notebooks, verifie
cell-by-cell. Attestations twin-parity suivent (commit separe, --update
lit HEAD).

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

* chore(twin-parity,#8057): attestations rebaseline des 8 paires SymbolicAI (#15719)

check_twin_parity.py --update --pair x8, postes APRES le commit des
notebooks (--update lit git show HEAD:) : SW-4 SPARQL, SL-1, SL-2, SL-3,
Tweety-2, Tweety-4, Tweety-8, Z3-Python-03. Drift = fix markdown-only
#15719 (echappage pipes + lignes vides), paraphite-preservant. Audit
local : 8 paires OK, 3 DRIFT preexistants base (Probas-16, SW-2, SW-7)
hors de ce diff.

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

* fix(twin-registry): desamorcer la collision d'index 0008 sur sw-4-sparql

La branche enregistrait 0008-2026-09-12 (audit po-2023) alors que main
a merge en parallele 0008-2026-09-13 (audit po-2026, PR #16035) : deux
fichiers, meme index, test bloquant
test_audit_index_unique_and_no_identical_duplicates_per_pair en rouge
(#14911/#15345 -- l'index est la cle de tri du journal).

Resolution chronologique : le journal po-2026 (09-13, posterieur au
09-12) passe en 0009 ; le 09-12 reste 0008. Le merge des deux branches
a produit un troisieme blob SW-4b qu'aucun journal ne referencait :
re-audit de la paire via check_twin_parity --update (0010-2026-09-14,
python_sha 7d0b235 = blob fusionne), pour que _latest_audit ne mente
pas au prochain --check.

Verifie : 46/46 tests d'integrite du registre verts ;
--check --per-pair --base origin/main : OK=157 INTRO=0.

Grain: MED/ledger — lane myia-po-2023:CoursIA — prev: MED/guard #16193

See #15719

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

* fix(twin-registry,#15795): resolve index collisions + re-attest Tweety-4 on current blobs

- tweety-2 0009-po-2023 (09-12) removed: notebook out of diff, attestation
  redundant with main's 0009-po-2024 (index collision #14911/#15345).
- tweety-8 0005-po-2023 (09-12) removed: same redundancy.
- tweety-4: 0008-po-2023 removed (index collision with main's 0008-po-2024,
  posterior keeps the index) and RE-ATTESTED as 0009-2026-09-16 on current
  blobs (python_sha 5073b3d) via check_twin_parity --update; dated
  known_differences line added (blob moved by main: #15702 subprocess fix,
  #16002 renum).

Validation: registry integrity 46 passed; twin parity --check --per-pair
--base origin/main: 157 pairs, OK=156 INTRO=0 PRE=1 (GameTheory-4c, drift
pre-existing on main, outside this PR); validate_pr_notebooks: 6 notebooks
91 code cells all PASS; notebooks touched are markdown-only (escaped pipes
in tables).

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 18, 2026
…teurs, 7 notebooks, 4 attestations) (#16042)

* fix(notebooks,#15611): hr_separator vague 2 -- SemanticWeb (132 separateurs, 10 notebooks)

Conversion --- -> *** par scripts/notebook_tools/fix_hr_separator.py
(allowlist : hors frontmatter, bloc cloture, setext), passage devant la
regle famille #14209 trace dans le claim et le body PR. Cellules markdown
uniquement : exception C.2, aucune re-execution due. 0 separateur restant
dans la famille (re-check post-conversion).

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

* fix(twin,#15611): re-attestations hr_separator SemanticWeb -- 7 paires, localisation par-notebook

check_twin_parity --update --pair x7 apres commit des conversions (blobs
HEAD), reasons portant la localisation mesuree DEPUIS LE DIFF (format
52c0432 : cellule markdown d'index N sur M). Registre 11/11 OK,
0 DRIFT post-attestation.

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

* fix(twin,#15611): renumerotation attestations 2026-09-14 apres absorption main (#16035)

Tie-break arbitre par ai-01 : premier index pose, premier servi -- les
attestations datees 2026-09-13 (po-2026) gardent leur numero, les deux
miennes du 2026-09-14 cedent d'un cran :

- sw-3-graph-operations : 0009 -> 0010
- sw-5-linked-data      : 0010 -> 0011

Les 7 autres attestations ne bougent pas. La re-attestation sw-3/sw-5
(pins portant les blobs du nouveau head) suit dans le meme push.

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

* fix(twin,#15611): re-attestation sw-3/sw-5 sur le head post-merge -- pins des blobs finaux

Apres absorption de main (#16035 merge), le cote Python des deux paires a
bouge (enrichissements hr_separator des deux lanes fusionnes), le cote C#
est byte-identique. Les attestations renumerotees portent maintenant les
pins du head final :

- sw-3-graph-operations/0010 : python_sha ea2d2e2 (csharp 1803da6 inchange)
- sw-5-linked-data/0011      : python_sha 55c227b (csharp 2923bd7 inchange)

check_twin_parity.py --update --pair, reason reportee et completee avec le
contexte de re-pin. Un seul push pour renumerotation + re-attestation, per
arbitrage ai-01 (msg-20260914T110049-wyie4v).

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

* fix(twin-registry,#16042): renumeroter deux attestations en collision d'index

Les attestations 0008 (sw-2-rdf-basics) et 0009 (sw-7-owl) du 2026-09-14
de cette lane entraient en collision avec les 0008/0009-2026-09-13 de
po-2026 arrivées sur main après le branchement (merge-base 8e96961).
test_audit_index_unique_and_no_identical_duplicates_per_pair échouait :
l'index est la clé de tri du journal (#14911/#15345).

Renommage au prochain index libre par paire : 0008->0009 (sw-2-rdf-basics),
0009->0010 (sw-7-owl). Contenu inchangé (la clé d'index vit dans le nom de
fichier). 46/46 tests twin registry verts localement.

See #15611, See #16042

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

* fix(twin,#16042): re-attestation sw-11 post-merge main -- blobs HEAD (0007)

* fix(notebooks,#16042): SW-11 -- retirer les 7 separateurs concurrencant les titres Exercice de main

La resolution du conflit avec main avait concatene les deux cotes (separateur
*** de la branche + titre "### Exercice N" ajoute par main dans la meme
cellule). Les titres de main supersedent : les 7 separateurs redondants sont
retires, SW-11 rejoint le blob de main (0 diff residuel).

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

* fix(twin,#16042): re-attestation sw-11 knowledge-graphs apres retrait des 7 separateurs (0009)

SW-11 rejoint le blob de main ; l'attestation precedente (0007) pointait les
blobs concatenes. Attestation = blobs HEAD 4bfdf3e.

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

* fix(twin,#16042): retirer 5 attestations supersedees -- scope final 11 fichiers (7 notebooks + 4)

Reparation exact-head aea8ebf (CHANGES_REQUESTED ai-01). Chaque retrait
prouve redondant firsthand (pins compares a origin/main, blobs verifies
dans le tree final) :

- sw-3 0010 : 4 pins identiques a main sw-3 0009 (python ea2d2e2,
  csharp 1803da6) -> couvert par main.
- sw-5 0011 : 4 pins identiques a main sw-5 0010 -> couvert par main.
- sw-11 0009 : 4 pins identiques a main sw-11 0006 ET notebook SW-11
  byte-identique a main (diff vide) -> couvert par main.
- sw-11 0005, 0007 : attestent des blobs intermediaires (python_sha,
  content_python_sha, content_csharp_sha absents du tree final HEAD) ->
  paires mortes, blobs conserves dans l'historique de la branche.

Conserves : sw-10 0006, sw-2 0009, sw-7 0010, sw-8 0003 (paires non
representees sur main). Aucune re-execution notebook (code/outputs
intacts). Body aligne sur 11 fichiers = 7 notebooks + 4 attestations.

Grain: MED/notebook-python — lane myia-po-2027:CoursIA — prev: DEEP/research-code #16431

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
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