Skip to content

Commit 674ccfe

Browse files
committed
Add operations readiness report
1 parent da0c3ad commit 674ccfe

4 files changed

Lines changed: 97 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ The first production milestone is M3UA over a transport abstraction. SCCP, TCAP,
4141
| Release candidates | Phase 7 manifest added for package version, source commit, internal release gates, and commercial promotion gates |
4242
| Release automation | Phase 10 foundation-ready: deterministic release plan, artifact manifest with digest tracking, SBOM plan, package signing plan, provenance tracking, release notes validation, publish channels, release gate evaluator, release CI profile, and status report added; stable commercial publication still requires real signing, SBOM generation, native SCTP evidence, and external interoperability evidence |
4343
| Developer experience | Phase 11 foundation-ready: capability catalog, M3UA ASP-to-SG quickstart, sample templates, configuration profiles, troubleshooting index, API reference index, adoption gates, documentation readiness report, DX CI profile, and status report added; enterprise production adoption still requires commercial readiness |
44-
| Operations | Phase 12 started: production operations capability catalog, runbook catalog, incident response targets, health check matrix, rollback plan, maintenance policy, and support handbook added |
44+
| Operations | Phase 12 started: production operations capability catalog, runbook catalog, incident response targets, health check matrix, rollback plan, maintenance policy, support handbook, and readiness report added |
4545
| Package governance | Phase 7 policy added: current package metadata is tracked; commercial target still requires package signing and SBOM automation |
4646
| Security governance | Phase 7 security policy added with private disclosure and severity response targets |
4747
| Compatibility policy | Phase 7 policy added: net10.0 target, SemVer, pre-stable breaking-change allowance, and stable major-version rule |

docs/PHASE12_OPERATIONS.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,9 @@ The plan stops publication, communicates the affected version, preserves artifac
3939
## Support Handbook
4040

4141
`SigtranSupportHandbook.GetRules()` defines public GitHub issue support, private security disclosure, and commercial escalation channels.
42+
43+
## Operations Readiness
44+
45+
`SigtranOperationsReadiness.GetReport()` separates operations foundation readiness from production operations readiness.
46+
47+
Production operations remain blocked until wider commercial readiness is complete.

src/sigtran.net.Tests/Program.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
Run("SIGTRAN rollback plan defines package recovery steps", SigtranRollbackPlanDefinesPackageRecoverySteps);
6868
Run("SIGTRAN maintenance policy gates protocol and transport changes", SigtranMaintenancePolicyGatesProtocolAndTransportChanges);
6969
Run("SIGTRAN support handbook defines public private and commercial channels", SigtranSupportHandbookDefinesPublicPrivateAndCommercialChannels);
70+
Run("SIGTRAN operations readiness separates foundation from production", SigtranOperationsReadinessSeparatesFoundationFromProduction);
7071
Run("Native SCTP platform probe reports socket creation capability", NativeSctpPlatformProbeReportsSocketCreationCapability);
7172
Run("Native SCTP socket factory creates or reports unsupported platform", NativeSctpSocketFactoryCreatesOrReportsUnsupportedPlatform);
7273
Run("Native SCTP connection planner resolves endpoints", NativeSctpConnectionPlannerResolvesEndpoints);
@@ -906,6 +907,15 @@ static void SigtranSupportHandbookDefinesPublicPrivateAndCommercialChannels()
906907
Assert(rules.Any(static rule => rule.Channel == SigtranSupportChannel.Commercial && rule.EscalatesIncidents), "support should include commercial escalation");
907908
}
908909

