e-naxosMAF COURSE / COURS
English

MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1

Usage nullable et journal

Vérifier les inconnues d’usage et une preuve de commit relue dans un autre processus.

Objectifs

Préparer les contrôles sans modèle

Préparer la solution Release, un fichier SQLite neuf et les tests Maf.Observability.Tests. L’exercice utilise des fixtures et un vrai stockage local, sans serveur modèle. Garder les archives et bases historiques intactes. Le résultat à rendre est un tableau attribuant chaque valeur à sa fixture ou à son exécution.

Produire les trois preuves

dotnet test tests/Maf.Observability.Tests/Maf.Observability.Tests.csproj -m:1 -c Release --no-build --no-restore
$journal = Join-Path $env:TEMP ("maf-lot012-" + [guid]::NewGuid().ToString("N") + ".db")
dotnet run --project demos/Demo430_BusinessAudit/Demo430.App.csproj -c Release --no-build -- --deterministic --db $journal

1. Lire MissingUsageIsNotZero : noter Input, Output, DerivedTotal, CharacterEstimate et EstimatedCost pour usage absent, zéro et usage partiel. 2. Noter le GUID du succès, terminer puis relire avec --read dans un nouveau processus. 3. Exécuter --fail avec le même fichier ; conserver son autre GUID et relire. Expliquer pourquoi son code de lecture peut être 0 sans action.

dotnet run --project demos/Demo430_BusinessAudit/Demo430.App.csproj -c Release --no-build -- --deterministic --fail --db $journal
$executionId = Read-Host 'ExecutionId to inspect'
dotnet run --project demos/Demo430_BusinessAudit/Demo430.App.csproj -c Release --no-build -- --db $journal --read $executionId

Séparer les conclusions

Relever la date, la révision, le fichier, le GUID, TraceId, Kind, ActionId et HasAction. La durée d’un span répond à une question technique ; ActionCommitted avec HasAction répond à la question du commit local ; aucun des deux n’atteste la qualité d’une réponse. Une estimation de contexte peut être connue alors que l’usage fournisseur est null.

Relier chaque attente au contrôle existant

var input = usage?.InputTokenCount;
var output = usage?.OutputTokenCount;
long? derived = input.HasValue && output.HasValue ? checked(input.Value + output.Value) : null;
decimal? cost = rate is not null && input.HasValue && output.HasValue
    ? (input.Value * rate.InputPerMillion + output.Value * rate.OutputPerMillion) / 1_000_000m : null;
return new(input, output, usage?.TotalTokenCount, derived,
    contextCharacters.HasValue ? ((long)contextCharacters.Value + 3) / 4 : null,
    cost, rate?.Currency, rate?.Version);

shared/Maf.Observability/Consumption.cs · L16–L23 · 9a895c94534c

Code source · Maf.Observability · Dossier

public bool HasAction(Guid executionId, long actionId)
{
    using var connection = Open();
    using var command = connection.CreateCommand();
    command.CommandText = "SELECT COUNT(*) FROM RecordedDecisions WHERE ExecutionId=$id AND Id=$action";
    command.Parameters.AddWithValue("$id", executionId.ToString("N"));
    command.Parameters.AddWithValue("$action", actionId);
    return (long)command.ExecuteScalar()! == 1;

shared/Maf.Observability/BusinessJournal.cs · L103–L110 · 9a895c94534c

Code source · Maf.Observability · Dossier

MissingUsageIsNotZero conserve null malgré CharacterEstimate=100 pour 400 caractères de fixture. CommittedActionSurvivesRestartAndReplay vérifie une action et un événement après rejeu du même GUID. IntentAndFailureDoNotProveAction interdit de créer la preuve par Append. RetentionAndErasurePreserveBusinessEffect démontre que suppression de métadonnées ne signifie pas rollback. Ce sont des contrôles applicatifs, pas des mesures de modèle.

Indices de vérification

Avant la correction, consigner la prédiction et le résultat observé. Distinguer texte généré, statut terminal, décision et état persistant. En cas d’écart, suivre le fichier et le test nommés dans la procédure ; ne pas supprimer le garde-fou pour obtenir le résultat attendu.

Ne pas élargir la preuve

La manipulation ne démontre ni effet distant, ni trace continue après redémarrage, ni facturation réelle. Ne publier ni fichier SQLite ni transcript brut. Pour une expérience de tarif, utiliser une hypothèse explicitement fictive et versionnée ; aucun tarif réel n’est nécessaire à l’exercice.

Reprendre la procédure complète

Prérequis

Pour poursuivre

lot014-consolidation-1 · 2026-10-24 · 9a895c94534cd5fc6f3da883e37e5f7856e588c1