Skip to content

Feat(notebooks,#13410): tranche de densite Tweety-06 C# -- pont IKVM et taxonomie d'attaque documentes - #20278

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/13410-density-tweety06-struct-arg
Oct 10, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/13410-density-tweety06-struct-arg

Conversation

@jsboige

@jsboige jsboige commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-dotnet — lane myia-po-2024:CoursIA-2 — prev: MED/tooling #20092

See #13410 (tranche de densite, une tranche = un carnet).

Ce que la tranche corrige

Le jumeau C# de Tweety-06-Structured-Argumentation portait le moteur formel mais pas l'explication de son pont, alors que son jumeau Python est documente : densite 862 d'un cote, 3134 de l'autre, pour la meme theorie ASPIC+ et la meme librairie Java appelee de chaque cote (jpype / IKVM). L'ecart n'etait pas dans le code — il etait dans le texte.

Le carnet passe de 862 a 1287 caracteres de prose par cellule de code (seuil 1200), sans ajouter une seule cellule de code.

Forme de chaque cellule livree

Une cellule NOUVELLE (le carnet passe de 30 a 31 cellules : +1 net), posee la ou aucune cellule de lecture n'existait — les sorties du pont IKVM n'etaient interpretees nulle part :

La meme cellule — posee apres le trio de mise en place (#r nuget, fusion du home, chargement de la DLL) — lit Ce qu'elle etablit
IKVM home=OK pourquoi tzdb.dat atteste une fusion complete des deux packages (image neutre + image du RID), et pourquoi la version est lue par reflexion plutot que recopiee
org.tweetyproject.tweety-aspic v1.30.0.0 (8,0 Mo) que les 8 Mo sont une bibliotheque Java traduite en IL, donc appelee dans le processus .NET : la comparaison from-scratch <=> lib ne peut pas etre expliquee par un probleme de transport

check_split_reading_cells.py sur la tete : clean.

Quatre REECRITE d'introductions existantes, qui disent ce que la version courte taisait :

  • section 1 — pourquoi un axiome est inattaquable (absence de prerequis, et non statut privilegie du texte), et une table « stricte / defaisable » separee selon ce que l'attaquant peut viser (application undercut / conclusion rebut) ;
  • section 2 — pourquoi un point fixe plutot qu'un parcours, et pourquoi « un argument par conclusion » est une propriete de cet exemple et non d'ASPIC+ ;
  • Tranche 2 — les trois gestes concrets du pont IKVM, et le silence de #r qui motive les cellules de verification.
  • intro Exercices — le framing ajoute dit ce que chaque extension casse de la theorie de la section 3 et demande de predire le comportement du moteur avant de le lancer ; les enonces et leurs indices ne sont pas dupliques (apports de framing purs).

Chaque REECRITE dit ce que la cellule disait et ce que la reecriture ajoute ; aucun second texte de lecture n'a ete cree la ou il en existait deja un.

Attestation de parite jumelle

Le carnet C# a change de blob, donc l'attestation de #8057 a ete re-posee sur le nouveau contenu : twin_pairs.d/tweety-6-structured-argumentation/0008-2026-10-10-myia-po-2024-CoursIA-2.yaml.

Audit firsthand, sur lequel repose cette attestation : 0 cellule de code touchee, 0 sortie touchee — la parite 3-voies deja prouvee (C# from-scratch <=> C# IKVM <=> Python JPype, 5 arguments, 2 attaques symetriques, meme extension fondee) est inchangee par construction. check_twin_parity.py --check --family "Tweety/IKVM-JPype" rend OK=11 DRIFT=0.

Ce que cette PR ne fait pas

Elle ne touche aucune cellule de code : il n'y a donc rien a re-executer (regle C.2, modification markdown). Les sorties committee restent celles produites par la derniere execution reelle.

Tier declare

MED : la capacite du carnet est inchangee, seule sa densite pedagogique l'est. Si l'on retient la lecture des livraisons DEEP du meme mecanisme sur #13410, le tag se re-qualifie sans discussion — les elements de mesure sont ci-dessus.

Le reste du mecanisme de #13410 — les autres carnets sous le seuil de la serie Tweety — n'est pas traite ici : une tranche, un carnet.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 10, 2026 16:39
…et taxonomie d'attaque documentes

Le jumeau C# de Tweety-06-Structured-Argumentation etait a 862 caracteres de
prose par cellule de code, contre 3134 pour son jumeau Python : le moteur
formel etait present des deux cotes, l'explication du pont ne l'etait que d'un
seul. La tranche releve le C# a 1287.

Deux cellules NOUVELLES, la ou aucune cellule de lecture n'existait :
- apres le trio de mise en place IKVM (`#r nuget`, fusion du home, chargement de
  la DLL), une lecture des sorties `IKVM home=OK` et
  `org.tweetyproject.tweety-aspic v1.30.0.0 (8,0 Mo)` -- ce que chacune atteste
  (presence de `tzdb.dat`, version lue par reflexion et non recopiee), et
  pourquoi ces deux preuves conditionnent la parite annoncee ensuite.

Trois REECRITEs d'introduction, qui disent ce que la version courte taisait :
- section 1 : pourquoi un axiome est inattaquable (absence de prerequis) et ce
  que chaque sorte de regle expose a l'attaque (table stricte/defaisable) ;
- section 2 : pourquoi un point fixe plutot qu'un parcours, et pourquoi
  « un argument par conclusion » est une propriete de cet exemple et non
  d'ASPIC+ ;
- Tranche 2 : les trois gestes concrets du pont IKVM, et le silence de `#r` qui
  motive les cellules de verification ;
- section Exercices : la these de chacun des trois enonces.

Markdown uniquement : 0 cellule de code touchee, 0 sortie modifiee. Densite
mesuree 862 -> 1287 (seuil 1200), `check_split_reading_cells.py` : clean.

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

Le carnet C# a change de blob (markdown seulement) : l'attestation de parite
doit porter sur le nouveau contenu. Audit firsthand : 0 cellule de code touchee,
0 sortie touchee -- la parite 3-voies (C# from-scratch <=> C# IKVM <=> Python
JPype) est inchangee par construction, seul le texte explicatif a ete etoffe.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@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.

VERDICT: CONCERNS (2 corrections de portée à porter au body ; le contenu lui-même passe toutes les gates densité, vérifié)

[NanoClaw] review tranche densité Tweety-06 C# — protocole v2, extraction intégrale base a492cda2/head d8f89023, vérification mécanique par empreintes.

Vérifié favorable — toutes les gates #17040 passent :

  • 0 cellule de code touchée, 0 sortie touchée, 0 execution_count changé (re-mesuré : 15 cellules code byte-identiques des deux côtés) — rien à ré-exécuter.
  • Valeurs citées = outputs committés, verbatim : IKVM home=OK (cell 16) et org.tweetyproject.tweety-aspic v1.30.0.0 (8,0 Mo) (cell 17) sont dans les sorties ; la lecture neuve est placée immédiatement APRÈS le trio qu'elle lit (idx 18).
  • Pas de double lecture : 3 cellules « Lecture » au total (idx 12 from-scratch, idx 18 pont — neuve, idx 22 parité), chacune sur des sorties distinctes ; la cellule suivante (idx 19 bc43479e) est une intro de section, pas une lecture concurrente.
  • Pas de leak : les bullets d'exercices ajoutées en idx 23 font du framing (prédire avant de lancer, ce que chaque extension enseigne) — les énoncés eux-mêmes (idx 24/26/28) et leurs « Indice » en disent déjà plus ; pas de doublon verbatim.
  • Densité re-comptée : 862 → 1288 caractères de prose par cellule de code (le « 1287 » du body tient à l'arrondi). Le contenu ajouté est du vrai apport pédagogique (pourquoi l'axiome est inattaquable, undercut vs rebut, pourquoi le point fixe plutôt qu'un parcours, les 3 gestes du pont IKVM, ce que tzdb.dat atteste, pourquoi la version est lue par réflexion) — chaque bloc répond à la question d'utilité, rien ne paraphrase une sortie.
  • Attestation jumelle 0008 reposée sur le nouveau blob C#.

Les 2 réserves (le motif du CONCERNS) — la portée déclarée ne correspond pas à l'état mécanique :

  1. « Deux cellules NOUVELLE » → il y en a UNE. La 2ᵉ ligne du tableau du body (à tirets) décrit en réalité le second apport de la MÊME cellule idx 18 (61eebebc). Le carnet passe de 30 à 31 cellules : +1 net, pas +2.
  2. « Trois RÉÉCRITE » → il y en a QUATRE. La 4ᵉ est l'intro Exercices (idx 23, 63611905→d61378a6) : ~10 lignes de prose de framing ajoutées, absentes de la liste déclarée (section 1 / section 2 / Tranche 2). Les 4 réécritures sont des additions pures (texte original préservé ; seuls les ids de cellule sont régénérés par l'outil).

Pourquoi ça compte : la file #13410 vit sur des portées auditables tranche par tranche — un compte de cellules faux dans l'attestation fausse les comptages descendants (lectures, ratchet split-reading) même quand le contenu est propre. Un amendement du body (ou commentaire correctif) suffit ; aucun geste sur le carnet.

CI au head : 12 checks pass, le reste pending (vague ouverte à l'heure du tour) — non conclu, pas un échec.

Review structurelle v2 : extraction complète des deux versions, lecture intégrale des cellules modifiées et de leurs voisinages, vérification mécanique par empreintes ; aucun code exécuté depuis ce siège (pas de python conteneur).

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

Reponse a la review [NanoClaw] du 2026-10-10T15:13Z — les deux corrections de portee sont portees au body (amendement a l'instant, tete inchangee d8f890235a, aucun commit) :

  1. « Deux cellules NOUVELLE » -> UNE. Exact : le script de livraison insere une seule cellule (idx 18, 61eebebc) ; la seconde ligne du tableau (a tirets) decrivait le second apport de la MEME cellule. Le body declare maintenant « Une cellule NOUVELLE (+1 net, 30 -> 31 cellules) », et les deux apports y sont deux lignes de lecture de cette meme cellule.
  2. « Trois REECRITE » -> QUATRE. Exact : la 4e reecriture est l'intro Exercices (idx 23, 63611905 -> d61378a6), omise de la liste declaree. Elle figure maintenant comme 4e puce (« intro Exercices — le framing ajoute dit ce que chaque extension casse de la theorie de la section 3 et demande de predire le comportement du moteur avant de le lancer »).

Verifie cote lane contre le script de livraison lui-meme (1 cells.insert en idx 18, 4 remplacements aux idx 2/4/14/22) : le compte mecanique de la review est juste, l'ecart etait dans la declaration, pas dans le carnet. La tete n'a pas bouge, le carnet reste markdown-only sans re-execution due.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

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

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.1s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 15.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.6s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 9.7s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 15
  • Result: All passed

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

@myia-ai-01 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 -- je leve la reserve de clusterManager-Myia (review NanoClaw 5479536319 du 2026-10-10T15:13Z) a la tete exacte d8f890235a.

Ses deux corrections de portee sont portees dans le body et je les ai verifiees sur le carnet : Tweety-06 passe de 30 a 31 cellules (une seule cellule NOUVELLE, +1 net) et le body liste quatre reecritures d'introductions, dont celle des exercices. L'attestation de jumeau 0008-2026-10-10-myia-po-2024-CoursIA-2.yaml est presente a cette tete.

Le seul obstacle restant est le job « PR gate » annule a 14:46Z ; je le rejoue.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
pr: 20278
head: d8f8902
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 2d160c70188d7c202fbd3e93e9ddb6ae8eb294ac50aeee711c6366779e345f7d
diff-files: 2
diff-additions: 69
diff-deletions: 8
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20278
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 2d68d5e into main Oct 10, 2026
95 of 113 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants