e-naxosMAF COURSE / COURS
English

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

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 Release

Citer 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 $rejected
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $rejected

Lire 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 reject
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $rejected reject
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $rejected

Attendre 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-evidence

Cette 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 $approved
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $approved maybe
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $approved
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $approved approve
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- resume $approved approve
dotnet run --project demos/Demo470_DocumentedApproval/Demo470.App.csproj -c Release --no-build -- status $approved

maybe 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 --live

Contrô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-restore
dotnet test tests/Maf.Rag.Tests/Maf.Rag.Tests.csproj -m:1 -c Release --no-build --no-restore

Lire 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.

Comprendre la chaîne

Prérequis

Pour poursuivre

Dossier complet de la démo · README

lot013-integration-1 · 2026-10-24 · 9a895c94534cd5fc6f3da883e37e5f7856e588c1