diff --git a/packages/dotnet/TraverseEmbedder/README.md b/packages/dotnet/TraverseEmbedder/README.md index d45cc8a..4b05ced 100644 --- a/packages/dotnet/TraverseEmbedder/README.md +++ b/packages/dotnet/TraverseEmbedder/README.md @@ -8,5 +8,10 @@ runtime-shaped harness events. Compatible-capability start, stop, and kill operations return stable instance identifiers and lifecycle results. It never depends on `traverse-cli serve` or server-discovery files in production. -The runtime-WASM bridge, event subscriptions, release evidence, and WinUI +Release tooling constructs `TraverseReleaseEvidence` with the semantic package +version, runtime-WASM digest, conformance version, and supported Windows host +versions. `Validate` rejects incomplete evidence before publication so a +downstream binary can be traced to its exact package and runtime pairing. + +The runtime-WASM bridge, event subscriptions, evidence publication, and WinUI reference-app integration remain tracked by Traverse #649. diff --git a/packages/dotnet/TraverseEmbedder/TraverseEmbedder/TraverseEmbedder.cs b/packages/dotnet/TraverseEmbedder/TraverseEmbedder/TraverseEmbedder.cs index 05ddf41..f9a1f4d 100644 --- a/packages/dotnet/TraverseEmbedder/TraverseEmbedder/TraverseEmbedder.cs +++ b/packages/dotnet/TraverseEmbedder/TraverseEmbedder/TraverseEmbedder.cs @@ -22,6 +22,26 @@ public sealed record TraverseSubmission(string TargetId, string InputJson) public sealed record TraverseSubmissionResult(string SessionId, string Status); +/// Traceability evidence published with a TraverseEmbedder package release. +public sealed record TraverseReleaseEvidence( + string PackageVersion, + string RuntimeWasmDigest, + string ConformanceVersion, + IReadOnlyList SupportedHostVersions) +{ + public void Validate() + { + ArgumentException.ThrowIfNullOrWhiteSpace(PackageVersion); + ArgumentException.ThrowIfNullOrWhiteSpace(RuntimeWasmDigest); + ArgumentException.ThrowIfNullOrWhiteSpace(ConformanceVersion); + if (SupportedHostVersions is null || SupportedHostVersions.Count == 0 || + SupportedHostVersions.Any(string.IsNullOrWhiteSpace)) + { + throw new ArgumentException("supported host versions are required", nameof(SupportedHostVersions)); + } + } +} + /// Ordered runtime-shaped event exposed by the conformance harness. public sealed record TraverseRuntimeEvent( int Sequence,