MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Demo470 — Documented Approval
Exécuter preuve valide, citation fabriquée, refus, redémarrage, approbation et rejeu dans des processus distincts.
Objectifs
- Observer Demo470 et ses variantes ; relier le résultat aux concepts du chapitre.
Préparer la console et ses dépendances
Depuis la racine BaseTechnique, compiler la solution avec le SDK verrouillé. Demo470.App.csproj référence Maf.Rag, Maf.Durable et Maf.Observability ; le corpus et les paramètres de connexion sont copiés près de l’exécutable. Les projets partagés restent nécessaires : télécharger un dossier de démo isolé ne suffit pas. La fixture par défaut ne requiert aucun modèle, serveur vectoriel ou Docker.
dotnet build BaseTechnique.slnx -m:1 -c ReleaseCiter puis refuser dans un premier dossier
$proposalRoot = Join-Path $env:TEMP ("maf-documented-" + [guid]::NewGuid().ToString("N"))
$rejected = Join-Path $proposalRoot "rejected"
$approved = Join-Path $proposalRoot "approved"
$invalid = Join-Path $proposalRoot "invalid"dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- start $rejecteddotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $rejectedLire Business state : Waiting, Decision=null, ItemId=null et Draft.Summary contenant le passage cité avec son identifiant. Chaque dotnet run se termine : la commande suivante restaure le même état depuis le disque. Inspecter evidence.json pour comprendre la preuve, puis business.db comme autorité de la proposition. Ne pas publier ces fichiers.
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $rejected rejectdotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $rejected rejectdotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $rejectedAttendre Rejected et aucun ItemId, y compris au rejeu identique. Tenter ensuite approve sur ce dossier doit échouer : la première décision est conservée. Pour approuver une autre proposition, utiliser le dossier approved encore neuf.
Rejeter une fausse citation puis approuver
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- start $invalid --invalid-evidenceCette commande doit sortir en échec. Elle peut créer le dossier, host.lock, l’index vectoriel ou le répertoire de checkpoints, mais aucune approbation ni ligne métier ne doit être enregistrée. Ne pas confondre existence d’un dossier et succès de la chaîne. L’identifiant inventé est refusé avant Waiting.
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- start $approveddotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $approved maybedotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $approveddotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $approved approvedotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $approved approvedotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $approvedmaybe doit échouer et laisser Waiting. approve doit donner Completed avec ItemId et StoredItem identiques au Draft ; son rejeu doit conserver le même ItemId et une seule ligne. Un reject ultérieur doit échouer. start sur un dossier déjà utilisé doit être refusé. Pour le mode réel, choisir un autre dossier et passer --live à start : embeddings et réponse passent alors par la connexion commune, sans repli fixture.
$live = Join-Path $proposalRoot "live"dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- start $live --liveContrôler le stockage indépendamment
Dans un lecteur SQLite local, ouvrir business.db et relire Approvals puis ApprovedBacklogItems par OperationId. Comparer Draft des deux tables et compter les lignes métier. Après refus : zéro. Après approbation et deux reprises : une. Le même identifiant affiché constitue un indice ; la requête en base confirme le nombre d’effets. Les tests Maf.Durable couvrent aussi concurrence, décision contradictoire, corrélation et rollback d’insertion.
dotnet test tests/Maf.Durable.Tests/Maf.Durable.Tests.csproj -m:1 -c Release --no-build --no-restoredotnet test tests/Maf.Rag.Tests/Maf.Rag.Tests.csproj -m:1 -c Release --no-build --no-restoreLire la portée exacte de la console
La question, la date de référence 2026-10-23, le périmètre course et les champs métier sont fixes. La borne d’une phase est trois minutes. Aucun --fail-after-write n’est exposé ici : ce cas appartient à Demo320 et aux tests partagés. Les scripts Verify historiques cités dans Scenario.md sont archivés et ne sont pas une commande livrée. L’approbation est une entrée opérateur sans authentification ; l’effet reste local.
