Skip to content

Fix(Tweety): 8 notebooks C# via IKVM sous Linux et macOS, RID dérivé de la machine (hors flotte) - #18067

Merged
myia-ai-01 merged 1 commit into
mainfrom
claude/affectionate-mccarthy-6dvuea
Sep 29, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
claude/affectionate-mccarthy-6dvuea

Conversation

@jsboige

@jsboige jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner

Hors flotte : PR de la session cloud d'agnosticisme du mainteneur (branche claude/*, exemption #17713, rôle décrit dans docs/reference/agent-cloud-agnosticisme.md). Pas de tag Grain:, pas de lane. See #17654, sous l'EPIC de parité Linux #10643. Suite directe de #18031 (notebooks Choco, mergée).

Summary

  • Huit notebooks Tweety C# (Tweety-02, 02b, 02c, 3-Advanced-Logics, 3-Conditional-Logics, 3-Dung, 3-ModalLogic, 3-QBF) codaient le RID win-x64 en dur dans leur configuration IKVM. Sous Linux, le notebook s'arrêtait au premier appel Java. Mesure avant correctif sur un clone vierge (Tweety-3-Dung, main) : System.TypeInitializationException: The type initializer for 'IKVM.Runtime.LibJava' threw an exception, à la cellule 9.
  • Le RID est désormais dérivé de la machine, avec la même recette que Fix(CSP,Sudoku): Choco via IKVM sous Linux et macOS, RID dérivé de la machine (hors flotte) #18031 : OperatingSystem et RuntimeInformation.ProcessArchitecture. Les huit notebooks s'exécutent de bout en bout sous Linux ; sous Windows, le RID calculé vaut win-x64, donc le même home qu'avant.
  • Les 10 notebooks Tweety C# restants (4-Aspic à 11-Causal) et la sonde _probes/Tweety-IKVM-Init-Probe viendront dans une PR suivante, pour rester sous le seuil de composite.

Changes

Cellules de configuration IKVM, dans les huit notebooks :

  • La déclaration ikvmRid = "win-x64" devient une expression. Elle vaut win, osx ou linux, suivi de - et de l'architecture du processus en minuscules. Une ligne de commentaire l'explique. Le nom RuntimeInformation est qualifié complètement, pour ne pas ajouter de using.
  • La ligne #r "nuget: IKVM.Image.runtime.win-x64, <version>" est retirée : elle est redondante. Le .nuspec de IKVM.Image déclare déjà comme dépendances les onze paquets IKVM.Image.runtime.<rid>. C'est vérifié sur nuget.org pour 8.14.0 (quatre de ces notebooks : Tweety-3-Advanced-Logics, 3-Conditional-Logics, 3-ModalLogic et 3-QBF) comme pour 8.15.0 (déjà revérifié par NanoClaw sur Fix(CSP,Sudoku): Choco via IKVM sous Linux et macOS, RID dérivé de la machine (hors flotte) #18031).

Markdown :

  • Tweety-02, cellules 1 et 2 : home=ikvm-home-8.15.0-win-x64 devient home=ikvm-home-8.15.0-<rid>, avec les exemples win-x64, linux-x64 et osx-arm64.
  • Tweety-02c, cellule 1 : « runtime spécifique win-x64 » devient « runtime de la plateforme ».

Registre de parité jumelle : seules deux des huit notebooks appartiennent à une paire (Tweety-2 Basic-Logics et Tweety-3 Advanced-Logics). Chacune reçoit une entrée known_differences datée et une attestation --update --by claude-cloud:hors-flotte, posée après les strips outillés.

Le diff compte 12 fichiers : les 8 notebooks et 4 fichiers de registre (2 YAML de paire et 2 attestations).

Diagnostic dérive

Les sorties changent entre la base (exécutée sur la flotte, Windows) et cette tête (clone vierge Linux). La comparaison a été faite cellule par cellule, sur le texte des sorties, CRLF normalisés :

Notebook Cellules code Sorties identiques Écarts
Tweety-02 10 8 RID, culture (7,0 Mo → 7.0 Mo)
Tweety-02b 12 9 RID, culture, langue d'un avertissement CS0219 du compilateur (déjà présent sur la base, en français)
Tweety-02c 15 13 culture ; ordre d'affichage d'un FolBeliefSet (voir plus bas)
Tweety-3-Advanced-Logics 10 9 culture
Tweety-3-Conditional-Logics 9 8 culture
Tweety-3-Dung 12 11 culture
Tweety-3-ModalLogic 10 8 RID (ikvm-home-8.14.0-linux-x64), culture
Tweety-3-QBF 9 8 culture

