Constat vérifié
L’axe Roslyn de l’EPIC #10473 est presque entièrement absorbé, mais son dernier item E3 reste un exercice non livré : Task.Factory.StartNew(...) nu.
Sur origin/main :
Sous-grain
Étendre AGENTGUARD003 sans créer un diagnostic parallèle : signaler une invocation nue de Task.Factory.StartNew(...) lorsque le symbole résolu est System.Threading.Tasks.TaskFactory.StartNew, tout en conservant le comportement actuel de Task.Run.
Critères d’acceptation
- Le filtre sémantique accepte exactement
Task.Run ou TaskFactory.StartNew, sans heuristique textuelle.
- Un terrain fautif
Task.Factory.StartNew(...) nu rend AGENTGUARD003 x1.
- Des contrôles négatifs couvrent au minimum : tâche attendue ou récupérée, discard explicite
_ =, et StartNew homonyme sur un type utilisateur.
- Le projet Demo rend le nouveau diagnostic par
dotnet build ; le Verifier rend les verdicts attendus sur les terrains nouveaux et existants.
- Le notebook 06 transforme l’exercice 4 en exemple guidé exécuté, explique que
StartNew est défini sur TaskFactory, puis conserve un exercice étudiant non résolu conforme C.1.
- Ré-exécution .NET complète : toutes les cellules code portent un
execution_count, aucune sortie error, outputs réels committés ; strip_probe_banner.py --apply uniquement après ré-exécution.
- Le registre des axes cesse d’annoncer comme restants les items E3 déjà livrés et identifie cette tranche comme absorbée.
- Catalogue et traductions générées restent byte-identiques à
main.
Périmètre
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Analyzers/TaskRunFireAnalyzer.cs
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Analyzers/AnalyzerReleases.Shipped.md
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Demo/Program.cs
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Verifier/samples/TaskFactoryStartNew*.cs
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/06-Aspire-GardeFous-Roslyn.ipynb
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/distilled-axes-registry.md
See #10473. See #10475.
Constat vérifié
L’axe Roslyn de l’EPIC #10473 est presque entièrement absorbé, mais son dernier item E3 reste un exercice non livré :
Task.Factory.StartNew(...)nu.Sur
origin/main:TaskRunFireAnalyzer.AnalyzeInvocationne reconnaît queSystem.Threading.Tasks.Task.Run(ContainingType.MetadataName == "Task", méthodeRun) ;06-Aspire-GardeFous-Roslyn.ipynbporte déjà l’« Exercice 4 — Étendre AGENTGUARD003 » et nomme précisémentTaskFactory.StartNew, mais son stub reste non résolu ;TaskFactoryStartNew*.csn’existe dansAgentGuard.Verifier/samples/;GetAwaiter().GetResult()par feat(agentguard,#10473): AGENTGUARD005 — sync-over-async via GetAwaiter().GetResult() #13819/fix(agentguard,#13842): AGENTGUARD005b -- ConfigureAwait(false).GetAwaiter().GetResult() #13885, et l’exemption des typesResult<T>par le filtre sémantique existant.Sous-grain
Étendre AGENTGUARD003 sans créer un diagnostic parallèle : signaler une invocation nue de
Task.Factory.StartNew(...)lorsque le symbole résolu estSystem.Threading.Tasks.TaskFactory.StartNew, tout en conservant le comportement actuel deTask.Run.Critères d’acceptation
Task.RunouTaskFactory.StartNew, sans heuristique textuelle.Task.Factory.StartNew(...)nu rendAGENTGUARD003 x1._ =, etStartNewhomonyme sur un type utilisateur.dotnet build; le Verifier rend les verdicts attendus sur les terrains nouveaux et existants.StartNewest défini surTaskFactory, puis conserve un exercice étudiant non résolu conforme C.1.execution_count, aucune sortieerror, outputs réels committés ;strip_probe_banner.py --applyuniquement après ré-exécution.main.Périmètre
MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Analyzers/TaskRunFireAnalyzer.csMyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Analyzers/AnalyzerReleases.Shipped.mdMyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Demo/Program.csMyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/AgentGuard.Verifier/samples/TaskFactoryStartNew*.csMyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/06-Aspire-GardeFous-Roslyn.ipynbMyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/distilled-axes-registry.mdSee #10473. See #10475.