910+
static void SigtranOperationsReadinessSeparatesFoundationFromProduction()
911+
{
912+
SigtranOperationsReadinessReport report = SigtranOperationsReadiness.GetReport();
913+
914+
Assert(report.FoundationReady, "operations foundation should be ready");
915+
Assert(!report.CommercialReady, "commercial readiness should still require external gates");
916+
Assert(!report.ProductionOperationsReady, "production operations should wait for commercial readiness");
917+
}
918+
909919
static void NativeSctpPlatformProbeReportsSocketCreationCapability()
910920
{
911921
AssertEqual(132, NativeSctpPlatform.IpProtocolSctp, "native SCTP protocol number");
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
namespace sigtran.net.Core.Utilities;
2+
3+
/// <summary>
4+
/// Describes production operations readiness.
5+
/// </summary>
6+
public sealed class SigtranOperationsReadinessReport
7+
{
8+
/// <summary>Creates an operations readiness report.</summary>
9+
/// <param name="hasRunbooks">Whether runbooks are available.</param>
10+
/// <param name="hasIncidentTargets">Whether incident targets are available.</param>
11+
/// <param name="hasHealthChecks">Whether health checks are available.</param>
12+
/// <param name="hasRollbackPlan">Whether rollback plan is available.</param>
13+
/// <param name="hasMaintenancePolicy">Whether maintenance policy is available.</param>
14+
/// <param name="hasSupportHandbook">Whether support handbook is available.</param>
15+
/// <param name="commercialReady">Whether commercial readiness is complete.</param>
16+
public SigtranOperationsReadinessReport(
17+
bool hasRunbooks,
18+
bool hasIncidentTargets,
19+
bool hasHealthChecks,
20+
bool hasRollbackPlan,
21+
bool hasMaintenancePolicy,
22+
bool hasSupportHandbook,
23+
bool commercialReady)
24+
{
25+
HasRunbooks = hasRunbooks;
26+
HasIncidentTargets = hasIncidentTargets;
27+
HasHealthChecks = hasHealthChecks;
28+
HasRollbackPlan = hasRollbackPlan;
29+
HasMaintenancePolicy = hasMaintenancePolicy;
30+
HasSupportHandbook = hasSupportHandbook;
31+
CommercialReady = commercialReady;
32+
}
33+
34+
/// <summary>Whether runbooks are available.</summary>
35+
public bool HasRunbooks { get; }
36+
37+
/// <summary>Whether incident targets are available.</summary>
38+
public bool HasIncidentTargets { get; }
39+
40+
/// <summary>Whether health checks are available.</summary>
41+
public bool HasHealthChecks { get; }
42+
43+
/// <summary>Whether rollback plan is available.</summary>
44+
public bool HasRollbackPlan { get; }
45+
46+
/// <summary>Whether maintenance policy is available.</summary>
47+
public bool HasMaintenancePolicy { get; }
48+
49+
/// <summary>Whether support handbook is available.</summary>
50+
public bool HasSupportHandbook { get; }
51+
52+
/// <summary>Whether commercial readiness is complete.</summary>
53+
public bool CommercialReady { get; }
54+
55+
/// <summary>Whether operations foundation is ready.</summary>
56+
public bool FoundationReady => HasRunbooks && HasIncidentTargets && HasHealthChecks && HasRollbackPlan && HasMaintenancePolicy && HasSupportHandbook;
57+
58+
/// <summary>Whether production operations are ready.</summary>
59+
public bool ProductionOperationsReady => FoundationReady && CommercialReady;
60+
}
61+
62+
/// <summary>
63+
/// Provides operations readiness helpers.
64+
/// </summary>
65+
public static class SigtranOperationsReadiness
66+
{
67+
/// <summary>Returns the current operations readiness report.</summary>
68+
/// <returns>The current operations readiness report.</returns>
69+
public static SigtranOperationsReadinessReport GetReport()
70+
{
71+
return new(
72+
hasRunbooks: SigtranRunbooks.GetRunbooks().Count > 0,
73+
hasIncidentTargets: SigtranIncidentResponse.GetTargets().Count > 0,
74+
hasHealthChecks: SigtranHealthChecks.GetDefinitions().Count > 0,
75+
hasRollbackPlan: SigtranRollbackPlans.CreateDefaultPackageRollback().Steps.Count > 0,
76+
hasMaintenancePolicy: SigtranMaintenancePolicies.CreateDefault().RequiresRollbackPlan,
77+
hasSupportHandbook: SigtranSupportHandbook.GetRules().Count > 0,
78+
commercialReady: SigtranCommercialReadiness.GetReport().CommercialReady);
79+
}
80+
}

0 commit comments

Comments
 (0)