You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Etat mesure au 2026-09-18 (lane myia-po-2025:CoursIA) — le tableau « Grains » ci-dessous porte 3 lignes « a ouvrir » qui sont livrees selon la chronologie du present body, verifiee firsthand ce jour (gh pr view N --json state : MERGED) :
Ces lignes restent reproduites telles quel ci-dessous (historique intact) ; aucune lane ne doit les reprendre comme travail ouvert. Restent reellement ouverts : #10474 (claime myia-po-2023:CoursIA-2), #10475 (veille — claim epic-wide myia-po-2024 marque DELIVERED PR #14800 MERGED, release demandee issuecomment-5730103293), et l'axe « AppHost pile GenAI apres #10474 » (gate sur #10474). Portee du present bloc : etat du tableau Grains uniquement ; les sous-grains crees entre le 2026-08-30 et ce jour ne sont pas reinventories ici.
État vérifié au 2026-08-30 — baseline historique et livraisons
Les trois sondes de la section « État mesuré du dépôt » sont une baseline historique datée du 2026-08-11, pas une description de l'état courant. Elles ont été re-mesurées sur le dernier commit de main antérieur à l'ouverture de l'issue (5934d23a969948150d9991f942ec10a8bf2e2959) :
git grep -il aspire retourne exactement 9 fichiers ; aucun AppHost ni répertoire GenAI/Aspire/ n'existe alors ;
SemanticKernel/04-SemanticKernel-Filters-Observability.ipynb porte 10 cellules code, 0 hit exporter et 0 hit ActivitySource dans ces cellules.
Les lectures Vibe du 2026-08-29 observent donc correctement l'état post-livraison, mais ne réfutent pas ces mesures initiales. La chronologie Git établit notamment :
Conséquence de tri : les affirmations historiques « 9 », « 0 » et « narré, jamais exécuté » restent exactes dans leur périmètre daté. L'état courant montre précisément le progrès produit par l'EPIC ; il ne doit pas être rétroprojeté sur sa baseline.
Origine : demande user 2026-08-11, à partir de The Unexpected AI Stack: C#/.NET — Part 1 (Charles Chen, 08/2026) — « compte tenu de notre positionnement singulier avec la parité csharp, ce début de série est très prometteur ».
Périmètre, précisé par le user : cet Epic couvre toute la série, dont seul le premier article est publié à ce jour — pas seulement Aspire. Aspire est le premier axe qu'on exploite parce que c'est celui que la Part 1 développe ; les axes suivants s'ouvriront au fil des publications. Le suivi des parutions est lui-même un grain (voir §Grains).
Pourquoi la série, et pas juste un outil
Notre parité C#/Python est jusqu'ici une parité de ponts vers des libs SOTA — PyMC ↔ Infer.NET, jpype ↔ IKVM, OR-Tools ↔ choco, mealpy ↔ MetaGeneticSharp, pyspiel ↔ PythonNet (#10382, livré par #10470). Dans tous ces couples, le C# rattrape un écosystème Python dominant.
La thèse de la série inverse le sens : elle soutient que pour construire et opérer des systèmes agentiques — orchestration, observabilité, introspection d'un process vivant, garde-fous statiques — l'outillage .NET est en avance et sous-estimé. C'est le premier corpus qui documente cet axe de façon suivie, et c'est exactement ce que « positionnement singulier » veut dire chez nous : nos notebooks C# n'ont pas à se contenter d'égaler leur jumeau Python, ils peuvent montrer ce que le Python n'a pas.
D'où le périmètre par série et non par outil : chaque article apporte un axe, chaque axe vaut un ou plusieurs grains, et la valeur pédagogique se construit sur l'ensemble.
Axes nommés par la Part 1 (garde-fou anti-dérive)
À citer tel quel plutôt qu'extrapoler :
Axe
Ce que l'article en fait
Aspire
encapsule le runtime ; orchestration programmable en C# (analogie Pulumi/CDK vs Terraform) ; aspire logs / describe / resource ; run --isolated pour l'isolation de ports par worktree
attaché à une application vivante par DOTNET_STARTUP_HOOKS + ASPNETCORE_HOSTINGSTARTUPASSEMBLIES ; connect init / connect list / connect <pid> ; accès direct aux dépendances du runtime ; #wrap / #replace pour envelopper ou remplacer une fonction à chaud
Roslyn
analyseurs statiques comme garde-fous d'agent ; générateurs de source
EF Core
requêtes vérifiées à la compilation
System.Threading.Channels, Orleans
concurrence et acteurs, mentionnés comme atouts de la pile
Sections de la Part 1, verbatim : Summary · Why C#? · Encapsulating the Runtime with Aspire · Built in telemetry and observability · Agent interaction with runtime resources · Port isolation for worktrees · Wiring CSharpRepl into the running application · Direct access to runtime dependencies · Wrapping and replacing functions at runtime · Closing Thoughts.
Part 2, publiée le 2026-08-13, distillée (#10897, verdicts tranchés ai-01 c.97) — le contenu annoncé avait glissé : la Part 2 réelle est le scaffolding du template zeeq-tmpl (Mise, symlink AGENTS.md/CLAUDE.md, MCP Nuxt UI + Playwright, minimal API Scrutor IEndpoint/IEndpointHandler, frontend Nuxt UI Vite, AppHost AddViteApp+WithPnpm, CSharpRepl scripté connect --streamPipedInput). EF Core compile-time et testcontainers sont absents (renvoyés en Part 4). Bilan de distillation : axe 1 (CSharpRepl scripté) livré — PR #10944 ; axes 2/3 différés (pas de surface d'accueil ; #10857 d'abord) ; axes 4/5/6 clos — qu'aucune lane n'y revienne sans élément neuf. Parts 3 (Copilot SDK streaming) et 4 (Testcontainers + telemetry) annoncées par l'auteur, non publiées — voir #10475.
Ce que la série ne dit pas : ni Semantic Kernel, ni ML.NET, ni Microsoft.Extensions.AI, ni ONNX/TorchSharp, ni l'interop Python. Le raccordement à nos séries existantes est notre apport — à ne pas attribuer à la source.
Table de parité visée
Axe
Python
C#/.NET
Observabilité d'appels LLM
OTEL SDK + collecteur à câbler, ou LangSmith / Langfuse (SaaS)
dashboard Aspire : cible OTLP incluse, interrogeable en CLI
Orchestration de dev
docker-compose, Tilt (YAML déclaratif)
AppHost Aspire : orchestration programmable
Introspection d'un process vivant
IPython, %autoreload, pdb attach
CSharpRepl : #wrap / #replace à chaud sur un process attaché
Garde-fous statiques sur du code généré
mypy, ruff (hors compilation)
analyseurs Roslyn (dans la compilation)
Requêtes de données validées
ORM à l'exécution
EF Core vérifié à la compilation
Isolation de ports par worktree
à la main
aspire run --isolated
Cette table est le livrable transversal de l'Epic : chaque grain en remplit une ligne avec du code exécuté, jamais avec de la prose.
État mesuré du dépôt (firsthand, 2026-08-11)
Sonde
Résultat
git grep -il aspire
9 fichiers, tous des faux positifs français (« le monde de l'aspirateur », Search-1) — aucun AppHost, aucun .AppHost.csproj
Un grain par axe, See #10473 (jamaisCloses : l'Epic vit tant que la série publie).
Hors périmètre
Aucune réécriture du contenu existant des séries touchées : les sections grossissent, le reste reste inchangé.
Aucun Aspire ni CSharpRepl en CI : ce sont des outils de développement local. Les notebooks restent exécutables sans eux.
Pas d'adoption d'Orleans ni de refonte d'architecture : la série est une source d'axes pédagogiques, pas un plan de migration.
Garde-fous applicables à chaque grain
C.1 (aucune erreur volontaire) · C.2 (cellules committées avec execution_count et sorties réelles) · Prong A (vrai outil, bridge_verdict écrit) · three-exercises-per-notebook · prose FR d'abord · tag Grain: en première ligne · pour un notebook .NET uniquement : strip_probe_banner.py --apply après ré-exécution.
État vérifié au 2026-08-30 — baseline historique et livraisons
Les trois sondes de la section « État mesuré du dépôt » sont une baseline historique datée du 2026-08-11, pas une description de l'état courant. Elles ont été re-mesurées sur le dernier commit de
mainantérieur à l'ouverture de l'issue (5934d23a969948150d9991f942ec10a8bf2e2959) :git grep -il aspireretourne exactement 9 fichiers ; aucun AppHost ni répertoireGenAI/Aspire/n'existe alors ;git grep -il "csharprepl\|dotnet-repl"retourne exactement 0 fichier ;SemanticKernel/04-SemanticKernel-Filters-Observability.ipynbporte 10 cellules code, 0 hitexporteret 0 hitActivitySourcedans ces cellules.Les lectures Vibe du 2026-08-29 observent donc correctement l'état post-livraison, mais ne réfutent pas ces mesures initiales. La chronologie Git établit notamment :
run --isolatedActivitySourceAspireBackgroundServiceConséquence de tri : les affirmations historiques « 9 », « 0 » et « narré, jamais exécuté » restent exactes dans leur périmètre daté. L'état courant montre précisément le progrès produit par l'EPIC ; il ne doit pas être rétroprojeté sur sa baseline.
Origine : demande user 2026-08-11, à partir de The Unexpected AI Stack: C#/.NET — Part 1 (Charles Chen, 08/2026) — « compte tenu de notre positionnement singulier avec la parité csharp, ce début de série est très prometteur ».
Périmètre, précisé par le user : cet Epic couvre toute la série, dont seul le premier article est publié à ce jour — pas seulement Aspire. Aspire est le premier axe qu'on exploite parce que c'est celui que la Part 1 développe ; les axes suivants s'ouvriront au fil des publications. Le suivi des parutions est lui-même un grain (voir §Grains).
Pourquoi la série, et pas juste un outil
Notre parité C#/Python est jusqu'ici une parité de ponts vers des libs SOTA — PyMC ↔ Infer.NET, jpype ↔ IKVM, OR-Tools ↔ choco, mealpy ↔ MetaGeneticSharp, pyspiel ↔ PythonNet (#10382, livré par #10470). Dans tous ces couples, le C# rattrape un écosystème Python dominant.
La thèse de la série inverse le sens : elle soutient que pour construire et opérer des systèmes agentiques — orchestration, observabilité, introspection d'un process vivant, garde-fous statiques — l'outillage .NET est en avance et sous-estimé. C'est le premier corpus qui documente cet axe de façon suivie, et c'est exactement ce que « positionnement singulier » veut dire chez nous : nos notebooks C# n'ont pas à se contenter d'égaler leur jumeau Python, ils peuvent montrer ce que le Python n'a pas.
D'où le périmètre par série et non par outil : chaque article apporte un axe, chaque axe vaut un ou plusieurs grains, et la valeur pédagogique se construit sur l'ensemble.
Axes nommés par la Part 1 (garde-fou anti-dérive)
À citer tel quel plutôt qu'extrapoler :
aspire logs/describe/resource;run --isolatedpour l'isolation de ports par worktreegen.ai(l'article) /gen_ai.*(conventions sémantiques OTEL) ;aspire otel spans <res> --search "…"DOTNET_STARTUP_HOOKS+ASPNETCORE_HOSTINGSTARTUPASSEMBLIES;connect init/connect list/connect <pid>; accès direct aux dépendances du runtime ;#wrap/#replacepour envelopper ou remplacer une fonction à chaudSections de la Part 1, verbatim : Summary · Why C#? · Encapsulating the Runtime with Aspire · Built in telemetry and observability · Agent interaction with runtime resources · Port isolation for worktrees · Wiring CSharpRepl into the running application · Direct access to runtime dependencies · Wrapping and replacing functions at runtime · Closing Thoughts.
Part 2, publiée le 2026-08-13, distillée (#10897, verdicts tranchés ai-01 c.97) — le contenu annoncé avait glissé : la Part 2 réelle est le scaffolding du template
zeeq-tmpl(Mise, symlinkAGENTS.md/CLAUDE.md, MCP Nuxt UI + Playwright, minimal API ScrutorIEndpoint/IEndpointHandler, frontend Nuxt UI Vite, AppHostAddViteApp+WithPnpm, CSharpRepl scriptéconnect --streamPipedInput). EF Core compile-time et testcontainers sont absents (renvoyés en Part 4). Bilan de distillation : axe 1 (CSharpRepl scripté) livré — PR #10944 ; axes 2/3 différés (pas de surface d'accueil ; #10857 d'abord) ; axes 4/5/6 clos — qu'aucune lane n'y revienne sans élément neuf. Parts 3 (Copilot SDK streaming) et 4 (Testcontainers + telemetry) annoncées par l'auteur, non publiées — voir #10475.Ce que la série ne dit pas : ni Semantic Kernel, ni ML.NET, ni Microsoft.Extensions.AI, ni ONNX/TorchSharp, ni l'interop Python. Le raccordement à nos séries existantes est notre apport — à ne pas attribuer à la source.
Table de parité visée
docker-compose, Tilt (YAML déclaratif)%autoreload,pdbattach#wrap/#replaceà chaud sur un process attachémypy,ruff(hors compilation)aspire run --isolatedCette table est le livrable transversal de l'Epic : chaque grain en remplit une ligne avec du code exécuté, jamais avec de la prose.
État mesuré du dépôt (firsthand, 2026-08-11)
git grep -il aspire.AppHost.csprojgit grep -il "csharprepl|dotnet-repl"GenAI/SemanticKernel/04-SemanticKernel-Filters-Observability.ipynb§6 « OpenTelemetry (Apercu) » — narré, jamais exécuté (0 exporter, 0ActivitySourcesur ses 10 cellules code). Également mentionné dansGenAI/Texte/9_Production_Patterns.ipynbdotnet --versionaspire.clidotnet tool install -g aspire.cli, donc RECOVERABLE-LOCAL (sota-not-workaround) — installé firsthand surmyia-po-2023:CoursIA-2le 2026-08-11aspire/CSharpRepl/OpenTelemetryavant celle-ci — pas de doublonGrains
gen_airéellement captéesmyia-po-2023:CoursIA-2run --isolatedsur notre dette de worktrees#wrap/#replace), face à%autoreload/pdbUn grain par axe,
See #10473(jamaisCloses: l'Epic vit tant que la série publie).Hors périmètre
Garde-fous applicables à chaque grain
C.1 (aucune erreur volontaire) · C.2 (cellules committées avec
execution_countet sorties réelles) · Prong A (vrai outil,bridge_verdictécrit) · three-exercises-per-notebook · prose FR d'abord · tagGrain:en première ligne · pour un notebook .NET uniquement :strip_probe_banner.py --applyaprès ré-exécution.