Skip to content

Commit 09b2838

Browse files
committed
Add SCTP production hardening readiness gate
1 parent 0b37b2b commit 09b2838

6 files changed

Lines changed: 181 additions & 3 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ The first production milestone is M3UA over a transport abstraction. SCCP, TCAP,
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 |
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 |
69-
| Native SCTP production hardening | Phase 31 in progress: outbound stream/PPID framing, association lifecycle journal, reconnect schedule, send backpressure, cancellation/timeout, multi-homing readiness, fault recovery, and transport diagnostics contracts are available; production readiness still requires retained Linux SCTP evidence |
69+
| Native SCTP production hardening | Phase 31 in progress: outbound stream/PPID framing, association lifecycle journal, reconnect schedule, send backpressure, cancellation/timeout, multi-homing readiness, fault recovery, transport diagnostics, and production hardening readiness gates are available; production readiness still requires retained Linux SCTP and external peer evidence |
7070

7171
## Requirements
7272

@@ -221,7 +221,7 @@ Phase 27 completed the maintained external peer lab foundation, including packag
221221
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.
222222
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.
223223
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.
224-
Phase 31 hardens native SCTP production contracts, starting with outbound stream and PPID framing, association lifecycle journaling, reconnect scheduling, send backpressure, cancellation/timeout policy, multi-homing readiness, deterministic fault recovery, and transport diagnostics snapshots.
224+
Phase 31 hardens native SCTP production contracts, 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, and production hardening readiness gates.
225225
5. Harden MAP SMS with external interoperability vectors and operator-profile validation.
226226
6. Use completed interoperability tooling to run external lab validation, native SCTP verification, and release automation hardening.
227227
7. Complete commercial readiness gates and publish governed release candidates.

docs/PHASE31_NATIVE_SCTP_PRODUCTION_HARDENING.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,19 @@ This gives production transports a single decision point for association recover
107107

108108
This gives production transports and operations tooling a single diagnostic envelope for logs, traces, health checks, and retained evidence artifacts.
109109

110+
## Unit 9 - Production Hardening Readiness Gate
111+
112+
`SctpProductionHardeningReadiness` now reports the SCTP hardening gate separately from retained production evidence. It provides:
113+
114+
- Foundation capability counting.
115+
- Stream and PPID framing readiness.
116+
- Lifecycle, reconnect, backpressure, timeout, multi-homing, fault recovery, and diagnostics readiness.
117+
- Retained Linux SCTP evidence gating.
118+
- Retained external peer evidence gating.
119+
- Production-ready evaluation only when foundation and evidence are both complete.
120+
121+
This prevents the SDK from claiming production SCTP hardening readiness until real Linux SCTP and external peer traffic artifacts have been retained.
122+
110123
## Validation
111124

112125
Each unit in this phase is validated with:

docs/SCTP_TRANSPORT.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,14 @@ The snapshot summarizes transport state as healthy, degraded, or faulted. Health
112112

113113
Transport implementations should emit this snapshot into structured logs and retained lab traces when diagnosing SCTP behavior.
114114

115+
## Production Hardening Readiness
116+
117+
`SctpProductionHardeningReadiness.GetReport(...)` reports whether the SCTP hardening foundation is complete and whether retained production evidence is available.
118+
119+
The foundation gate covers stream and PPID framing, association lifecycle journal, reconnect schedule, send backpressure, operation timeout policy, multi-homing readiness, fault recovery, and transport diagnostics. The production gate additionally requires retained Linux SCTP evidence and retained external peer traffic evidence.
120+
121+
This keeps source-level SDK readiness separate from production claims backed by lab artifacts.
122+
115123
## Reconnect Policy
116124

117125
`SctpReconnectPolicy` defines reconnect attempt count and bounded exponential backoff.

docs/SDK_ROADMAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ Status: Phase 30 is foundation-complete. It has reviewable file materialization
275275
- Add reconnect orchestration, backpressure policy, cancellation contracts, multi-homing readiness, association lifecycle journaling, fault classification, and recovery decisions.
276276
- Keep production readiness blocked until retained Linux SCTP and external peer evidence prove the hardened contracts against real traffic.
277277

278-
Status: Phase 31 is in progress. The outbound stream and PPID framing contract, association lifecycle journal, reconnect schedule, send backpressure policy, cancellation/timeout policy, multi-homing readiness checks, fault recovery decisions, and transport diagnostics snapshots are available.
278+
Status: Phase 31 is in progress. The outbound stream and PPID framing contract, association lifecycle journal, reconnect schedule, send backpressure policy, cancellation/timeout policy, multi-homing readiness checks, fault recovery decisions, transport diagnostics snapshots, and production hardening readiness gate are available. Production readiness remains blocked until retained Linux SCTP and external peer evidence are complete.
279279

280280
## Recommended First Deliverable
281281