Classement des causes :

  • (a) env/kernel, pour trois écarts :

    Verdict : CAUSE_FIXED.

  • (e) ordre non déterministe : Tweety-02c, cellule 8, affiche KB = { Homme(Socrate), forall X: ((Homme(X)=>Mortel(X))) } au lieu de l'ordre inverse. Le contenu est identique ; seul l'ordre d'itération d'un ensemble Java change. La prose ne cite pas cet ordre (vérifié). Verdict : CAUSE_INTRINSIC.

  • Les résultats calculés (verdicts de raisonnement, extensions, modèles) sont identiques à la base. Aucune sortie n'a été touchée à la main.

Verdict SOTA : SOTA-OK. Le vrai moteur (TweetyProject 1.30 via IKVM) s'exécute. Il n'y a ni substitution ni réimplémentation. L'organe-first ne s'applique pas : rien n'est réimplémenté.

Review Checklist

  • 1. Scope — seules les cellules de configuration IKVM et la prose qui les décrit changent ; le registre de parité suit.
  • 2. Post-fix validation — relancés après le dernier commit :
    • validate_pr_notebooks.py origin/main : PASS ;
    • check_output_failure_text.py origin/main : 0 regressed ;
    • check_output_collapse.py et check_source_collapse.py : 0 flagged ;
    • check_twin_parity.py --per-pair --base origin/main --check : INTRO=0 ; les 3 PRE sont antérieurs et hors périmètre ;
    • check_prose_quantitative_claims.py --diff origin/main...HEAD --strict : OK ;
    • check_docs_links.py --check --base origin/main : 0 nouveau lien cassé ;
    • check_machine_dep_timing.py : 0 ;
    • check_markdown_claims_output.py : 17 findings, les mêmes que sur la base ;
    • strip_machine_paths.py --scan : 0.
  • 3. Pedagogical coherence — exercices et stubs inchangés.
  • 4. Real execution — notebook_tools.py execute <nb> --kernel .net-csharp sur les huit, sous Linux (dotnet-interactive 1.0.617701, .NET 9) : exec_count 10/10, 12/12, 15/15, 10/10, 9/9, 12/12, 10/10, 9/9, et 0 erreur. Puis strip_probe_banner.py --apply et scrub_papermill_paths.py --apply.
  • 5. Regression check — grep -rl 'ikvmRid = "win-x64"\|IKVM.Image.runtime.win-x64' ne rend plus aucun des huit notebooks. Restent les 10 notebooks Tweety C# du lot suivant et la sonde _probes/.

Anti-regression

  • Pas de Lean/Coq touché.
  • Aucun test désactivé.
  • Aucune suppression de code métier : une ligne #r redondante retirée par notebook, justifiée par le .nuspec.

Notebook-specific

  • Aucun raise NotImplementedError / assert False / 1/0 introduit.
  • Toutes les cellules code ont execution_count et des sorties cohérentes.
  • Seuls les notebooks dont une cellule source a changé sont committés (C.3).

Test plan

Sur un poste Linux ou macOS, avec .NET 9 et dotnet-interactive 1.0.617701 :

python scripts/notebook_tools/notebook_tools.py execute MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-3-Dung-Csharp.ipynb --kernel .net-csharp

Le notebook doit aller au bout sans erreur. Sur main, il s'arrête à la cellule 9.

Constat utile pour les étudiants, non corrigé ici : la première restauration NuGet d'une version d'IKVM télécharge les outils MSBuild d'IKVM pour toutes les plateformes, soit plusieurs Go (mesuré ici, ~/.nuget/packages de 1 à 7 Go). Les notebooks qui mélangent 8.14.0 et 8.15.0 doublent ce coût. Aligner sur 8.15.0 les six notebooks Tweety encore en 8.14.0 (les quatre ci-dessus, plus 07b et 10) diviserait ce coût par deux ; c'est une décision de série, laissée à la flotte.

Environnement de mesure : conteneur Linux x64, 4 threads, clone vierge, hors flotte.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka


Generated by Claude Code

…de la machine

Tweety-02, 02b, 02c, 3-Advanced-Logics, 3-Conditional-Logics, 3-Dung,
3-ModalLogic et 3-QBF (IKVM 8.14.0 et 8.15.0) codaient le RID win-x64 en dur.
Sous Linux, l'init de la JVM IKVM echouait au premier appel Java
(TypeInitializationException sur IKVM.Runtime.LibJava, mesure sur
Tweety-3-Dung). Le RID est desormais derive de OperatingSystem et de
RuntimeInformation.ProcessArchitecture ; la reference NuGet explicite
IKVM.Image.runtime.win-x64 est retiree, IKVM.Image (8.14.0 comme 8.15.0)
dependant deja des onze paquets IKVM.Image.runtime.<rid>. Meme recette que
#18031 pour les notebooks Choco.

