Skip to content

Commit a4d50d8

Browse files
committed
Add commercial evidence artifact intake status
1 parent 75a501f commit a4d50d8

7 files changed

Lines changed: 120 additions & 5 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ The first production milestone is M3UA over a transport abstraction. SCCP, TCAP,
7373
| RC publish and commercial gate | Phase 35 complete: dry-run release rehearsal, gated NuGet prerelease publication, retained release notes, retained migration notes, final commercial readiness reporting, RC/stable decisioning, RC publication evidence manifest, release workflow channel wiring, status reporting, and final commercial gate report are available; stable publication remains blocked until commercial evidence is complete |
7474
| Commercial evidence readiness lockdown | Phase 36 foundation-complete: release target locking, protected secret readiness, evidence retention mapping, commercial evidence checklist, release preflight, protected release environments, dossier handoff, go/no-go gating, status reporting, and final validation are available; RC and stable publication remain blocked until retained commercial release evidence is complete |
7575
| Commercial evidence execution orchestration | Phase 37 foundation-complete: evidence execution run identity, stage catalog, operator command plan, execution environment contract, artifact collection manifest, digest/redaction verification, blocker classification, retry/resume policy, status reporting, and final validation are available; real retained execution artifacts are still required before commercial publication |
76-
| Commercial evidence artifact intake | Phase 38 in progress: artifact intake target identity, artifact source registration, SHA-256 digest coverage, redaction review, completeness evaluation, dossier reporting, promotion handoff, and execution-to-dossier bridge are available, binding a stable intake id, reviewer identity, UTC receipt time, run-scoped dossier root, concrete source paths, unique retained dossier paths, retained digests, trace-bearing artifact approvals, explicit intake blockers, retained Markdown summary, digest-covered handoff, and end-to-end intake assembly to a governed execution run; status reporting and final validation remain |
76+
| Commercial evidence artifact intake | Phase 38 in progress: artifact intake target identity, artifact source registration, SHA-256 digest coverage, redaction review, completeness evaluation, dossier reporting, promotion handoff, execution-to-dossier bridge, and status reporting are available, binding a stable intake id, reviewer identity, UTC receipt time, run-scoped dossier root, concrete source paths, unique retained dossier paths, retained digests, trace-bearing artifact approvals, explicit intake blockers, retained Markdown summary, digest-covered handoff, end-to-end intake assembly, and intake readiness status to a governed execution run; final validation remains |
7777

7878
## Requirements
7979

docs/PHASE38_COMMERCIAL_EVIDENCE_ARTIFACT_INTAKE.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,18 @@ The handoff does not publish a package. It creates a verified package of intake
100100

101101
The bridge is intentionally a contract builder, not a file executor. Real artifact copying, digest calculation, and redaction review still happen in the lab or release workflow and provide the values passed into the bridge.
102102

103+
## Unit 9 - Artifact Intake Status
104+
105+
`SigtranCommercialEvidenceArtifactIntakeStatus` exposes the current artifact intake state:
106+
107+
- Completed intake capabilities.
108+
- Default commercial publication blockers.
109+
- Artifact intake foundation readiness.
110+
- Real artifact evidence readiness.
111+
- Commercial publication readiness.
112+
113+
The status keeps foundation readiness separate from commercial publication readiness. Real file evidence and final validation remain blockers until the phase is closed and real retained artifacts are reviewed.
114+
103115
## Validation
104116

105117
Each unit in this phase is validated with:

docs/PHASE38_SUMMARY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ Phase 38 prepares the SDK to receive real execution artifacts and convert them i
1212
- Dossier intake report that renders a retained Markdown summary for the execution run, intake id, reviewer, counts, completion state, and blockers.
1313
- Promotion handoff that includes all digest-covered retained artifacts and the dossier intake report.
1414
- Execution-to-dossier bridge that assembles the intake target, source manifest, digest manifest, redaction review, completeness, report, and handoff from a governed execution run.
15+
- Artifact intake status that exposes completed capabilities, foundation readiness, real artifact evidence readiness, publication readiness, and current blockers.
1516

1617
## Readiness Position
1718

