Skip to content

Commit 82edf17

Browse files
committed
Add maintained peer lab runner evidence package manifest
1 parent 2a3686e commit 82edf17

5 files changed

Lines changed: 296 additions & 3 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ The first production milestone is M3UA over a transport abstraction. SCCP, TCAP,
6565
| Interoperability lab | Phase 9 foundation-ready: lab scenario catalog, artifact manifests, run reports, external peer M3UA ASP-to-SG template, trace comparison, evidence promotion, opt-in CI profile, readiness report, and commercial gate integration added; production readiness still requires passing external lab evidence |
6666
| Maintained peer lab automation | Phase 28 foundation-ready: executable run manifest, deterministic environment file rendering, command script rendering, artifact digest manifests, comparison report, run report, evidence bundle, manual self-hosted workflow template, commercial readiness bridge, and automation status reporting are available; commercial release still requires real retained maintained-peer evidence |
6767
| Maintained peer lab runner | Phase 29 foundation-ready: runner workspace, execution input bundle, output artifact materialization, preflight, command manifest, evidence collection, digest generation, comparison handoff, workflow readiness, and status reporting contracts are available; commercial release still requires execution against a real maintained external peer |
68-
| Maintained peer lab runner operations | Phase 30 in progress: file materialization plan rendering, execution log, command outcome, artifact verification, runner provenance, failure classification, and retry policy contracts are available; commercial release still requires execution against a real maintained external peer |
68+
| Maintained peer lab runner operations | Phase 30 in progress: file materialization plan rendering, execution log, command outcome, artifact verification, runner provenance, failure classification, retry policy, and evidence package manifest contracts are available; commercial release still requires execution against a real maintained external peer |
6969

7070
## Requirements
7171

@@ -217,7 +217,7 @@ The roadmap is intentionally conservative:
217217
Phase 27 completed the maintained external peer lab foundation, including package-neutral binding, host prerequisites, validated lab configuration, deterministic artifact planning, command planning, traffic vectors, manual self-hosted CI policy, digest-covered retained evidence gates, and status reporting.
218218
Phase 28 completed the automation and evidence handoff layer above that foundation, including a single run manifest, deterministic environment file rendering, command script rendering, comparison reporting, run reporting, digest manifests, an evidence bundle, a manual self-hosted workflow template, a commercial readiness bridge, and automation status reporting for retained lab artifact handoff.
219219
Phase 29 completed the maintained peer lab runner materialization layer, including deterministic runner workspace paths, execution input bundles, output artifact mapping, preflight checks, command manifests, evidence collection, digest generation, comparison handoff, workflow readiness, and status reporting for real lab execution.
220-
Phase 30 operationalizes the maintained peer lab runner layer, starting with reviewable file materialization, structured execution logs, command outcomes, artifact verification, runner provenance, failure classification, and retry policy for real lab execution.
220+
Phase 30 operationalizes the maintained peer lab runner layer, starting with reviewable file materialization, structured execution logs, command outcomes, artifact verification, runner provenance, failure classification, retry policy, and evidence package manifests for real lab execution.
221221
5. Harden MAP SMS with external interoperability vectors and operator-profile validation.
222222
6. Use completed interoperability tooling to run external lab validation, native SCTP verification, and release automation hardening.
223223
7. Complete commercial readiness gates and publish governed release candidates.

docs/PHASE30_MAINTAINED_PEER_LAB_RUNNER_OPERATIONALIZATION.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,19 @@ This gives operator and CI handoff a deterministic diagnosis surface when a main
9292

9393
The default policy treats command and selected comparison failures as potentially transient, while preflight, artifact, digest, provenance, and run-report failures require operator or environment correction.
9494

95+
## Unit 8 - Evidence Package Manifest
96+
97+
`SigtranMaintainedPeerLabRunnerEvidencePackageManifest` now gathers verified runner outputs into a reviewable handoff package. It records:
98+
99+
- Retained artifact package items.
100+
- Digest manifest package item.
101+
- Provenance report package item.
102+
- Failure report package item.
103+
- Package readiness gates.
104+
- Markdown rendering for evidence handoff.
105+
106+
The package manifest only becomes ready when artifacts, digest coverage, provenance, comparison handoff, and failure classification are all clean.
107+
95108
## Validation
96109

97110
Each unit in this phase is validated with:

docs/SDK_ROADMAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ Status: Phase 29 is foundation-complete. It has deterministic maintained peer la
267267
- Keep runner operations package-neutral and separate from real retained lab evidence.
268268
- Prepare real maintained peer lab execution without manufacturing passing artifacts.
269269

270-
Status: Phase 30 has reviewable file materialization plan rendering, execution log, command outcome, artifact verification, runner provenance, failure classification, and retry policy contracts.
270+
Status: Phase 30 has reviewable file materialization plan rendering, execution log, command outcome, artifact verification, runner provenance, failure classification, retry policy, and evidence package manifest contracts.
271271

272272
## Recommended First Deliverable
273273

