< Summary

Information
Class: AsiBackbone.Core.HostIntegration.GovernedOperationExecutionReceiptCanonicalPayload
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/HostIntegration/GovernedOperationExecutionReceiptCanonicalPayload.cs
Line coverage
100%
Covered lines: 26
Uncovered lines: 0
Coverable lines: 26
Total lines: 52
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Create(...)100%22100%
BuildArtifactId(...)100%22100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/HostIntegration/GovernedOperationExecutionReceiptCanonicalPayload.cs

#LineLine coverage
 1using System.Globalization;
 2using AsiBackbone.Core.Serialization;
 3using AsiBackbone.Core.Signing;
 4
 5namespace AsiBackbone.Core.HostIntegration;
 6
 7/// <summary>
 8/// Builds deterministic signing payloads for governed operation execution receipts.
 9/// </summary>
 10public static class GovernedOperationExecutionReceiptCanonicalPayload
 11{
 12    /// <summary>
 13    /// Builds a provider-neutral canonical payload for an execution receipt.
 14    /// </summary>
 15    public static CanonicalPayload Create(
 16        GovernedOperationExecutionReceipt receipt,
 17        CanonicalPayloadOptions? options = null)
 18    {
 719        ArgumentNullException.ThrowIfNull(receipt);
 720        CanonicalPayloadOptions effectiveOptions = options ?? CanonicalPayloadOptions.Default;
 21
 722        SortedDictionary<string, object?> content = new(StringComparer.Ordinal)
 723        {
 724            ["completedUtc"] = receipt.CompletedUtc.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffff'Z'", Cultu
 725            ["completedWithoutMutation"] = receipt.CompletedWithoutMutation,
 726            ["decisionAuditRecordId"] = receipt.DecisionAuditRecordId,
 727            ["executionAttemptId"] = receipt.ExecutionAttemptId,
 728            ["metadata"] = CanonicalPayloadBuilder.FilterMetadata(receipt.Metadata, effectiveOptions),
 729            ["mutationBatchId"] = receipt.MutationBatchId,
 730            ["mutationManifestAlgorithm"] = receipt.MutationManifestAlgorithm,
 731            ["mutationManifestHash"] = receipt.MutationManifestHash,
 732            ["mutationRecordCount"] = receipt.MutationRecordCount,
 733            ["operationExecutionId"] = receipt.OperationExecutionId,
 734            ["persistenceOutcome"] = CanonicalEnumWireNames.ForPersistenceOutcome(receipt.PersistenceOutcome),
 735            ["persistenceProvider"] = receipt.PersistenceProvider
 736        };
 37
 738        return CanonicalPayload.Create(
 739            CanonicalArtifactTypes.GovernedOperationExecutionReceipt,
 740            BuildArtifactId(receipt),
 741            GovernanceSchemaVersions.StableArtifactsV1,
 742            effectiveOptions.CanonicalizationVersion,
 743            content);
 44    }
 45
 46    private static string BuildArtifactId(GovernedOperationExecutionReceipt receipt)
 47    {
 748        return receipt.ExecutionAttemptId is null
 749            ? receipt.OperationExecutionId
 750            : $"{receipt.OperationExecutionId}:{receipt.ExecutionAttemptId}";
 51    }
 52}