src/Sigtran.NET.Tests/Program.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@
293293
Run("SCTP reconnect schedules produce deterministic attempts", SctpReconnectSchedulesProduceDeterministicAttempts);
294294
Run("SCTP transport health snapshots expose association details", SctpTransportHealthSnapshotsExposeAssociationDetails);
295295
Run("SCTP transport diagnostics snapshots summarize state", SctpTransportDiagnosticsSnapshotsSummarizeState);
296+
Run("SCTP production hardening readiness gates evidence", SctpProductionHardeningReadinessGatesEvidence);
296297
Run("TCP SCTP adapter exposes development metadata and health", TcpSctpAdapterExposesDevelopmentMetadataAndHealth);
297298
Run("SCTP transport readiness reports foundation status", SctpTransportReadinessReportsFoundationStatus);
298299
Run("M3UA Payload Data uses network byte order and RFC-style TLV length", M3uaPayloadDataUsesNetworkOrder);
@@ -4696,6 +4697,25 @@ static void SctpTransportDiagnosticsSnapshotsSummarizeState()
46964697
Assert(faulted.RequiresAttention, faulted.Describe());
46974698
}
46984699

4700+
static void SctpProductionHardeningReadinessGatesEvidence()
4701+
{
4702+
SctpProductionHardeningReadinessReport current = SctpProductionHardeningReadiness.GetReport();
4703+
AssertEqual(8, SctpProductionHardeningReadiness.RequiredFoundationCapabilityCount, "SCTP hardening capability count");
4704+
AssertEqual(8, current.FoundationCapabilityCount, "SCTP hardening completed capability count");
4705+
Assert(current.FoundationReady, current.Describe());
4706+
Assert(!current.EvidenceReady, current.Describe());
4707+
Assert(!current.ProductionReady, current.Describe());
4708+
Assert(current.Describe().Contains("linuxEvidence=False", StringComparison.Ordinal), current.Describe());
4709+
4710+
SctpProductionHardeningReadinessReport evidenced = SctpProductionHardeningReadiness.GetReport(
4711+
hasRetainedLinuxSctpEvidence: true,
4712+
hasRetainedExternalPeerEvidence: true);
4713+
Assert(evidenced.FoundationReady, evidenced.Describe());
4714+
Assert(evidenced.EvidenceReady, evidenced.Describe());
4715+
Assert(evidenced.ProductionReady, evidenced.Describe());
4716+
Assert(SctpProductionHardeningReadiness.ProductionGateDescription.Contains("Retained Linux SCTP", StringComparison.Ordinal), SctpProductionHardeningReadiness.ProductionGateDescription);
4717+
}
4718+
46994719
static void TcpSctpAdapterExposesDevelopmentMetadataAndHealth()
47004720
{
47014721
TcpListener listener = new(IPAddress.Loopback, 0);
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
namespace Sigtran.NET.Layers.SCTP;
2+
3+
/// <summary>
4+
/// Reports native SCTP production hardening readiness.
5+
/// </summary>
6+
public sealed class SctpProductionHardeningReadinessReport
7+
{
8+
/// <summary>Creates an SCTP production hardening readiness report.</summary>
9+
/// <param name="hasStreamAndPpidFraming">Whether outbound stream and PPID framing is available.</param>
10+
/// <param name="hasAssociationLifecycleJournal">Whether association lifecycle journaling is available.</param>
11+
/// <param name="hasReconnectSchedule">Whether reconnect scheduling is available.</param>
12+
/// <param name="hasSendBackpressurePolicy">Whether send backpressure policy is available.</param>
13+
/// <param name="hasOperationTimeoutPolicy">Whether operation timeout policy is available.</param>
14+
/// <param name="hasMultiHomingReadiness">Whether multi-homing readiness checks are available.</param>
15+
/// <param name="hasFaultRecovery">Whether fault recovery decisions are available.</param>
16+
/// <param name="hasTransportDiagnostics">Whether transport diagnostics snapshots are available.</param>
17+
/// <param name="hasRetainedLinuxSctpEvidence">Whether retained Linux SCTP evidence is available.</param>
18+
/// <param name="hasRetainedExternalPeerEvidence">Whether retained external peer evidence is available.</param>
19+
public SctpProductionHardeningReadinessReport(
20+
bool hasStreamAndPpidFraming,
21+
bool hasAssociationLifecycleJournal,
22+
bool hasReconnectSchedule,
23+
bool hasSendBackpressurePolicy,
24+
bool hasOperationTimeoutPolicy,
25+
bool hasMultiHomingReadiness,
26+
bool hasFaultRecovery,
27+
bool hasTransportDiagnostics,
28+
bool hasRetainedLinuxSctpEvidence,
29+
bool hasRetainedExternalPeerEvidence)
30+
{
31+
HasStreamAndPpidFraming = hasStreamAndPpidFraming;
32+
HasAssociationLifecycleJournal = hasAssociationLifecycleJournal;
33+
HasReconnectSchedule = hasReconnectSchedule;
34+
HasSendBackpressurePolicy = hasSendBackpressurePolicy;
35+
HasOperationTimeoutPolicy = hasOperationTimeoutPolicy;
36+
HasMultiHomingReadiness = hasMultiHomingReadiness;
37+
HasFaultRecovery = hasFaultRecovery;
38+
HasTransportDiagnostics = hasTransportDiagnostics;
39+
HasRetainedLinuxSctpEvidence = hasRetainedLinuxSctpEvidence;
40+
HasRetainedExternalPeerEvidence = hasRetainedExternalPeerEvidence;
41+
}
42+
43+
/// <summary>Whether outbound stream and PPID framing is available.</summary>
44+
public bool HasStreamAndPpidFraming { get; }
45+
46+
/// <summary>Whether association lifecycle journaling is available.</summary>
47+
public bool HasAssociationLifecycleJournal { get; }
48+
49+
/// <summary>Whether reconnect scheduling is available.</summary>
50+
public bool HasReconnectSchedule { get; }
51+
52+
/// <summary>Whether send backpressure policy is available.</summary>
53+
public bool HasSendBackpressurePolicy { get; }
54+
55+
/// <summary>Whether operation timeout policy is available.</summary>
56+
public bool HasOperationTimeoutPolicy { get; }
57+
58+
/// <summary>Whether multi-homing readiness checks are available.</summary>
59+
public bool HasMultiHomingReadiness { get; }
60+
61+
/// <summary>Whether fault recovery decisions are available.</summary>
62+
public bool HasFaultRecovery { get; }
63+
64+
/// <summary>Whether transport diagnostics snapshots are available.</summary>
65+
public bool HasTransportDiagnostics { get; }
66+
67+
/// <summary>Whether retained Linux SCTP evidence is available.</summary>
68+
public bool HasRetainedLinuxSctpEvidence { get; }
69+
70+
/// <summary>Whether retained external peer evidence is available.</summary>
71+
public bool HasRetainedExternalPeerEvidence { get; }
72+
73+
/// <summary>The implemented foundation capability count.</summary>
74+
public int FoundationCapabilityCount =>
75+
Count(HasStreamAndPpidFraming)
76+
+ Count(HasAssociationLifecycleJournal)
77+
+ Count(HasReconnectSchedule)
78+
+ Count(HasSendBackpressurePolicy)
79+
+ Count(HasOperationTimeoutPolicy)
80+
+ Count(HasMultiHomingReadiness)
81+
+ Count(HasFaultRecovery)
82+
+ Count(HasTransportDiagnostics);
83+
84+
/// <summary>Whether all SDK hardening foundation capabilities are available.</summary>
85+
public bool FoundationReady => FoundationCapabilityCount == SctpProductionHardeningReadiness.RequiredFoundationCapabilityCount;
86+
87+
/// <summary>Whether retained production evidence is available.</summary>
88+
public bool EvidenceReady => HasRetainedLinuxSctpEvidence && HasRetainedExternalPeerEvidence;
89+
90+
/// <summary>Whether native SCTP hardening can be claimed production-ready.</summary>
91+
public bool ProductionReady => FoundationReady && EvidenceReady;
92+
93+
/// <summary>Formats a compact readiness summary.</summary>
94+
/// <returns>The readiness summary.</returns>
95+
public string Describe()
96+
{
97+
return $"sctpHardeningFoundationReady={FoundationReady} sctpHardeningProductionReady={ProductionReady} foundationCapabilities={FoundationCapabilityCount}/{SctpProductionHardeningReadiness.RequiredFoundationCapabilityCount} linuxEvidence={HasRetainedLinuxSctpEvidence} externalPeerEvidence={HasRetainedExternalPeerEvidence}";
98+
}
99+
100+
private static int Count(bool value)
101+
{
102+
return value ? 1 : 0;
103+
}
104+
}
105+
106+
/// <summary>
107+
/// Provides native SCTP production hardening readiness information.
108+
/// </summary>
109+
public static class SctpProductionHardeningReadiness
110+
{
111+
/// <summary>The required native SCTP hardening foundation capability count.</summary>
112+
public const int RequiredFoundationCapabilityCount = 8;
113+
114+
/// <summary>Explains the production evidence gate.</summary>
115+
public const string ProductionGateDescription = "Retained Linux SCTP and external peer traffic evidence are required before production SCTP hardening can be claimed.";
116+
117+
/// <summary>Returns the current SCTP production hardening readiness report.</summary>
118+
/// <param name="hasRetainedLinuxSctpEvidence">Whether retained Linux SCTP evidence is available.</param>
119+
/// <param name="hasRetainedExternalPeerEvidence">Whether retained external peer evidence is available.</param>
120+
/// <returns>The current SCTP production hardening readiness report.</returns>
121+
public static SctpProductionHardeningReadinessReport GetReport(
122+
bool hasRetainedLinuxSctpEvidence = false,
123+
bool hasRetainedExternalPeerEvidence = false)
124+
{
125+
return new(
126+
hasStreamAndPpidFraming: true,
127+
hasAssociationLifecycleJournal: true,
128+
hasReconnectSchedule: true,
129+
hasSendBackpressurePolicy: true,
130+
hasOperationTimeoutPolicy: true,
131+
hasMultiHomingReadiness: true,
132+
hasFaultRecovery: true,
133+
hasTransportDiagnostics: true,
134+
hasRetainedLinuxSctpEvidence,
135+
hasRetainedExternalPeerEvidence);
136+
}
137+
}

0 commit comments

Comments
 (0)