src/Sigtran.NET.Tests/Program.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
Run("SIGTRAN maintained peer lab runner provenance records source and host identity", SigtranMaintainedPeerLabRunnerProvenanceRecordsSourceAndHostIdentity);
7373
Run("SIGTRAN maintained peer lab runner failure classifier categorizes blockers", SigtranMaintainedPeerLabRunnerFailureClassifierCategorizesBlockers);
7474
Run("SIGTRAN maintained peer lab runner retry policy gates transient failures", SigtranMaintainedPeerLabRunnerRetryPolicyGatesTransientFailures);
75+
Run("SIGTRAN maintained peer lab runner evidence package manifest gates handoff", SigtranMaintainedPeerLabRunnerEvidencePackageManifestGatesHandoff);
7576
Run("SIGTRAN trace comparison reports ordered mismatches", SigtranTraceComparisonReportsOrderedMismatches);
7677
Run("SIGTRAN interoperability evidence promotion requires passing lab run", SigtranInteropEvidencePromotionRequiresPassingLabRun);
7778
Run("SIGTRAN interoperability lab CI profile is opt-in", SigtranInteropLabCiProfileIsOptIn);
@@ -1518,6 +1519,46 @@ static void SigtranMaintainedPeerLabRunnerRetryPolicyGatesTransientFailures()
15181519
AssertEqual(1, blocked.NonRetryableFailures.Count, "maintained peer lab runner non-retryable preflight count");
15191520
}
15201521

1522+
static void SigtranMaintainedPeerLabRunnerEvidencePackageManifestGatesHandoff()
1523+
{
1524+
SigtranMaintainedPeerLabRunManifest runManifest = SigtranMaintainedPeerLabRunManifests.CreateDefault("phase30-unit8");
1525+
SigtranMaintainedPeerLabRunnerInputBundle inputs = SigtranMaintainedPeerLabRunnerInputs.CreateDefault(runManifest);
1526+
SigtranMaintainedPeerLabRunnerArtifactMaterializationPlan artifacts = SigtranMaintainedPeerLabRunnerArtifacts.CreateDefault(inputs.Workspace);
1527+
IReadOnlyList<string> allPrerequisites = SigtranMaintainedPeerLabPrerequisites.GetDefault()
1528+
.Select(static prerequisite => prerequisite.Id)
1529+
.ToArray();
1530+
SigtranMaintainedPeerLabRunnerPreflightReport preflight = SigtranMaintainedPeerLabRunnerPreflight.Evaluate(inputs, artifacts, allPrerequisites);
1531+
SigtranMaintainedPeerLabRunnerCommandManifest commandManifest = SigtranMaintainedPeerLabRunnerCommandManifests.Create(inputs, artifacts, preflight);
1532+
SigtranMaintainedPeerLabRunnerExecutionLog log = SigtranMaintainedPeerLabRunnerExecutionLogs.CreatePassing(commandManifest, DateTimeOffset.UnixEpoch);
1533+
SigtranMaintainedPeerLabRunnerCommandOutcomeReport commandOutcomes = SigtranMaintainedPeerLabRunnerCommandOutcomes.FromLog(commandManifest, log);
1534+
SigtranMaintainedPeerLabRunnerEvidenceCollection collection = SigtranMaintainedPeerLabRunnerEvidenceCollections.Collect(artifacts, artifacts.GetRequiredOutputPaths());
1535+
const string digest = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
1536+
Dictionary<string, string> digestByPath = collection.Artifacts.ToDictionary(static artifact => artifact.Path, static _ => digest, StringComparer.Ordinal);
1537+
SigtranMaintainedPeerLabRunnerDigestReport digestReport = SigtranMaintainedPeerLabRunnerDigests.Create(runManifest.ArtifactPlan, collection, digestByPath);
1538+
SigtranMaintainedPeerLabRunnerArtifactVerificationReport artifactVerification = SigtranMaintainedPeerLabRunnerArtifactVerification.Verify(collection, digestReport);
1539+
SigtranMaintainedPeerLabRunnerProvenanceReport provenance = SigtranMaintainedPeerLabRunnerProvenance.CreateDefault(runManifest, "abcdef123456", "linux-runner-01", DateTimeOffset.UnixEpoch);
1540+
IReadOnlyList<string> expected = runManifest.TrafficVectors.SelectMany(static vector => vector.ExpectedMessages).ToArray();
1541+
SigtranMaintainedPeerLabRunnerComparisonHandoff handoff = SigtranMaintainedPeerLabRunnerComparisonHandoffs.Create(inputs, digestReport, expected, DateTimeOffset.UnixEpoch);
1542+
SigtranMaintainedPeerLabRunnerFailureReport failures = SigtranMaintainedPeerLabRunnerFailures.Classify(preflight, commandOutcomes, artifactVerification, provenance, handoff);
1543+
1544+
SigtranMaintainedPeerLabRunnerEvidencePackageManifest package = SigtranMaintainedPeerLabRunnerEvidencePackages.Create(artifactVerification, provenance, handoff, failures);
1545+
Assert(package.IsPackageReady, package.Describe());
1546+
AssertEqual(9, package.Items.Count, "maintained peer lab runner evidence package item count");
1547+
Assert(package.RenderMarkdown().Contains("Package ready: `True`", StringComparison.Ordinal), package.RenderMarkdown());
1548+
1549+
SigtranMaintainedPeerLabRunnerFailureReport blockedFailures = new(
1550+
runManifest.RunId,
1551+
[
1552+
new(
1553+
SigtranMaintainedPeerLabRunnerFailureKind.CommandExecution,
1554+
"command:Capture",
1555+
"Capture command failed.")
1556+
]);
1557+
SigtranMaintainedPeerLabRunnerEvidencePackageManifest blocked = SigtranMaintainedPeerLabRunnerEvidencePackages.Create(artifactVerification, provenance, handoff, blockedFailures);
1558+
Assert(!blocked.IsPackageReady, blocked.Describe());
1559+
Assert(!blocked.HasNoBlockingFailures, blocked.Describe());
1560+
}
1561+
15211562
static void SigtranTraceComparisonReportsOrderedMismatches()
15221563
{
15231564
SigtranInteropLabTemplate template = SigtranInteropPeerProfiles.CreateExternalPeerM3uaAspToSgTemplate();

0 commit comments

Comments
 (0)