18-
The phase is in progress. Artifact intake identity, source registration, digest coverage, redaction review, completeness evaluation, dossier reporting, promotion handoff, and execution bridge are available. Status reporting and final validation remain.
19+
The phase is in progress. Artifact intake identity, source registration, digest coverage, redaction review, completeness evaluation, dossier reporting, promotion handoff, execution bridge, and status reporting are available. Final validation remains.

docs/PHASE_INDEX.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ This index is the complete phase map for Sigtran.NET. It links each phase to the
4242
| 35 | RC publish and commercial gate | [Phase 35 RC Publish And Commercial Gate](PHASE35_RC_PUBLISH_COMMERCIAL_GATE.md), [Phase 35 Summary](PHASE35_SUMMARY.md), [Phase 35 Commercial Gate Report](PHASE35_COMMERCIAL_GATE_REPORT.md) | RC gate foundation complete; stable publication blocked |
4343
| 36 | Commercial evidence readiness lockdown | [Phase 36 Commercial Evidence Readiness Lockdown](PHASE36_COMMERCIAL_EVIDENCE_READINESS_LOCKDOWN.md), [Phase 36 Summary](PHASE36_SUMMARY.md) | Foundation complete; real commercial evidence still required |
4444
| 37 | Commercial evidence execution orchestration | [Phase 37 Commercial Evidence Execution Orchestration](PHASE37_COMMERCIAL_EVIDENCE_EXECUTION_ORCHESTRATION.md), [Phase 37 Summary](PHASE37_SUMMARY.md) | Foundation complete; real execution artifacts still required |
45-
| 38 | Commercial evidence artifact intake | [Phase 38 Commercial Evidence Artifact Intake](PHASE38_COMMERCIAL_EVIDENCE_ARTIFACT_INTAKE.md), [Phase 38 Summary](PHASE38_SUMMARY.md) | In progress; execution bridge complete |
45+
| 38 | Commercial evidence artifact intake | [Phase 38 Commercial Evidence Artifact Intake](PHASE38_COMMERCIAL_EVIDENCE_ARTIFACT_INTAKE.md), [Phase 38 Summary](PHASE38_SUMMARY.md) | In progress; status reporting complete |
4646

4747
## Current Commercial Gate
4848

docs/SDK_ROADMAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ Status: Phase 37 is foundation-complete. Evidence execution run identity binds a
339339
- Register artifact sources, digests, redaction reviews, completeness results, dossier reports, promotion handoff, and execution-to-dossier bridging.
340340
- Keep intake foundation separate from commercial publication: intake can prove that artifacts are ready for review, but publication remains blocked until all retained evidence is complete and approved.
341341

342-
Status: Phase 38 is in progress. Artifact intake target identity now binds a stable intake id, reviewer identity, UTC receipt time, and run-scoped dossier root to a governed commercial evidence execution run. Artifact source registration now maps every required expected execution artifact to a concrete source path and unique retained dossier path while rejecting floating `artifacts/latest` aliases. Digest coverage now records SHA-256 values for every retained source and blocks invalid digest values. Redaction review now requires approved reviewer records for trace-bearing retained artifacts. Completeness evaluation now reports explicit source, digest, and redaction blockers. Dossier reporting now renders a retained Markdown summary with run, intake, reviewer, counts, completion state, and blockers. Promotion handoff now includes all digest-covered retained artifacts and the dossier intake report. Execution-to-dossier bridge now assembles the intake pipeline from a governed execution run. Status reporting and final validation remain in progress.
342+
Status: Phase 38 is in progress. Artifact intake target identity now binds a stable intake id, reviewer identity, UTC receipt time, and run-scoped dossier root to a governed commercial evidence execution run. Artifact source registration now maps every required expected execution artifact to a concrete source path and unique retained dossier path while rejecting floating `artifacts/latest` aliases. Digest coverage now records SHA-256 values for every retained source and blocks invalid digest values. Redaction review now requires approved reviewer records for trace-bearing retained artifacts. Completeness evaluation now reports explicit source, digest, and redaction blockers. Dossier reporting now renders a retained Markdown summary with run, intake, reviewer, counts, completion state, and blockers. Promotion handoff now includes all digest-covered retained artifacts and the dossier intake report. Execution-to-dossier bridge now assembles the intake pipeline from a governed execution run. Status reporting now exposes completed capabilities, foundation readiness, real artifact evidence readiness, publication readiness, and current blockers. Final validation remains in progress.
343343

