Skip to content

Commit 84779e3

Browse files
committed
Track stable release evidence manifest
1 parent 5d1d2fc commit 84779e3

3 files changed

Lines changed: 139 additions & 0 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
[Dd]ebugPublic/
1313
[Rr]elease/
1414
[Rr]eleases/
15+
!eng/release/
16+
!eng/release/stable-release.json
1517
x64/
1618
x86/
1719
[Ww][Ii][Nn]32/

eng/release/stable-release.json

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
{
2+
"schemaVersion": 1,
3+
"packageId": "Sigtran.NET",
4+
"version": "1.0.0",
5+
"publicApiBaseline": "eng/api/Sigtran.NET.1.0.public-api.txt",
6+
"gates": [
7+
{
8+
"id": "native-linux-sctp",
9+
"title": "Native Linux SCTP transport",
10+
"required": true,
11+
"passed": true,
12+
"evidence": [
13+
"docs/evidence/PHASE45_NATIVE_SCTP_20260701T103951Z.json"
14+
],
15+
"note": "Native SCTP stream, PPID, metadata, reconnect, and shutdown evidence is retained."
16+
},
17+
{
18+
"id": "external-m3ua",
19+
"title": "Independent M3UA interoperability",
20+
"required": true,
21+
"passed": true,
22+
"evidence": [
23+
"docs/evidence/COMMERCIAL_EVIDENCE_20260627.json"
24+
],
25+
"note": "Independent C SCTP/M3UA peer evidence is retained."
26+
},
27+
{
28+
"id": "full-stack-traffic",
29+
"title": "Full-stack MAP SMS traffic",
30+
"required": true,
31+
"passed": true,
32+
"evidence": [
33+
"docs/evidence/PHASE52_END_TO_END_20260724T085858Z/reports/end-to-end-20260724T085858Z-summary.json",
34+
"docs/evidence/PHASE52_END_TO_END_20260724T085858Z/reports/end-to-end-20260724T085858Z-sha256.txt"
35+
],
36+
"note": "Repository-profile M3UA/SCCP/TCAP/MAP SMS traffic evidence is retained."
37+
},
38+
{
39+
"id": "independent-m2pa",
40+
"title": "Independent M2PA interoperability",
41+
"required": true,
42+
"passed": false,
43+
"evidence": [],
44+
"note": "No retained independent external M2PA peer run exists."
45+
},
46+
{
47+
"id": "operator-profile",
48+
"title": "Operator or vendor profile acceptance",
49+
"required": true,
50+
"passed": false,
51+
"evidence": [],
52+
"note": "No retained operator or vendor SS7 profile acceptance bundle exists."
53+
},
54+
{
55+
"id": "capacity-target",
56+
"title": "20K TPS capacity target",
57+
"required": true,
58+
"passed": false,
59+
"evidence": [
60+
"docs/evidence/PHASE53_PERFORMANCE_20260724T093659Z/metrics/performance-20260724T093659Z-metrics.json"
61+
],
62+
"note": "The current controlled baseline is about 13.5K TPS and does not meet the 20K target."
63+
},
64+
{
65+
"id": "multi-host-soak",
66+
"title": "Representative multi-host soak and failover",
67+
"required": true,
68+
"passed": false,
69+
"evidence": [],
70+
"note": "No long-duration multi-host operator-sized soak is retained."
71+
},
72+
{
73+
"id": "operations-runtime",
74+
"title": "Production operations runtime",
75+
"required": true,
76+
"passed": true,
77+
"evidence": [
78+
"docs/evidence/PHASE54_OPERATIONS_HOST_20260724T095723Z.json"
79+
],
80+
"note": "Runtime health, telemetry, structured events, and Linux host smoke evidence are retained."
81+
},
82+
{
83+
"id": "kubernetes-sctp",
84+
"title": "Representative Kubernetes SCTP deployment",
85+
"required": true,
86+
"passed": false,
87+
"evidence": [],
88+
"note": "No representative cluster CNI, SCTP, termination, and rollback evidence is retained."
89+
},
90+
{
91+
"id": "trusted-signing",
92+
"title": "Organization-trusted package signing identity",
93+
"required": true,
94+
"passed": false,
95+
"evidence": [],
96+
"note": "The retained RC signing certificate is self-issued and is not approved for stable publication."
97+
},
98+
{
99+
"id": "public-api-baseline",
100+
"title": "Frozen public API baseline",
101+
"required": true,
102+
"passed": true,
103+
"evidence": [
104+
"eng/api/Sigtran.NET.1.0.public-api.txt"
105+
],
106+
"note": "The 1.0 public API member baseline is version controlled and workflow-compared."
107+
},
108+
{
109+
"id": "protected-publication",
110+
"title": "Protected stable publication environment",
111+
"required": true,
112+
"passed": true,
113+
"evidence": [
114+
"docs/evidence/PHASE55_GITHUB_PROTECTION_20260724T102354Z.json"
115+
],
116+
"note": "Main branch protection and the reviewer-gated nuget-stable environment are verified through the GitHub API."
117+
}
118+
]
119+
}

src/Sigtran.NET.Tests/Program.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@
245245
Run("SIGTRAN release workflow artifact rules retain packages and evidence", SigtranReleaseWorkflowArtifactRulesRetainPackagesAndEvidence);
246246
Run("SIGTRAN release workflow permissions use least privilege", SigtranReleaseWorkflowPermissionsUseLeastPrivilege);
247247
Run("SIGTRAN stable workflow requires protected release controls", SigtranStableWorkflowRequiresProtectedReleaseControls);
248+
Run("SIGTRAN stable release manifest is version controlled", SigtranStableReleaseManifestIsVersionControlled);
248249
Run("SIGTRAN release workflow concurrency prevents overlapping releases", SigtranReleaseWorkflowConcurrencyPreventsOverlappingReleases);
249250
Run("SIGTRAN release workflow environment exposes supply chain and evidence variables", SigtranReleaseWorkflowEnvironmentExposesSupplyChainAndEvidenceVariables);
250251
Run("SIGTRAN release promotion gate blocks incomplete release evidence", SigtranReleasePromotionGateBlocksIncompleteReleaseEvidence);
@@ -3831,6 +3832,23 @@ static void SigtranStableWorkflowRequiresProtectedReleaseControls()
38313832
"normal package builds should remain prerelease");
38323833
}
38333834

3835+
static void SigtranStableReleaseManifestIsVersionControlled()
3836+
{
3837+
string path = Path.Combine(
3838+
"eng",
3839+
"release",
3840+
"stable-release.json");
3841+
Assert(File.Exists(path), "stable release manifest should be version controlled");
3842+
3843+
using JsonDocument document = JsonDocument.Parse(File.ReadAllText(path));
3844+
JsonElement root = document.RootElement;
3845+
AssertEqual("Sigtran.NET", root.GetProperty("packageId").GetString(), "stable manifest package");
3846+
AssertEqual("1.0.0", root.GetProperty("version").GetString(), "stable manifest version");
3847+
Assert(
3848+
root.GetProperty("gates").GetArrayLength() > 0,
3849+
"stable release manifest should contain evidence gates");
3850+
}
3851+
38343852
static void SigtranReleaseWorkflowConcurrencyPreventsOverlappingReleases()
38353853
{
38363854
SigtranReleaseWorkflowConcurrencyPolicy policy = SigtranReleaseWorkflowConcurrency.CreateDefault();

0 commit comments

Comments
 (0)