Repository navigation
Add(tooling,#23444): un organe de mesure multi-runtime pour les carnets .NET - #23447
Conversation
…ts .NET Mesurer un carnet .NET sous plusieurs runtimes avec un build de kernel unique : DOTNET_ROOT dedie par runtime, runtime effectif PROUVE dans la sortie, metrique extraite automatiquement, agregation sur plusieurs executions, verdict declare (DELTA ETABLI / INCONCLUSIF / NON RESOLU). Le carnet du depot n'est jamais modifie : l'organe lit la cellule source et execute dans un kernel jetable. Premiere application : axe 1 (awaits profonds) de 08-Aspire-AsyncFFI-Dotnet.ipynb. Compatibilite .NET 11 etablie (9 cellules de code, 0 erreur, runtime 11.0.0-rc.3.26522.148 prouve dans la sortie). A n=25 par runtime, le delta de la grandeur §4 est de +1,76 % avec des intervalles chevauchants -> INCONCLUSIF ; mecanisme intact sous les deux runtimes. Resultats dans docs/dotnet/net11-async-ffi-deltas.md. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
…mpteurs figes Deux rouges bloquants du PR gate sur #23447, reproduits localement sur le diff committé : - `docs-index-guard` : le nouveau doc n'était pas atteignable depuis `docs/README.md` — entrée ajoutée dans la section .NET. - `prose-counts` (strict) : « 9 cellules de code », « 0 cellule en erreur » et « 0 cellule sans execution_count » sont des compteurs d'artefacts figes dans la prose (#9377) — le prédicat est conservé, la mesure part. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] Verdict : READY — l'organe est reel, ses tests sont verts a la tete exacte, et l'arithmetique du document se recomputePR Perimetre : quatre fichiers, +646/-0
Les quatre chemins cites par le body sont exactement les quatre fichiers du diff : Aucun carnet n'est touche, donc le crible de fond des cellules est sans objet ici. Aucun fichier sous Tests : 10 verts, rejoues par moi a la tete exacteWorktree detache a Le compte annonce par le body (10 tests de logique pure, sans kernel ni reseau) est confirme. Les deux rouges du premier CI : reproduits et confirmes eteintsLe body dit que le premier Les deux sont verts. Le correctif de L'arithmetique du document se recomputeLe document publie deux lignes de mesures et une conclusion (« aucun gain .NET 11 n'est etabli sur cet axe »). Les trois assertions sont verifiables a la lecture :
Le document qualifie lui-meme le resultat d' Organ-first : l'organe natif est nomme et reutiliseLes cinq reponses exigees sont presentes dans le body, et la substance est verifiable : l'organe importe Portee du non-verifie, telle que la lane la declareLa mesure est mono-machine, mono-charge, avec une dispersion intra-runtime d'environ ±20 % qui domine l'ecart observe ; le document le dit. Le runtime .NET 11 de mesure n'est pas present sur mon siege, donc je n'ai pas rejoue la mesure : ce que j'atteste est que l'outil est rejouable, que ses tests sont verts, et que le document porte ses propres limites. La verification independante designee par la lane est le document de famille Ordre de merge : mesure, sans conflitLa meme question (axe 1, carnet Aspire AsyncFFI, compatibilite .NET 11) est mesuree par #23450 depuis un second siege, avec d'autres fichiers. J'ai mesure le croisement : Checks
B.0 : rc=0Aucune phrase de levee manquante. Les 2 commentaires sont des rapports d'organes (organ-duplication, path-collision), sans marqueur de reserve. Ce que ce dossier ne dit pasLa valeur du verdict |
|
Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine. Le label Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans Seuil, historique et exceptions : cf. |
myia-ai-01
left a comment
There was a problem hiding this comment.
Approbation coordinateur à la tête exacte 29fa136 (organe de mesure multi-runtime .NET, son test et la fiche de l'axe 1). Les 10 tests de logique pure passent à cette tête. L'organe réutilise les organes existants au lieu de les refaire : il importe collect_outputs de exec_single_cell (multiruntime_probe.py:180) et bound_native_thread_pools de notebook_helpers (:57). L'arithmétique de la fiche se recalcule à l'identique (+1,76 %, intervalles chevauchants), et le verdict INCONCLUSIF est le verdict honnête. Aucun carnet touché, et les checks sont verts au pli latest-wins. Point de portée, non bloquant : aucun artefact de mesure n'est versionné ; la falsifiabilité passe par la commande de rejeu commitée, alors que #23450 versionne ses JSON.
Grain: DEEP/research-code — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #22464
Add(tooling,#23444): un organe de mesure multi-runtime pour les carnets .NET
Objet
Mesurer un carnet .NET sous plusieurs runtimes avec un build de kernel unique, et rendre
le verdict reproductible : runtime effectif prouvé dans la sortie, métrique extraite
automatiquement, agrégation sur plusieurs exécutions, verdict déclaré.
Quatre fichiers, aucun carnet touché :
scripts/notebook_tools/multiruntime_probe.pyscripts/notebook_tools/tests/test_multiruntime_probe.pydocs/dotnet/net11-async-ffi-deltas.mddocs/README.mdOrgan-first — les 5 réponses
.NETpossèdescripts/notebook_tools/dotnet_executor.pyetexec_single_cell.py: ils exécutent descellules .NET et savoiront un jour faire tourner un carnet sous un runtime donné.
import collect_outputsdeexec_single_cell(pas de réimplémentation de la collecte dessorties) et réutilise
bound_native_thread_poolsdenotebook_helpers. Il n'exécute pas lescellules lui-même : il les confie au même chemin d'exécution que le reste du dépôt.
pas un export : c'est le choix du runtime, absent des deux organes.
dotnet_executor.pynefait que réparer un
DOTNET_ROOTsans SDK ;exec_single_cell.pyne recâble jamaisl'environnement. L'organe ne les modifie pas (il n'aurait pas à le faire pour son besoin) : il
pose
DOTNET_ROOT+ le roll-forward dans l'environnement du kernel qu'il lance, ce queles deux organes ne font pas.
wall-clock : il rend
11,0 spour le carnet sous .NET 10 — grandeur dominée par ledémarrage kernel + Roslyn, qui ne distingue pas les runtimes (le document de famille
docs/dotnet/net11-runtime-deltas.mdle dit déjà). C'est ce témoin-là qui est écarté, au profitde la grandeur runtime-sensible du carnet (§4).
docs/dotnet/net11-runtime-deltas.md(bancs BDN, PRs Docs(dotnet,#18770): re-mesure des 3 bancs encore INCONCLUSIF — la fenetre calme n'est pas obtenable sur ai-01 #23326 et Fix(dotnet,#18771): re-mesure banc 4 semantic-fleet -- les deux drapeaux maintenus (croisement avec la session a 5 passes) #23421 en cours) mesure la mêmequestion par un chemin indépendant (compilation, pas exécution). Les deux documents sont
siblings, pas concurrents ; le cross-référencement y est explicitement laissé à qui mergera
les PRs en cours sur le fichier de famille.
Le problème que l'organe résout
Les organes d'exécution du dépôt démarrent un kernel .NET Interactive qui hérite de
l'environnement du process appelant, mais aucun ne permet de choisir le runtime. Mesurer un
carnet sous un runtime isolé relevait donc de la plomberie manuelle : copie de travail,
DOTNET_ROOTdédié, roll-forward, relecture à la main de la métrique dans la sortie. Cet organerend la mesure reproductible :
microsoft.dotnet-interactive1.0.712001, pin canonique [P0] .NET 11 EPIC #18695 -- aligner le pin dotnet-interactive (po-2026 mesure 1.0.712001 != canon 1.0.617701) #18766), exécuté telquel sous N runtimes — seul le
DOTNET_ROOTchange ;même kernel que la cellule mesurée imprime
RuntimeInformation.FrameworkDescription,Environment.Versionet le répertoire de runtime chargé ;runs = [...], médianes, identités de thread) etagrégée sur plusieurs exécutions ;
DELTA ETABLIsi les intervalles [min,max] des deux runtimes sontdisjoints,
INCONCLUSIFsinon,NON RESOLUsous le plancher de résolution (0,5 ms,configurable). Un
INCONCLUSIFest un résultat déclaré, pas un échec de l'outil.Le carnet du dépôt n'est jamais modifié : l'organe lit la cellule source, exécute dans un kernel
jetable et garde les sorties en mémoire. Un test vérifie l'identité binaire du carnet après
lecture.
Première application — axe 1 (awaits profonds) du carnet
08-Aspire-AsyncFFI-Dotnet.ipynbLe carnet est compatible .NET 11 : les 9 cellules de code ont été exécutées sous
11.0.0-rc.3.26522.148sans erreur, et le runtime effectif est prouvé dans la sortie.Grandeur mesurée : l'instrument §4 — le temps que le thread natif reste bloqué dans
SetResultpendant que la continuation s'exécute en ligne (le wall-clock du carnet ne distingue pas les
runtimes). n = 25 runs par runtime (5 répétitions × 5 runs internes).
RunContinuationsAsynchronouslyRunContinuationsAsynchronouslyPreuves de runtime (dans la sortie, pas supposées) :
Le mécanisme est intact sous .NET 11 : en [A] les identifiants de thread natif/reprise sont
identiques(la continuation s'exécute en ligne), en [B] ils sontdifférents(la continuationpart sur le pool managé) — sous les deux runtimes, dans les 5 runs.
Aucun gain .NET 11 n'est établi sur cet axe. L'écart de médiane (+1,76 %) est de l'ordre de la
dispersion intra-runtime (≈ ±20 %) et les intervalles se chevauchent largement. Trois passes à n = 5
annoncent des deltas de −10,37 % à +2,52 % d'une passe à l'autre, signe non stable : c'est
la démonstration directe que le verdict à n = 5 n'avait pas de valeur.
SOTA — verdict
RECOVERABLE-LOCAL. Le runtime .NET 11 de mesure (
~/.dotnet-r11,11.0.0-rc.3.26522.148) a étéinstallé user-local sans élévation (
dotnet-install, règle F) et est réellement invoqué ; lapreuve en est dans la sortie citée ci-dessus. Aucune sortie dégradée n'est committée, aucun
INTRINSICn'est déclaré.Ce que cette PR ne fait pas
output-failure) n'est concerné par ce diff.
docs/dotnet/net11-runtime-deltas.mdn'est pas touché : ses PRs(Docs(dotnet,#18770): re-mesure des 3 bancs encore INCONCLUSIF — la fenetre calme n'est pas obtenable sur ai-01 #23326, Fix(dotnet,#18771): re-mesure banc 4 semantic-fleet -- les deux drapeaux maintenus (croisement avec la session a 5 passes) #23421) sont en cours sur ce fichier. Le cross-référencement (la ligne à reporter) est
écrit dans le document nouveau et laissé à qui mergera.
08-Aspire-AsyncFFI-Dotnet.ipynbn'est pas touché : les résultats vont dans undocument distinct.
l'écart observé. C'est dit dans le document.
Grain #23441 (axe 1 de l'EPIC #18695) — arbitrage demandé au coordinateur
Le grain #23441 demande l'axe 1 de l'EPIC .NET 11 ; le contenu qu'il demande est celui livré
ici. Il reste non claimé : le plafond EPIC #22500 s'y applique cette semaine (EPIC #18695
visitée le 28/10). L'issue #23444 a donc été créée sans parent lisible (motif : l'organe est
transversal — il sert d'autres séries que l'axe 1), le lien vers #18695 restant visible en prose.
L'arbitrage du plafond revient au coordinateur (
--forceou clôture du grain), pas à la lane.Rouges du premier CI — reproduits puis réparés
Le premier
PR gatea rouge sur deux jambes. Les deux ont été reproduites localement sur lediff committé, puis corrigées dans la branche (commit dédié) :
docs-index-guard: le document nouveau n'était pas atteignable depuisdocs/README.md—une ligne d'index a été ajoutée dans la section .NET (
docs/README.md).prose-counts(bloquant en mode--strictdepuis prose-counts : le critère de sortie de #9377 n'a jamais été atteint (65 notebooks, guard advisory muet) #17636) : la prose du document figeait descompteurs d'artefacts (« 9 cellules », « 0 cellule en erreur », « 0 cellule sans
execution_count») — le prédicat est conservé, la mesure retirée (Les donnees quantitatives appartiennent au CI, pas a la prose — supprimer les compteurs manuels (44 notebooks + ~30 README) #9377).Vérifications après le correctif, sur le diff committé :
Tests
Les tests pinnent la logique pure (parsing FR/EN, verdict, plancher de résolution, lecture
non destructive du carnet) : ni kernel, ni runtime, ni réseau. Les imports du noyau Jupyter sont
différés dans
run_oncepour que cette logique reste testable sans la pile kernel.Smoke de bout en bout relancé après la refonte :
exit 0, deux runtimes mesurés, verdictsattendus, runtime prouvé dans la sortie.
🤖 Generated with Claude Code