344344
## Recommended First Deliverable
345345

src/Sigtran.NET.Tests/Program.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@
295295
Run("SIGTRAN commercial evidence dossier intake report renders retained summary", SigtranCommercialEvidenceDossierIntakeReportRendersRetainedSummary);
296296
Run("SIGTRAN commercial evidence promotion handoff includes digests and report", SigtranCommercialEvidencePromotionHandoffIncludesDigestsAndReport);
297297
Run("SIGTRAN commercial evidence dossier intake bridge builds handoff from execution run", SigtranCommercialEvidenceDossierIntakeBridgeBuildsHandoffFromExecutionRun);
298+
Run("SIGTRAN commercial evidence artifact intake status summarizes foundation readiness", SigtranCommercialEvidenceArtifactIntakeStatusSummarizesFoundationReadiness);
298299
Run("SIGTRAN status capabilities use domain documentation labels", SigtranStatusCapabilitiesUseDomainDocumentationLabels);
299300
Run("Native SCTP platform probe reports socket creation capability", NativeSctpPlatformProbeReportsSocketCreationCapability);
300301
Run("Native SCTP socket factory creates or reports unsupported platform", NativeSctpSocketFactoryCreatesOrReportsUnsupportedPlatform);
@@ -4957,6 +4958,22 @@ static void SigtranCommercialEvidenceDossierIntakeBridgeBuildsHandoffFromExecuti
49574958
Assert(result.Report.ReportPath.StartsWith(result.Target.DossierRoot, StringComparison.Ordinal), "bridge report should stay under dossier root");
49584959
}
49594960

4961+
static void SigtranCommercialEvidenceArtifactIntakeStatusSummarizesFoundationReadiness()
4962+
{
4963+
IReadOnlyList<string> capabilities = SigtranCommercialEvidenceArtifactIntakeStatus.GetCompletedCapabilities();
4964+
IReadOnlyList<string> blockers = SigtranCommercialEvidenceArtifactIntakeStatus.GetDefaultBlockers();
4965+
4966+
AssertEqual(9, SigtranCommercialEvidenceArtifactIntakeStatus.CompletedUnitCount, "artifact intake completed unit count");
4967+
AssertEqual(9, capabilities.Count, "artifact intake capability count");
4968+
Assert(capabilities.Contains("execution-dossier-bridge"), "artifact intake status should include execution bridge");
4969+
Assert(capabilities.Contains("documentation"), "artifact intake status should include documentation");
4970+
Assert(SigtranCommercialEvidenceArtifactIntakeStatus.ArtifactIntakeFoundationReady, SigtranCommercialEvidenceArtifactIntakeStatus.Describe());
4971+
Assert(!SigtranCommercialEvidenceArtifactIntakeStatus.RealArtifactEvidenceReady, SigtranCommercialEvidenceArtifactIntakeStatus.Describe());
4972+
Assert(!SigtranCommercialEvidenceArtifactIntakeStatus.CommercialPublicationReady, SigtranCommercialEvidenceArtifactIntakeStatus.Describe());
4973+
Assert(blockers.Contains("real-artifact-file-evidence-required"), "artifact intake status should require real file evidence");
4974+
Assert(blockers.Contains("status-final-validation-pending"), "artifact intake status should retain final validation blocker before closeout");
4975+
}
4976+
49604977
static SigtranCommercialEvidenceDossierIntakeReport CreateDefaultCommercialEvidenceDossierIntakeReport()
49614978
{
49624979
return SigtranCommercialEvidenceDossierIntakeReports.CreateDefault(CreateDefaultCommercialEvidenceArtifactCompletenessResult());
@@ -5028,7 +5045,8 @@ static void SigtranStatusCapabilitiesUseDomainDocumentationLabels()
50285045
SigtranSupplyChainReleaseStatus.GetCompletedCapabilities(),
50295046
SigtranReleaseCandidatePublicationStatus.GetCompletedCapabilities(),
50305047
SigtranCommercialEvidenceReadinessLockdownStatus.GetCompletedCapabilities(),
5031-
SigtranCommercialEvidenceExecutionStatus.GetCompletedCapabilities()
5048+
SigtranCommercialEvidenceExecutionStatus.GetCompletedCapabilities(),
5049+
SigtranCommercialEvidenceArtifactIntakeStatus.GetCompletedCapabilities()
50325050
];
50335051

