Skip to content

[Epic] .NET 11 — mesure progressive des gains runtime async + numerique avant saut hors LTS (sous-modules integres) #18695

Description

@jsboige

État mesuré au 2026-10-05 (consolidation #13906, lane myia-po-2025:CoursIA).

Cette Epic n'a pas de cases d'acceptance — c'est une Epic prospective, ouverte sur un plan P0-P3 et un statut déclaré « À créer ». La mesure porte donc sur l'état de chaque étape du plan et de ses six filles, confronté à origin/main.

Livré (2 étapes sur 10, plus la structuration)

Étape du plan État mesuré Artefact
P0 · Récupérer la 2ᵉ moitié de l'article Toub livrée PR #18772 (MERGE) → docs/dotnet/net11-toub-digest.md + docs/dotnet/net11-runtime-deltas.md sur main. Sections GC, JSON, Regex, Networking, Threading et Numerics récupérées par lecteur SearXNG par section (WebFetch plafonne ~50 %), ratios mesurés et PRs dotnet/runtime# par section.
Structuration du plan en filles livrée 6 filles ouvertes : #18766 (pin), #18767 (gitlinks R2), #18768 (gates R3), #18769 (3 carnets types), #18770 (bancs sous-modules), #18771 (delta 9/10/11)
P0 · État des gates par sous-module (R3) + PR dédiée livrée #18768 CLOSED
P0 · Divergence du pin dotnet-interactive traitée en amont, fille encore ouverte #19208 CLOSED (« matrice de conformité flotte au canon dotnet-interactive ») ; #18766 reste OPEN

Non livré — ce que l'Epic existe pour produire

Aucune mesure .NET 11 n'existe encore : pas un seul banc BenchmarkDotNet ciblant .NET 11 dans le dépôt (git ls-tree -r origin/main | grep -i benchmark ne rend que des bancs sans rapport — TTS, QuantConnect). Les trois étapes P1 le sont donc entièrement : #18769 (sélection des 3 carnets types), #18770 (banc in-repo par sous-module), #18771 (delta .NET 9 / 10 / 11) sont ouvertes et non commencées.

Dérive R2 mesurée ce jour (commande de submodule-maintenance.md règle 2, refs/heads/<branch> quand .gitmodules en déclare une) :

Sous-module État Gitlink
MetaGeneticSharp OK dbcd40473e0f
Z3.Linq OK 8c7ae3e8ce3e
Automata OK 84d21fb88a5e
semantic-fleet OK 16c9388b3479
Argumentum DÉRIVÉ 6bc573f73220 → c61bd79ab540

Les 4 sous-modules épinglés à HEAD sont frais ; seul Argumentum dérive, et c'est le cas attendu : .gitmodules lui déclare branch = master, et la règle 7 de submodule-maintenance.md (mandat user 2026-09-23) veut qu'il suive la tête de sa branche, dependabot.yml ouvrant chaque jour la PR de bump. Une dérive mesurée ici n'est donc pas une veille, c'est une PR de bump qui attend son merge.

Ce qui reste, et qui lève l'Epic

  1. Les trois étapes P1 — c'est le cœur de l'Epic : sélectionner les 3 carnets types, poser un banc BenchmarkDotNet in-repo par sous-module, et mesurer le delta .NET 9 / 10 / 11. Tant qu'aucun delta n'est mesuré, l'Epic n'a rien produit de son objet propre.
  2. [P0] .NET 11 EPIC #18695 -- aligner le pin dotnet-interactive (po-2026 mesure 1.0.712001 != canon 1.0.617701) #18766 (pin dotnet-interactive) et [P0] .NET 11 EPIC #18695 -- etat des gitlinks sous-modules (R2) : FRESH / DERIVE / INJOIGNABLE #18767 (gitlinks R2) encore ouvertes, bien qu'un livrable les ait déjà couverts (docs(kernels,#18766): matrice de conformite flotte au canon dotnet-interactive 1.0.712001 #19208 pour le pin, la mesure R2 ci-dessus pour les gitlinks).
  3. La décision LTS vs GA — .NET 11 est en RC, donc hors LTS ; la convention du dépôt est .NET 9.0 (code-style.md:18). Le saut est un arbitrage user, à inscrire au registre de questions, pas un geste de lane.

Portée non vérifiée : je n'ai pas re-mesuré la conformité du pin dotnet-interactive sur les six machines (le livrable #19208 le fait) ; la dérive R2 ci-dessus est mesurée depuis ce clone, sur origin/main, à l'instant — elle est datée de sa mesure, pas de sa lecture.


.NET 11 — mesure progressive des gains runtime async + numerique avant saut hors LTS

Origami parce qu'on plie et deplie le meme geste : BenchmarkDotNet sur sous-module = mesure .NET 11 = maintien de la lib en parallele.

Contexte

Suite a l'audit des ameliorations de performance .NET 11 (Stephen Toub, .NET Blog, 2026-09-15, https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-11/) et de l'inventaire .NET du depot CoursIA (cf exploration c.2026-10-01), etude des gains potentiellement applicables au materiel .NET du depot principal ET des sous-modules declares.

Mesure des benefices vs cout de saut hors LTS (.NET 9 LTS canonique, cf code-style.md). Convention cible actuelle : .NET 9.0 (code-style.md:18), a arbitrer.

Angle retenu

Les sous-modules ne sont pas seulement des cibles de la migration, ils sont le terrain de mesure privilegie — bibliotheques pures, sans I/O utilisateur, avec des kernels serres (algorithmes deterministes, allocations mesurables, peu de dependances externes). C'est la qu'un BenchmarkDotNet en cellule notebook est le plus discriminant, et la qu'un delta runtime se voit sans bruit.

L'Epic reunit la mesure et la maintenance des sous-modules dans le meme temps de cycle, conformement au mandat submodule-maintenance.md R6 (« un sous-module compte dans le provisionnement »).

Cibles d'organe

Depot principal

  • MyIA.AI.Notebooks.csproj (hote .NET Interactive) — gains attendus : Runtime Async opt-in, JIT escape analysis (boxing Nullable, ObjectEqualityComparer), DateTime.Now timezone caching, Guid.Parse, ArgumentNullException.ThrowIfNull Tier 0.
  • MyIA.Trading.Backtester (ML.NET 6 preview, Accord 3.8.2-alpha) — gains attendus : JIT bounds checks coalesces, vectorisation Slice, LINQ Min/Max bytes/shorts.

Sous-modules (parcours de mesure + maintenance, cf inventaire .NET)

Sous-module Remote TFM actuelles .cs csproj Cible Epic
Argumentum ArgumentumGames/Argumentum net9.0 / net9.0-windows 349 5 Mesure benchmarks ; bump si gain net
MetaGeneticSharp jsboige/MetaGeneticSharp net9.0 (MetaGeneticSharp) 594 27 Mesure metaheuristiques ; bump si gain net
Z3.Linq MyIntelligenceAgency/Z3.Linq (fork endjin) net8.0 47 5 Bump net8 -> net9, puis mesure
semantic-fleet MyIntelligenceAgency/semantic-fleet (branch stable-from-v0343) net8 / netstandard2.0 / net9.0 119 8 Maint + mesure
Automata MyIntelligenceAgency/Automata net8.0 — — Maint + mesure

Le critere pertinent : « A marche sur une machine SPECIFIQUE avec le bon env » (regle SOTA RECOVERABLE-MACHINE). Un sous-module est deja un candidat naturel : environnement isole, build deterministe, tests integres. La mesure .NET 11 = la mesure qui revele ce que le sous-module ne dit pas en lisant son code.

Mesures a effectuer

  1. Cible canonique kernel : dotnet-interactive 1.0.617701 (po-2024 divergence documentee dans kernels-runtime.md, pin jamais installe sur po-2024) — divergence a resoudre avant la mesure.
  2. Cible runtime : .NET 11.0.0-rc.1.26425.128 (RC1) vs .NET 10.0.12 (Toub benchmark) vs .NET 9 LTS (canonique CoursIA actuel).
  3. Carnets types (depot principal) : 3 carnets representatifs — 1 GenAI/SK awaits profonds, 1 ML.NET Backtester numerique, 1 Probas/Infer allocations. BenchmarkDotNet en cellule sur le meme hardware.
  4. Sous-modules — banc d'essai dedie : pour chacun, 1 BenchmarkDotNet projet in-repo qui exerce l'API publique sur des hot paths connus. Resultats publics, compares a la baseline net8/net9 par lane qui detient le sous-module (regle submodule-maintenance.md R3 — substitution par 2 verifications firsthand independentes si gate absent).
  5. Sections article Toub non recuperees : GC, JSON, Regex, Networking, Threading, Numerics (WebFetch plafonne a ~50%). Re-fetch via autre canal (PR runtime# comments GitHub, agregat c-sharpcorner).

Points de resonance

Domaine Benefice mesure Source Cible Epic naturelle
Runtime Async opt-in 2 couches x3,4 ; exceptions profondeur 30 x4,8 Toub MyIA.AI.Notebooks.csproj (awaits SK)
Boxing Nullable x4,8 + 0 B alloc Toub semantic-fleet (DTOs), Argumentum
DateTime.Now timezone caching x1,9 devdigest Argumentum (timestamps evenementiels)
Guid.Parse -20 a -25 % devdigest Z3.Linq, Automata
LINQ Min/Max bytes/shorts -70 a -75 % devdigest MetaGeneticSharp (fitness loops)
String.Split -13,6 % c-sharpcorner Argumentum (parsing logs)
ASP.NET Core startup -14,6 % ; throughput +9,4 % c-sharpcorner semantic-fleet (services)
Escape analysis (CEA) 24 B -> 0 B Toub Backtester (structs Vector)

Risques

  • .NET 11 RC1 = hors LTS pendant la phase RC, saut de .NET 9 LTS a valider avec ai-01 + user.
  • Pin kernel divergent po-2024 (kernels-runtime.md) doit etre resolu avant la mesure (sinon BenchmarkDotNet compare des apples a des oranges).
  • Plafond Roslyn 4.12 : si kernel reste sur 1.0.617701, plafond Roslyn impose les versions restaurables (#r "nuget:") — risque de devoir downgrader certains packages.
  • Section GC / JSON non mesurees firsthand : WebFetch plafonne, deuxieme moitie de l'article Toub non recuperee.
  • Sous-modules a TFM heterogene : Argumentum et MetaGeneticSharp en net9, Z3.Linq et Automata en net8, semantic-fleet mixte. Une migration Epic doit commencer par aligner (net8 -> net9) avant d'attaquer net11, sinon le saut cumule masque les gains nets de chaque etape.

Plan de travail (sub-issues filles)

Priorite Item
P0 Resoudre la divergence du pin dotnet-interactive entre machines (regle F du CLAUDE.md : reparer, pas contourner)
P0 Recuperer la 2eme moitie de l'article Toub (GC, JSON, Regex, Networking) via canal de fetch alternatif
P0 Mise a jour des gitlinks sous-modules (regle submodule-maintenance.md R2) — DERIVE / INJOIGNABLE par sous-module
P0 Etat des gates par sous-module (regle R3) ; PR dediee si gate manquant
P1 Selectionner 3 carnets types (1 GenSK + 1 ML.NET Backtester + 1 Probas/Infer)
P1 Banc d'essai BenchmarkDotNet in-repo par sous-module : 1 projet dedie, resultats publics, compares net8/net9 baseline
P1 Mesurer le delta .NET 9 LTS -> .NET 11 RC1 sur les 3 carnets + les bancs sous-modules
P2 Decision LTS vs GA — escalade user (registre de questions)
P2 Si decision = saut GA, PR pour net11.0 dans MyIA.AI.Notebooks.csproj + opt-in runtime-async=on
P3 Migration par sous-module selon resultats : bump TFM, regen Benchmarks, mesure post-bump
P3 Bump des pointeurs parents CoursIA une fois chaque sous-module migre en local (ordre submodule-maintenance.md R2)

Pourquoi cette forme — la double finalite

L'Epic sert deux objectifs correles :

  1. Mesure des gains .NET 11 — argument decisif tranche par BenchmarkDotNet, pas par lecture de release notes.
  2. Maintenance active des sous-modules — un sous-module qu'on benchmarke est un sous-module qu'on n'oublie pas six semaines. Le geste de mesure rejoue le geste de maintenance (build, tests, freshness).

Liens

Statut

A creer. Tranche de realisation P0 reservee a la lane qui portera la premiere sous-issue.

Activity

  1. added
    EPICEpic tracking issue with sub-issues
    on Oct 1, 2026
  2. jsboige commented on Oct 1, 2026

    @jsboige
    OwnerAuthor

    Tranche 1 livree par myia-po-2026:CoursIA (claim 00:25Z local) :

    P0 n°2 (fetch) est clos par cette tranche ; les P0 restantes et les P1 sont pretes a etre claimables cross-lane.

  3. added a commit that references this issue on Oct 2, 2026
  4. jsboige commented on Oct 5, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2025:CoursIA — consolidation du body de l'issue #18695 (state mesure de l'Epic prospective).

    Ce grain ne modifie aucun fichier du depot : son geste est la reecriture du body avec l'etat mesure de chaque etape du plan P0-P3 et de ses 6 filles. Aucune collision : je ne touche ni docs/dotnet/, ni les sous-modules, ni les carnets.

  5. jsboige commented on Oct 5, 2026

    @jsboige
    OwnerAuthor

    Consolidation #13906 — issue mesuree, laissee OUVERTE.

    Cette Epic est prospective : pas de cases d'acceptance, un plan P0-P3 et un statut « À creer ». La mesure porte donc sur l'etat de chaque etape et de ses 6 filles, confronte a origin/main.

    Livré :

    Non livre — l'objet propre de l'Epic : aucune mesure .NET 11 n'existe. Aucun banc BenchmarkDotNet ciblant .NET 11 n'est dans le depot. Les trois etapes P1 (#18769, #18770, #18771) sont ouvertes et non commencees.

    Derive R2 mesuree ce jour (commande de submodule-maintenance.md regle 2) : 4/5 OK (MetaGeneticSharp dbcd40473e0f, Z3.Linq 8c7ae3e8ce3e, Automata 84d21fb88a5e, semantic-fleet 16c9388b3479) ; 1 DERIVE — Argumentum 6bc573f73220 → c61bd79ab540. C'est le cas attendu : .gitmodules lui declare branch = master et la regle 7 veut qu'il suive la tete de sa branche, Dependabot ouvrant la PR de bump. Ce n'est pas une veille, c'est une PR de bump qui attend son merge.

    Ce qui leve l'Epic : les trois etapes P1 (les deltas .NET 9/10/11 mesures), #18766 et #18767 encore ouvertes, et la decision LTS vs GA — .NET 11 est en RC donc hors LTS, convention du depot .NET 9.0 (code-style.md:18) : c'est un arbitrage user, a inscrire au registre, pas un geste de lane.

    Portee non verifiee : la conformite du pin sur les six machines n'a pas ete re-mesuree ici (le livrable #19208 le fait) ; la derive R2 est mesuree depuis ce clone, a l'instant.

  6. jsboige commented on Oct 12, 2026

    @jsboige
    OwnerAuthor

    Etat mesure au 2026-10-12 ~00:30Z (lane myia-po-2024:CoursIA, tirage du tapis — protocole #11900). Ce bloc ne remplace pas la consolidation du 2026-10-05 ci-dessous : il en corrige une section, « Non livre — ce que l'Epic existe pour produire », perimee depuis le 07/10.

    Fille Etat mesure Preuve firsthand (12/10 ~00:30Z)
    #18769 — 3 carnets types livree [DELIVERED] po-2026 du 2026-10-02T06:07Z : les 3 carnets nommes (GenSK / ML.NET Backtester / Probas-Infer) avec durees mesurees, kernel .net-csharp, canon dotnet-interactive 1.0.712001. Rien d'actionnable depuis : le fil ne porte plus que deux [RELEASED] (po-2025 07/10 04:58Z, ai-01 07/10 21:24Z).
    #18770 — bancs sous-modules livree (ce cycle) Commentaire c.6115438303 du 2026-10-12T00:09Z : les cinq tranches sont livrees, la table de renvoi (3e acceptance) y est postee, avec l'etat mesure de chaque PR amont (MGS#58 MERGED 06/10 ; Z3.Linq#34, Automata#8, semantic-fleet#84).
    #18771 — delta .NET 9/10/11 livree PR #18831 MERGED le 2026-10-03T03:27Z ; docs/dotnet/net11-runtime-deltas.md est sur main (12 596 o) et porte les tables de deltas : conditions reproductibles (i7-12700H, runtimes 9.0.20 / 10.0.12 / 11.0.0-rc.1.26425.128, mediane de 3 passes interleavees), bancs par sous-module et allocations.
    • Consequence pour une lane servie par le tapis : aucun sous-grain worker actionnable dans ces trois filles — elles sont livrees et n'attendent qu'une cloture. Le reste de l'Epic (P2 = decision LTS vs GA) est une escalade user, pas un grain de lane.
    • Portee non verifiee : etat GitHub des trois filles et des PRs citees au 12/10 ~00:30Z, plus la presence et la taille du fichier de deltas sur main ; je n'ai pas rejoue les bancs ni les carnets.

    Refs #18695.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    EPICEpic tracking issue with sub-issues

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions