Skip to content

Commit 3606f70

Browse files
committed
Add cross-layer protocol evidence bundle
1 parent f7bffcc commit 3606f70

5 files changed

Lines changed: 136 additions & 3 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ The first production milestone is M3UA over a transport abstraction. SCCP, TCAP,
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 |
6868
| Maintained peer lab runner operations | Phase 30 foundation-ready: file materialization plan rendering, execution log, command outcome, artifact verification, runner provenance, failure classification, retry policy, evidence package manifest, operator handoff, and operations status contracts are available; commercial release still requires execution against a real maintained external peer |
6969
| Native SCTP production hardening | Phase 31 foundation-complete: outbound stream/PPID framing, association lifecycle journal, reconnect schedule, send backpressure, cancellation/timeout, multi-homing readiness, fault recovery, transport diagnostics, production hardening readiness gate, and status reporting are available; production readiness still requires retained Linux SCTP and external peer evidence |
70-
| SCCP/TCAP/MAP evidence upgrade | Phase 32 in progress: shared protocol evidence vectors, byte-level mismatch validation, and SCCP/TCAP/MAP SMS evidence vectors are available; trace validation, mismatch correction, and evidence-backed readiness gates are next |
70+
| SCCP/TCAP/MAP evidence upgrade | Phase 32 in progress: shared protocol evidence vectors, byte-level mismatch validation, SCCP/TCAP/MAP SMS evidence vectors, and a cross-layer evidence bundle are available; trace validation, mismatch correction, and evidence-backed readiness gates are next |
7171

7272
## Requirements
7373

@@ -225,7 +225,7 @@ Phase 28 completed the automation and evidence handoff layer above that foundati
225225
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.
226226
Phase 30 completed the maintained peer lab runner operationalization layer, including reviewable file materialization, structured execution logs, command outcomes, artifact verification, runner provenance, failure classification, retry policy, evidence package manifests, operator handoff reports, and operations status reporting for real lab execution.
227227
Phase 31 completed the native SCTP production hardening foundation, including outbound stream and PPID framing, association lifecycle journaling, reconnect scheduling, send backpressure, cancellation/timeout policy, multi-homing readiness, deterministic fault recovery, transport diagnostics snapshots, production hardening readiness gates, and status reporting.
228-
Phase 32 upgrades SCCP, TCAP, and MAP SMS toward evidence-backed behavior, with shared byte-level evidence vector validation plus SCCP, TCAP, and MAP SMS evidence vectors in place before trace validation, mismatch correction, and evidence-backed readiness gates.
228+
Phase 32 upgrades SCCP, TCAP, and MAP SMS toward evidence-backed behavior, with shared byte-level evidence vector validation, SCCP/TCAP/MAP SMS evidence vectors, and a cross-layer evidence bundle in place before trace validation, mismatch correction, and evidence-backed readiness gates.
229229
5. Harden MAP SMS with external interoperability vectors and operator-profile validation.
230230
6. Use completed interoperability tooling to run external lab validation, native SCTP verification, and release automation hardening.
231231
7. Complete commercial readiness gates and publish governed release candidates.

docs/PHASE32_SCCP_TCAP_MAP_EVIDENCE_UPGRADE.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ Each vector stores literal BER expected bytes and validates the current TCAP tra
5151

5252
Each vector stores literal BER-shaped parameter bytes and validates the current MAP SMS encoder output. Tests decode every vector back into its operation model to tie byte evidence to decoded field behavior.
5353

54+
## Unit 5 - Cross-Layer Evidence Bundle
55+
56+
`SigtranProtocolEvidenceBundle` now aggregates SCCP, TCAP, and MAP SMS vectors into one validation report. It provides:
57+
58+
- Required cross-layer vector count.
59+
- Surface-specific vector counts.
60+
- Duplicate vector id detection.
61+
- Aggregate validation pass count.
62+
- Complete and evidence-backed summary flags.
63+
64+
This gives release and readiness gates one deterministic SDK-side evidence report before trace validation and external artifact comparison are applied.
65+
5466
## Validation
5567

5668
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
@@ -284,7 +284,7 @@ Status: Phase 31 is foundation-complete. The outbound stream and PPID framing co
284284
- Report and correct mismatches before upgrading readiness claims from foundation-only to evidence-backed.
285285
- Keep external interoperability evidence as a commercial promotion gate.
286286

287-
Status: Phase 32 is in progress. The shared protocol evidence vector and byte-level mismatch validation contract is available. SCCP has deterministic UDT, XUDT, LUDT, and UDTS evidence vectors. TCAP has deterministic Begin/Invoke/Dialogue and End/ReturnResult evidence vectors. MAP SMS has deterministic MO-ForwardSM, MT-ForwardSM, SendRoutingInfoForSM, ReportSM-DeliveryStatus, and AlertServiceCentre evidence vectors.
287+
Status: Phase 32 is in progress. The shared protocol evidence vector and byte-level mismatch validation contract is available. SCCP has deterministic UDT, XUDT, LUDT, and UDTS evidence vectors. TCAP has deterministic Begin/Invoke/Dialogue and End/ReturnResult evidence vectors. MAP SMS has deterministic MO-ForwardSM, MT-ForwardSM, SendRoutingInfoForSM, ReportSM-DeliveryStatus, and AlertServiceCentre evidence vectors. A cross-layer evidence bundle aggregates vector counts, duplicate-id checks, and validation pass/fail status.
288288

289289
## Recommended First Deliverable
290290

src/Sigtran.NET.Tests/Program.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@
175175
Run("SIGTRAN commercial roadmap realignment status summarizes package-neutral completion", SigtranCommercialRoadmapRealignmentStatusSummarizesPackageNeutralCompletion);
176176
Run("SIGTRAN protocol interop vector catalog covers SCCP TCAP and MAP", SigtranProtocolInteropVectorCatalogCoversSccpTcapAndMap);
177177
Run("SIGTRAN protocol evidence validator reports byte mismatches", SigtranProtocolEvidenceValidatorReportsByteMismatches);
178+
Run("SIGTRAN protocol evidence bundle aggregates SCCP TCAP and MAP", SigtranProtocolEvidenceBundleAggregatesSccpTcapAndMap);
178179
Run("SIGTRAN protocol interop references require trace validation", SigtranProtocolInteropReferencesRequireTraceValidation);
179180
Run("SIGTRAN protocol interop artifact manifest requires reference SDK and comparison", SigtranProtocolInteropArtifactManifestRequiresReferenceSdkAndComparison);
180181
Run("SIGTRAN protocol interop comparison rules are commercial validation ready", SigtranProtocolInteropComparisonRulesAreCommercialValidationReady);
@@ -2821,6 +2822,21 @@ static void SigtranProtocolEvidenceValidatorReportsByteMismatches()
28212822
Assert(mismatch.Mismatches[1].Actual is null, mismatch.Mismatches[1].Describe());
28222823
}
28232824

2825+
static void SigtranProtocolEvidenceBundleAggregatesSccpTcapAndMap()
2826+
{
2827+
SigtranProtocolEvidenceBundleReport report = SigtranProtocolEvidenceBundle.Create();
2828+
2829+
AssertEqual(11, SigtranProtocolEvidenceBundle.RequiredVectorCount, "protocol evidence required vector count");
2830+
AssertEqual(11, report.VectorCount, "protocol evidence vector count");
2831+
AssertEqual(4, report.CountBySurface(SigtranProtocolInteropSurface.Sccp), "protocol evidence SCCP count");
2832+
AssertEqual(2, report.CountBySurface(SigtranProtocolInteropSurface.Tcap), "protocol evidence TCAP count");
2833+
AssertEqual(5, report.CountBySurface(SigtranProtocolInteropSurface.MapSms), "protocol evidence MAP SMS count");
2834+
AssertEqual(0, report.DuplicateVectorIds.Count, "protocol evidence duplicate ids");
2835+
Assert(report.IsComplete, report.Describe());
2836+
Assert(report.AllValidationPassed, report.Describe());
2837+
Assert(report.EvidenceBacked, report.Describe());
2838+
}
2839+
28242840
static void SigtranProtocolInteropReferencesRequireTraceValidation()
28252841
{
28262842
IReadOnlyList<SigtranProtocolInteropReference> references = SigtranProtocolInteropReferences.GetReferences();
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
using Sigtran.NET.Layers.MAP;
2+
using Sigtran.NET.Layers.SCCP;
3+
using Sigtran.NET.Layers.TCAP;
4+
5+
namespace Sigtran.NET.Core.Utilities;
6+
7+
/// <summary>
8+
/// Aggregates SCCP, TCAP, and MAP SMS protocol evidence validation results.
9+
/// </summary>
10+
public sealed class SigtranProtocolEvidenceBundleReport
11+
{
12+
private readonly SigtranProtocolEvidenceVector[] _vectors;
13+
private readonly SigtranProtocolEvidenceValidationReport[] _validationReports;
14+
private readonly string[] _duplicateVectorIds;
15+
16+
/// <summary>Creates a protocol evidence bundle report.</summary>
17+
/// <param name="vectors">The evidence vectors.</param>
18+
/// <param name="validationReports">The validation reports.</param>
19+
/// <param name="duplicateVectorIds">Duplicate vector ids found in the bundle.</param>
20+
public SigtranProtocolEvidenceBundleReport(
21+
IReadOnlyList<SigtranProtocolEvidenceVector> vectors,
22+
IReadOnlyList<SigtranProtocolEvidenceValidationReport> validationReports,
23+
IReadOnlyList<string> duplicateVectorIds)
24+
{
25+
_vectors = (vectors ?? throw new ArgumentNullException(nameof(vectors))).ToArray();
26+
_validationReports = (validationReports ?? throw new ArgumentNullException(nameof(validationReports))).ToArray();
27+
_duplicateVectorIds = (duplicateVectorIds ?? throw new ArgumentNullException(nameof(duplicateVectorIds))).ToArray();
28+
}
29+
30+
/// <summary>The evidence vectors.</summary>
31+
public IReadOnlyList<SigtranProtocolEvidenceVector> Vectors => _vectors.ToArray();
32+
33+
/// <summary>The validation reports.</summary>
34+
public IReadOnlyList<SigtranProtocolEvidenceValidationReport> ValidationReports => _validationReports.ToArray();
35+
36+
/// <summary>Duplicate vector ids found in the bundle.</summary>
37+
public IReadOnlyList<string> DuplicateVectorIds => _duplicateVectorIds.ToArray();
38+
39+
/// <summary>The total vector count.</summary>
40+
public int VectorCount => _vectors.Length;
41+
42+
/// <summary>The number of passed validation reports.</summary>
43+
public int PassedValidationCount => _validationReports.Count(static report => report.Passed);
44+
45+
/// <summary>Whether every validation report passed.</summary>
46+
public bool AllValidationPassed => _validationReports.Length == _vectors.Length && _validationReports.All(static report => report.Passed);
47+
48+
/// <summary>Whether the bundle contains all required vectors without duplicate ids.</summary>
49+
public bool IsComplete => VectorCount == SigtranProtocolEvidenceBundle.RequiredVectorCount && _duplicateVectorIds.Length == 0;
50+
51+
/// <summary>Whether the bundle is complete and every validation report passed.</summary>
52+
public bool EvidenceBacked => IsComplete && AllValidationPassed;
53+
54+
/// <summary>Returns the vector count for a protocol surface.</summary>
55+
/// <param name="surface">The protocol surface.</param>
56+
/// <returns>The vector count for the requested surface.</returns>
57+
public int CountBySurface(SigtranProtocolInteropSurface surface)
58+
{
59+
return _vectors.Count(vector => vector.Surface == surface);
60+
}
61+
62+
/// <summary>Formats a compact bundle summary.</summary>
63+
/// <returns>The bundle summary.</returns>
64+
public string Describe()
65+
{
66+
return $"vectors={VectorCount}/{SigtranProtocolEvidenceBundle.RequiredVectorCount} passed={PassedValidationCount}/{_validationReports.Length} duplicates={_duplicateVectorIds.Length} complete={IsComplete} evidenceBacked={EvidenceBacked}";
67+
}
68+
}
69+
70+
/// <summary>
71+
/// Provides a cross-layer SCCP, TCAP, and MAP SMS evidence bundle.
72+
/// </summary>
73+
public static class SigtranProtocolEvidenceBundle
74+
{
75+
/// <summary>The required cross-layer evidence vector count.</summary>
76+
public const int RequiredVectorCount = 11;
77+
78+
/// <summary>Creates the current cross-layer evidence bundle report.</summary>
79+
/// <returns>The current evidence bundle report.</returns>
80+
public static SigtranProtocolEvidenceBundleReport Create()
81+
{
82+
SigtranProtocolEvidenceVector[] vectors =
83+
[
84+
.. SccpEvidenceVectors.GetVectors(),
85+
.. TcapEvidenceVectors.GetVectors(),
86+
.. MapSmsEvidenceVectors.GetVectors()
87+
];
88+
89+
SigtranProtocolEvidenceValidationReport[] reports =
90+
[
91+
.. SccpEvidenceVectors.ValidateEncoders(),
92+
.. TcapEvidenceVectors.ValidateEncoders(),
93+
.. MapSmsEvidenceVectors.ValidateEncoders()
94+
];
95+
96+
string[] duplicates = vectors
97+
.GroupBy(static vector => vector.Id, StringComparer.Ordinal)
98+
.Where(static group => group.Count() > 1)
99+
.Select(static group => group.Key)
100+
.OrderBy(static id => id, StringComparer.Ordinal)
101+
.ToArray();
102+
103+
return new(vectors, reports, duplicates);
104+
}
105+
}

0 commit comments

Comments
 (0)