Re-execution complete sous Linux (dotnet-interactive 1.0.617701) : 0 erreur,
sorties identiques a la base hors RID du home IKVM, culture et ordre
d'affichage d'un ensemble Java. Prose : trois mentions de win-x64 generalisees.
Parite jumelle rebaselinee sur les deux paires concernees.

Hors flotte (session cloud d'agnosticisme). See #17654.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka
@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 27, 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).

@github-actions

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 8
  • Code cells validated: 87
  • 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 6.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.8s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 18.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.0s

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

@github-actions

Copy link
Copy Markdown
Contributor

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

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

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

PR gate rouge sur la tête 81874696 : délai d'infrastructure, aucun organe n'a tourné.

  • Job en cause : « Always-on guards -- 16 organes, 1 checkout », run 36334456976, sur le runner auto-hébergé CoursIA-runners-p0/slot-3.
  • Ce qui s'est passé : le job est resté bloqué 23 min dans actions/checkout, sur git checkout --progress --force refs/remotes/pull/18067/merge (16:48:05Z → 17:11:31Z). Il a atteint le timeout-minutes: 25, et quatre processus git / git-remote-https sont restés orphelins.
  • Pourquoi l'étape identity est marquée en échec : le fichier scripts/ci/check_absorbed_check_run_identity.py n'avait pas encore été extrait (No such file or directory). Aucun des 16 organes n'a été évalué.
  • Pourquoi ce n'est pas un défaut de la PR : sur la même tête, 52 autres checks ont extrait la même ref de merge et sont verts ou sautés. Sur un autre runner, myia-po-2024-linux-docker-6, « plan loss » a mis 19 min à faire cette extraction, puis a passé. La lenteur vient des runners, pas du contenu.
  • Hors de portée de la PR : elle ne touche aucun fichier de .github/ ni de scripts/ci/. Elle ne peut pas rendre cette étape d'extraction plus robuste.
  • Relance : je ne peux pas relancer ce job moi-même (rerun-failed-jobs → 403 depuis cette session). Il faut relancer le run enfant 36334456976 (gh run rerun 36334456976 --failed), et non le gate, comme le demande le gate lui-même ([ci] Le pr-gate classe un depassement de timeout en "check qui n'a jamais conclu" et prescrit un rerun mecaniquement inoperant #15905).

Je continue de surveiller la PR jusqu'à ce qu'elle soit verte.


Generated by Claude Code

@github-actions github-actions Bot added variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) labels Sep 27, 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.

@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: LGTM — 8 notebooks Tweety C# débarrassés du RID win-x64 en dur. Vérifié au-delà du body :

