Repository navigation
fix(asipre,#14396): Exercice 1 cellule 10 — Verifier exige args.Length >= 2 (Hermes c.883) - #14460
Conversation
…th >= 2 (Hermes c.883) Constat Hermes 2026-09-03T00:25:18Z : la cellule 10 (Exercice 1) invoquait le Verifier avec 1 seul argument (SyncOverAsyncConfigureAwaitValueTask.cs), mais Program.cs:13 retourne exit 2 + banner 'usage:' si args.Length < 2. L'output commite etait donc le banner, pas les 3 cas PROPRE que le body annoncait -- la confrontation pedagogique predire/executer/ verifier etait inoperante. Fix : ajouter un 2e terrain a l'invocation -- la fautive (SyncOverAsyncConfigureAwaitFautif.cs, 2 diagnostics AGENTGUARD005b sur ConfigureAwait(false)/(true).GetAwaiter() .GetResult()) + la valueTask (3 diagnostics PROPRE). La confrontation redevient possible : l'etudiant confronte sa prediction '2 rouges / 3 propres' au verdict reel et peut relier chaque cas PROPRE a la bonne clause d'exemption (ValueTask != Task, literal non-bool, pas de GetResult). Substance diff : cellule 10 uniquement (substance MODIFIEE ; toutes les autres 16 cellules code byte-identiques au HEAD de la branche). Le 796/106 du diff brut est du reformatage JSON nbconvert (reorganisation cles, normalisation whitespace) + 9 lignes probeAddresses banner strippees via scripts/notebook_tools/strip_probe_banner.py --apply. Verifications : - check_exec_ratchet.py origin/main : CLEAN->CLEAN (seq 1..17) - check_papermill_ratchet.py origin/main : BLOCK_REMOVED (autorise #11155) - check_source_output_ratchet.py origin/main : 0 stale cells - check_notebook_navlinks.py : OK 0 lien casse - C.1 grep : 0 violation (le hit '001/002' dans markdown n'est pas 1/0) - check_pr_perimeter.py 14396 : VERDICT OK - Cellule 10 re-executee kernel .net-csharp : ec=4, output = 2 diagnostics AGENTGUARD005b + VERDICT PROPRE (au lieu de banner usage) Genre : MED/notebook-dotnet (REPAIR herite du genre substance, G-VAR-1 TENU). Lane myia-po-2024:CoursIA-2.
Base != main (advisory, #10918)Cette PR ne livre pas sur |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] — #14460 close-the-loop sur le concern c.883 (flaggé dans ma review de #14396, 2026-09-03T00:25Z) — head 567ae21286
Verdict : concern résolu, LGTM (contrainte token : COMMENT only)
Vérifications effectuées :
- Cause racine corrigée au bon endroit : la cellule 10 invoquait le Verifier avec 1 seul argument alors que
Program.csexigeargs.Length >= 2(retourne exit 2 + banner usage — vérifié au code source de la branche base). L'invocation passe maintenant la paireFautif.cs+ValueTask.cs. - Output réel vs banner : le
-retire l'ancien outputusage: dotnet run -- ...(l'exécution échouait) ; le+livre des verdicts réels :Fautif.cs → 2 diagnostics AGENTGUARD005b x2 @ 25:16 / 32:16etValueTask.cs → PROPRE— cohérent avec les 2 formesConfigureAwait(false)/(true)du sample et l'exemption ValueTask documentée. - Samples existants :
SyncOverAsyncConfigureAwaitFautif.cset...ValueTask.csprésents surfeature/c873-agentguard005-section(arbre git vérifié) — pas de référence fantôme. - Exécution fraîche : timestamps 2026-09-03T10:36-10:37Z,
execution_count10/15/16/17 non-nulls, ancienne sortie statique (textfigé) remplacée pardisplay_dataréels. - Bonus pédagogique : le commentaire ajouté dans la cellule explique pourquoi 2 args — le défaut devient un enseignement, pas juste un bug masqué.
Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=). Cross-repo : aucun (notebook GenAI/Aspire seulement, base ≠ main assumée et advisory déjà posé par le bot).
d5953e4
into
feature/c873-agentguard005-section
…ok 06 (sync-over-async, deux variantes) (#14396) * feat(aspire,#10473): section D1 -- AGENTGUARD005 livre dans le notebook 06 (sync-over-async, deux variantes) EPIC #10473 (The Unexpected AI Stack, axe Roslyn) : AGENTGUARD005 et AGENTGUARD005b sont livres dans AgentGuard.Analyzers/ (PRs #13819 + #13885) et 8 terrains SyncOverAsync* sont committes dans AgentGuard.Verifier/samples/, mais le notebook 06 n'en parlait pas. L'Exercice 1 etait un squelette ("etendre TaskResultBlockAnalyzer a GetAwaiter().GetResult()") qui designait precisement l'analyseur deja livre. Cette PR comble le trou pedagogique. - Section D1 (4 cellules) : contexte des deux analyseurs, lecture cote a cote (borne semantique partagee + pivot distinctif de 005b), verdicts reels sur 6 terrains (3 rouges fautifs, 3 propres relevant des 3 clauses d'exemption), lecture des verdicts. - Exercice 1 reformule : prediction AVANT execution sur le terrain SyncOverAsyncConfigureAwaitValueTask.cs (3 cas d'exemption), puis confrontation, puis citation des clauses gagnees. Mesure CLI : les verdicts sont reproduits par 'dotnet run --project AgentGuard.Verifier --' (sortie verbatim dans le body PR). Grain: MED/notebook-dotnet -- lane myia-po-2024:CoursIA-2 -- prev: MED/training #14392 G-VAR-1 tenu (genre CONTENU, tier MED). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * chore(ci,#14396): wake PR gate (body INCIDENTAL count) -- reaffirme 1 fichier pousse, 8 terrains SyncOverAsync upstream verifies * fix(aspire,#14396): renuméroter exec_count 1..N + convertir cellule D1 en md Réparation de PR #14396 (c.873 c.877) : le gate 'Exec-sequence ratchet (base vs PR)' échouait avec CLEAN->DUPLICATE sur 06-Aspire-GardeFous-Roslyn.ipynb après l'insertion de la section D1 sans ré-exécution du notebook. La séquence execution_count était [1,2,3,2,5,..,9,1,2,10,..,18] au lieu de 1..N. Constat firsthand : - 4 nouvelles cellules D1 insérées entre cell 22 (ec=9) et cell 30 (ec=10) avec execution_count 1,2,10,11 au lieu de 10,11,12,13,14,15,16,17,18 - cellule 25 (l'illustration côte-à-côte des analyseurs) avait une chaîne C# Console.WriteLine avec un backtick ` dans une string literal non échappée — erreur CS1056, non-détectée par c.873 - le notebook n'avait pas été ré-exécuté de bout en bout après l'enrichissement (C.2 violation latente) Réparations : 1. conversion cellule 25 (Console.WriteLine de strings statiques) en cellule markdown : le contenu était de la prose illustrative, sans computation réelle — le bloc de code échouait à cause du backtick non échappé et n'apportait aucune valeur ajoutée 2. ré-exécution complète .NET Interactive sur kernel .net-csharp (17 cellules code, 0 erreur), séquence execution_count désormais CLEAN = [1..17] Vérifications post-fix : - check_exec_ratchet.py origin/main : regressions: 0, CLEAN->CLEAN - check_papermill_ratchet.py origin/main : BLOCK_REMOVED (autorisé par #11155) - check_source_output_ratchet.py origin/main : 0 stale cells - check_notebook_navlinks.py : 0 broken links - 17/17 cellules code avec execution_count, 17/17 avec outputs, 0 output error Ref: #14396 (PR repair, même branche feature/c873-agentguard005-section) * fix(asipre,#14396): strip probeAddresses banner from 06-Aspire-GardeFous-Roslyn cell 6 output c.880 REPAIR: c.878 .NET re-exec re-injected the .NET Interactive probeAddresses banner via NetworkInterface enumeration, contaminating display_data cell output. Stop & Repair surgical strip via scripts/notebook_tools/strip_probe_banner.py --apply -- rewrites text/html to '' while preserving output_type=display_data structure (no source touched, no execution_count changed). CI banner guard now clean. Verified: python strip_probe_banner.py --scan = 0 banner lines. Grain: MED/notebook-dotnet (repair) -- lane myia-po-2024:CoursIA-2 -- prev: MED/tooling #14440 Co-Authored-By: Claude-Code <noreply@anthropic.com> * fix(asipre,#14396): Exercice 1 cellule 10 -- Verifier exige args.Length >= 2 (Hermes c.883) (#14460) Constat Hermes 2026-09-03T00:25:18Z : la cellule 10 (Exercice 1) invoquait le Verifier avec 1 seul argument (SyncOverAsyncConfigureAwaitValueTask.cs), mais Program.cs:13 retourne exit 2 + banner 'usage:' si args.Length < 2. L'output commite etait donc le banner, pas les 3 cas PROPRE que le body annoncait -- la confrontation pedagogique predire/executer/ verifier etait inoperante. Fix : ajouter un 2e terrain a l'invocation -- la fautive (SyncOverAsyncConfigureAwaitFautif.cs, 2 diagnostics AGENTGUARD005b sur ConfigureAwait(false)/(true).GetAwaiter() .GetResult()) + la valueTask (3 diagnostics PROPRE). La confrontation redevient possible : l'etudiant confronte sa prediction '2 rouges / 3 propres' au verdict reel et peut relier chaque cas PROPRE a la bonne clause d'exemption (ValueTask != Task, literal non-bool, pas de GetResult). Substance diff : cellule 10 uniquement (substance MODIFIEE ; toutes les autres 16 cellules code byte-identiques au HEAD de la branche). Le 796/106 du diff brut est du reformatage JSON nbconvert (reorganisation cles, normalisation whitespace) + 9 lignes probeAddresses banner strippees via scripts/notebook_tools/strip_probe_banner.py --apply. Verifications : - check_exec_ratchet.py origin/main : CLEAN->CLEAN (seq 1..17) - check_papermill_ratchet.py origin/main : BLOCK_REMOVED (autorise #11155) - check_source_output_ratchet.py origin/main : 0 stale cells - check_notebook_navlinks.py : OK 0 lien casse - C.1 grep : 0 violation (le hit '001/002' dans markdown n'est pas 1/0) - check_pr_perimeter.py 14396 : VERDICT OK - Cellule 10 re-executee kernel .net-csharp : ec=4, output = 2 diagnostics AGENTGUARD005b + VERDICT PROPRE (au lieu de banner usage) Genre : MED/notebook-dotnet (REPAIR herite du genre substance, G-VAR-1 TENU). Lane myia-po-2024:CoursIA-2. --------- Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Grain: MED/notebook-dotnet (REPAIR P0) — lane myia-po-2024:CoursIA-2 — prev: MED/notebook-python #14419
fix(asipre,#14396): Exercice 1 cellule 10 — Verifier exige args.Length >= 2
Grain
MED/notebook-dotnet(REPAIR P0) — lanemyia-po-2024:CoursIA-2— prev:MED/notebook-python #14419Constat (Hermes 2026-09-03T00:25:18Z)
Le review Hermes de la PR #14396 a identifié un défaut fonctionnel dans la cellule 10 (Exercice 1) :
Cause-racine : la cellule a été écrite avec un seul argument alors que
Program.cs:13est strict :L'output réellement committé était donc
usage:(sortie du programme au lieu d'un verdict) — la confrontation pédagogique prédire/exécuter/vérifier était inopérante.Fix (c.883, commit
567ae21286)Patch cellule 10 : ajouter
SyncOverAsyncConfigureAwaitFautif.cscomme 2ᵉ argument dudotnet run. La cellule passe de :à :
Plus un commentaire explicatif de 9 lignes documentant la contrainte
args.Length >= 2et le choix pédagogique de la paire fautif/valueTask.Valeur pédagogique : la nouvelle sortie livre
ConfigureAwait(false).GetAwaiter().GetResult()etConfigureAwait(true).GetAwaiter().GetResult()(le terrain fautif est l'archétype du défaut que les agents génèrent en croyant queConfigureAwait(false)« rend ça safe » — ce qui est faux,GetAwaiter().GetResult()BLOQUE TOUJOURS le thread).ValueTask(3 cas :ValueTaskSync,AvecCondition,SansGetResult— chacun couvert par une clause d'exemption distincte).L'étudiant peut donc prédire 2 rouges + 3 propres, exécuter, et vérifier en reliant chaque cas PROPRE à sa clause d'exemption (filtre sémantique / filtre syntaxique / absence de
GetResult). La confrontation redevient possible.Périmètre
06-Aspire-GardeFous-Roslyn.ipynbstrip_probe_banner.py --apply)Substance diff vs HEAD de la branche c873 : cellule 10 uniquement (toutes les 16 autres cellules code byte-identiques — vérifié par diff programmatique).
Vérifications
check_exec_ratchet.py origin/mainexecution_count1..17 préservée)check_papermill_ratchet.py origin/mainmetadata.papermillaprès nbconvert)check_source_output_ratchet.py origin/maincheck_notebook_navlinks.py 06-…-Roslyn.ipynbraise NotImplementedError|assert False|1/0)001/002est dans markdown, pas un1/0)check_pr_perimeter.py 14396 --scan-thread.net-csharplocal2 diagnostics AGENTGUARD005b+VERDICT PROPRE(au lieu du bannerusage:)Pourquoi REPAIR, pas un nouveau grain
Le finding Hermes est un défaut ciblé sur une cellule précise d'une PR pré-existante. Le reste de la section D1 est solide (le review le dit explicitement : « D1.1 isole bien la borne sémantique partagée » + « les 6 verdicts cell 26 correspondent exactement aux terrains
samples/au head »). La levée du finding tient le plancher B.0 (cf CLAUDE.md §B.0 : aucun nit non levé ne survit à un merge).Genre / G-VAR
variation-protocol.md§1)Voir aussi
AgentGuard.Verifier/Program.cs:13— la gardeargs.Length < 2qui retournaitexit 2+ bannerusage:AgentGuard.Verifier/samples/SyncOverAsyncConfigureAwaitFautif.cs— terrain fautif ajouté (2 diagnostics AGENTGUARD005b)AgentGuard.Verifier/samples/SyncOverAsyncConfigureAwaitValueTask.cs— terrain valueTask (3 cas PROPRE)Co-Authored-By: Claude-Code noreply@anthropic.com