50345052
foreach (IReadOnlyList<string> capabilities in statusCapabilities)
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
namespace Sigtran.NET.Core.Utilities;
2+
3+
/// <summary>
4+
/// Provides commercial evidence artifact intake status reporting.
5+
/// </summary>
6+
public static class SigtranCommercialEvidenceArtifactIntakeStatus
7+
{
8+
private static readonly string[] Capabilities =
9+
[
10+
"artifact-intake-target",
11+
"artifact-source-manifest",
12+
"artifact-digest-manifest",
13+
"redaction-review-manifest",
14+
"artifact-completeness-evaluation",
15+
"dossier-intake-report",
16+
"promotion-handoff",
17+
"execution-dossier-bridge",
18+
"documentation"
19+
];
20+
21+
private static readonly string[] DefaultBlockers =
22+
[
23+
"real-artifact-file-evidence-required",
24+
"status-final-validation-pending"
25+
];
26+
27+
/// <summary>The status label.</summary>
28+
public const string StatusLabel = "Commercial Evidence Artifact Intake";
29+
30+
/// <summary>The number of completed commercial evidence artifact intake work units.</summary>
31+
public const int CompletedUnitCount = 9;
32+
33+
/// <summary>Returns the completed artifact intake capability names.</summary>
34+
/// <returns>The completed capability names.</returns>
35+
public static IReadOnlyList<string> GetCompletedCapabilities()
36+
{
37+
return Capabilities.ToArray();
38+
}
39+
40+
/// <summary>Returns default blockers for commercial publication.</summary>
41+
/// <returns>The default commercial publication blockers.</returns>
42+
public static IReadOnlyList<string> GetDefaultBlockers()
43+
{
44+
return DefaultBlockers.ToArray();
45+
}
46+
47+
/// <summary>Whether the artifact intake foundation contracts are ready.</summary>
48+
public static bool ArtifactIntakeFoundationReady => Capabilities.Length == CompletedUnitCount
49+
&& CreateDefaultBridgeResult().IsReady;
50+
51+
/// <summary>Whether real artifact file evidence is available in the default status.</summary>
52+
public static bool RealArtifactEvidenceReady => false;
53+
54+
/// <summary>Whether artifact intake currently allows commercial publication.</summary>
55+
public static bool CommercialPublicationReady => ArtifactIntakeFoundationReady
56+
&& RealArtifactEvidenceReady
57+
&& DefaultBlockers.Length == 0;
58+
59+
/// <summary>Formats a compact commercial evidence artifact intake summary.</summary>
60+
/// <returns>The commercial evidence artifact intake summary.</returns>
61+
public static string Describe()
62+
{
63+
return $"{StatusLabel}: completedUnits={CompletedUnitCount} capabilities={Capabilities.Length} foundationReady={ArtifactIntakeFoundationReady} realArtifactEvidenceReady={RealArtifactEvidenceReady} commercialPublicationReady={CommercialPublicationReady} blockers={DefaultBlockers.Length}";
64+
}
65+
66+
private static SigtranCommercialEvidenceDossierIntakeBridgeResult CreateDefaultBridgeResult()
67+
{
68+
SigtranCommercialEvidenceExecutionRun run = SigtranCommercialEvidenceExecutionRuns.CreateReleaseCandidateRun(
69+
"1.0.0-rc.1",
70+
"abcdef123456",
71+
"run-20260622-001",
72+
"release-automation",
73+
DateTimeOffset.UtcNow);
74+
75+
return SigtranCommercialEvidenceDossierIntakeBridge.BuildDefault(
76+
run,
77+
"intake-20260622-001",
78+
"release-review",
79+
$"{run.RunArtifactRoot}/incoming/intake-20260622-001",
80+
new string('a', 64),
81+
new string('b', 64),
82+
DateTimeOffset.UtcNow);
83+
}
84+
}

0 commit comments

Comments
 (0)