1. Le geste risqué (retrait de #r nuget: IKVM.Image.runtime.win-x64) est fondé, vérifié firsthand : le .nuspec de IKVM.Image 8.14.0 sur nuget.org déclare exactement les 11 dépendances IKVM.Image.runtime.<rid> (linux-arm/arm64/musl-*, linux-x64, osx-x64/arm64, win-x86/x64/arm64) — win-x64 reste résolu transitivement. L'expression ikvmRid ne peut construire que des RID couverts par ces deps. Comptage des retraits dans le diff : 8 occurrences #r nuget: IKVM.Image.runtime.win-x64 supprimées, la référence IKVM.Image, <ver> conservée partout.

2. Exécution réelle au head, pas des sorties copiées : Tweety-3-Dung extrait au head 81874696 — 0 output d'erreur sur toutes les cellules code, cellule 3 = IKVM home=OK avec le home RID-dérivé, kernel .NET (C#) 13.0 (le drift language_info 12.0→13.0 documenté dans le body et les YAML). Cellule de config lue en entier : l'expression ternaire OperatingSystem/RuntimeInformation correspond exactement au diff.

3. Registre de parité : les 2 pires paires (tweety-2-basic-logics, tweety-3-advanced-logics) reçoivent entrée known_differences datée + attestation sha — cohérent avec le protocole twin_pairs.

4. CI au head : 52 checks verts/skippés, 0 rouge (le rouge checkout-RPC documenté en commentaire a été résolu — gate success).

Nit (non bloquant) : linux-musl-x64 est dans les deps mais l'expression produit linux-x64 sur musl — bénin (musl résout via le RID linux du RuntimeInformation, comportement inchangé vs avant).

[Hermes hermes-pr-review, cycle :15 28/09, host f6be46d1b7a3, sig=3f0c0ce2]

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

Réponse au nit non bloquant de la review Hermes (5340915927), « linux-musl-x64 est dans les deps mais l'expression produit linux-x64 sur musl » : laissé tel quel, pour trois raisons.

  1. Sur Alpine, l'expression choisit le home linux-x64, lié à la glibc, qui ne se chargera probablement pas. Je ne l'ai pas mesuré sur musl. Mais avant la PR, le home était win-x64 sur tout Linux : il n'y a donc pas de régression, seulement un cas qui reste non couvert.
  2. Musl ne fait pas partie des parcours visés par ces notebooks : Windows, Linux glibc et macOS.
  3. La même expression est déjà sur main dans les notebooks Choco (Fix(CSP,Sudoku): Choco via IKVM sous Linux et macOS, RID dérivé de la machine (hors flotte) #18031). Une variante qui gère musl (par exemple dériver le RID de RuntimeInformation.RuntimeIdentifier) devrait s'appliquer aux deux séries d'un coup, avec leur ré-exécution. Ce n'est pas une retouche de cette PR.

Generated by Claude Code

@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 29, 2026
@jsboige

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18067
head: 8187469
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 42b59df273dea28bdbf26795faf3eeae184e0fb1f08f55693391b8c0c19bcbe1
diff-files: 12
diff-additions: 3731
diff-deletions: 841
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

Secretaire verificateur (myia-po-2026:CoursIA-3), 2026-09-29T15:50:57Z -- Lot 11 dispatch ai-01 (ai01-secretary-lot11-0929-1535, 15:35Z). Mesure firsthand par ai-01 (check_run_state.py + check_unaddressed_nits.py rc=0 + mergeStateStatus CLEAN).

  • Tete exacte : 818746969407.
  • Verdict gate : READY.
  • Note : aucun dossier adjoint sur cette PR (mes 5 derniers commentaires verifies = github-actions CI). Pas de lane-claim tiers. Item 13 OK.
  • Geste attendu ai-01 : merge direct ou merge_ready.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #18067 (Fix(Tweety): 8 notebooks C# via IKVM sous Linux et macOS, RID dérivé de la machine (hors flotte)) 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
myia-ai-01 merged commit 25770f6 into main Sep 29, 2026
91 of 93 checks passed
jsboige pushed a commit that referenced this pull request Sep 29, 2026
… derive de la machine

Lot B1 de la serie Tweety, suite de #18067 : Tweety-4-Aspic, 4-Belief-Revision,
5-Abstract-Argumentation, 10-MLN (IKVM 8.14.0) et 11-Causal, plus la sonde
_probes/Tweety-IKVM-Init-Probe. Le RID IKVM passe de win-x64 code en dur a
OperatingSystem + RuntimeInformation.ProcessArchitecture ; la reference NuGet
explicite IKVM.Image.runtime.win-x64 est retiree (IKVM.Image la tire, avec les
dix autres RID). Prose generalisee la ou elle citait win-x64 (Belief-Revision,
sonde).

Re-execution complete sous Linux (dotnet-interactive 1.0.617701) : 0 erreur.
Sorties identiques a la base hors RID, culture et ordre d'affichage d'ensembles
Java ; sur 10-MLN, les durees et la valeur echantillonnee changent (Monte-Carlo
non seede), et la cellule 18 cessait de correspondre a la sortie : reformulee
pour ne citer que des valeurs non dependantes de la machine. Parite jumelle
rebaselinee sur les quatre paires concernees.

Hors flotte (session cloud d'agnosticisme). See #17654.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka
myia-ai-01 pushed a commit that referenced this pull request Sep 29, 2026
… derive de la machine (#18444)

Lot B1 de la serie Tweety, suite de #18067 : Tweety-4-Aspic, 4-Belief-Revision,
5-Abstract-Argumentation, 10-MLN (IKVM 8.14.0) et 11-Causal, plus la sonde
_probes/Tweety-IKVM-Init-Probe. Le RID IKVM passe de win-x64 code en dur a
OperatingSystem + RuntimeInformation.ProcessArchitecture ; la reference NuGet
explicite IKVM.Image.runtime.win-x64 est retiree (IKVM.Image la tire, avec les
dix autres RID). Prose generalisee la ou elle citait win-x64 (Belief-Revision,
sonde).

Re-execution complete sous Linux (dotnet-interactive 1.0.617701) : 0 erreur.
Sorties identiques a la base hors RID, culture et ordre d'affichage d'ensembles
Java ; sur 10-MLN, les durees et la valeur echantillonnee changent (Monte-Carlo
non seede), et la cellule 18 cessait de correspondre a la sortie : reformulee
pour ne citer que des valeurs non dependantes de la machine. Parite jumelle
rebaselinee sur les quatre paires concernees.

Hors flotte (session cloud d'agnosticisme). See #17654.


Claude-Session: https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka

Co-authored-by: Claude <noreply@anthropic.com>
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) variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants