@@ -79,7 +79,7 @@ C4Context
7979 Rel(user, trustify, "Request Compliance<br/>View compliance status", "API/GUI")
8080 Rel(trustify, conforma, "Executes policy validation", "Spawn Process")
8181 Rel(conforma, policyRepo, "Fetches policies", "Git/HTTPS")
82- Rel(trustify, s3, "I3s ", S3/Minio Storager, trustify, $offsetX="-30", $offsetY="+20")
82+ Rel(trustify, s3, "3s ", S3/Minio Storager, trustify, $offsetX="-30", $offsetY="+20")
8383
8484 UpdateRelStyle(trustify, conforma, $offsetX="-40")
8585 UpdateRelStyle(user, trustify, $offsetX="-50", $offsetY="20")
@@ -102,7 +102,7 @@ C4Container
102102 ContainerDb(postgres, "PostgreSQL", "DBMS", "Stores SBOM metadata, relationships, <br/>and EC validation results")
103103 Container(ecModule, "EC Validation Module", "Rust", "Orchestrates Conforma CLI<br/>execution and result persistence")
104104 ContainerDb(s3, "Object Storage", "S3/Minio", "Stores SBOM documents and EC reports")
105- Container(storage, "Storage Service", "Rust", "Manages document storage<br/>(SBOMs, policies results)")
105+ Container(storage, "Storage Service", "Rust", "Manages document storage<br/>(SBOMs, policy results)")
106106 }
107107
108108 Container_Boundary(conforma, "Conforma System") {
@@ -157,7 +157,7 @@ C4Component
157157 }
158158
159159
160- Rel(api, ecEndpoints, "POST /sboms/{id}/ec-validate,<br/>GET /sbms /{id}/ec-report", "JSON/HTTPS")
160+ Rel(api, ecEndpoints, "POST /sboms/{id}/ec-validate,<br/>GET /sboms /{id}/ec-report", "JSON/HTTPS")
161161 Rel(ecEndpoints, ecService, "validate_sbom()<br/> get_ec_report()", "Function call")
162162 Rel(ecService, policyManager, "get_policy_config()", "Function call")
163163 Rel(ecService, conformaExecutor, "request_validation()", "Function call")
@@ -172,6 +172,96 @@ C4Component
172172 UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="2")
173173```
174174
175+ ``` mermaid
176+ sequenceDiagram
177+ autonumber
178+ actor User
179+ participant UI as Trustify UI
180+ participant API as Trustify API
181+ participant VS as Validation Service
182+ participant PM as Policy Manager
183+ participant DB as PostgreSQL
184+ participant S3 as Object Storage
185+ participant Conf as Conforma CLI
186+
187+ User->>UI: Request SBOM validation for policy
188+ UI->>API: POST /api/v2/sbom/{sbom_id}/validate
189+ Note over UI,API: Request body: {policy_id}
190+
191+ API->>VS: validate_sbom_against_policy(sbom_id, policy_id)
192+
193+ rect rgb(42, 48, 53)
194+ Note over VS,PM: Policy Resolution Phase
195+ VS->>PM: get_policy_configuration(policy_id)
196+ PM->>DB: SELECT * FROM ec_policies WHERE id = ?
197+ DB-->>PM: Policy configuration
198+ alt Policy not found
199+ PM-->>VS: Error: PolicyNotFound
200+ VS-->>API: 404 Not Found
201+ API-->>UI: Policy not found error
202+ UI-->>User: Display error: "Policy does not exist"
203+ end
204+ PM-->>VS: PolicyConfig {name, policy_ref, version}
205+ end
206+
207+ rect rgb(68, 66, 62)
208+ Note over VS,S3: SBOM Retrieval Phase
209+ VS->>DB: SELECT * FROM sbom WHERE id = ?
210+ DB-->>VS: SBOM metadata
211+ alt SBOM not found
212+ VS-->>API: 404 Not Found
213+ API-->>UI: SBOM not found error
214+ UI-->>User: Display error: "SBOM does not exist"
215+ end
216+
217+ VS->>S3: retrieve_sbom_document(sbom_id)
218+ S3-->>VS: SBOM document (JSON/XML)
219+ end
220+
221+ rect rgb(42, 48, 53)
222+ Note over VS,Conf: Validation Execution Phase
223+ VS->>VS: Create temp files for SBOM and policy
224+ VS->>Conf: spawn: conforma validate<br/>--policy={policy_ref}<br/>--sbom={sbom_file}<br/>--output=json
225+
226+ alt Validation passes
227+ Conf-->>VS: Exit code: 0<br/>JSON: {result: "PASS", violations: []}
228+ VS->>VS: Parse validation results
229+ VS->>DB: INSERT INTO ec_validation_results<br/>(sbom_id, policy_id, status='passed',<br/>violations=[], timestamp)
230+ DB-->>VS: result_id
231+ VS->>S3: store_validation_report(result_id, full_json)
232+ S3-->>VS: report_url
233+ VS->>DB: UPDATE ec_validation_results<br/>SET report_url = ?
234+ DB-->>VS: Updated
235+ VS-->>API: ValidationResult {status: "passed",<br/>violations: [], report_url}
236+ API-->>UI: 200 OK {passed: true, violations: 0}
237+ UI-->>User: ✓ SBOM passes policy validation
238+
239+ else Validation fails with violations
240+ Conf-->>VS: Exit code: 1<br/>JSON: {result: "FAIL",<br/>violations: [{rule, severity, message}]}
241+ VS->>VS: Parse validation results
242+ VS->>DB: INSERT INTO ec_validation_results<br/>(sbom_id, policy_id, status='failed',<br/>violations=json, timestamp)
243+ DB-->>VS: result_id
244+ VS->>S3: store_validation_report(result_id, full_json)
245+ S3-->>VS: report_url
246+ VS->>DB: UPDATE ec_validation_results<br/>SET report_url = ?
247+ DB-->>VS: Updated
248+ VS-->>API: ValidationResult {status: "failed",<br/>violations: [...], report_url}
249+ API-->>UI: 200 OK {passed: false, violations: [...]}
250+ UI-->>User: ✗ SBOM violates policy<br/>Show violation details
251+
252+ else Conforma execution error
253+ Conf-->>VS: Exit code: 2<br/>stderr: "Policy file not found"
254+ VS->>DB: INSERT INTO ec_validation_results<br/>(sbom_id, policy_id, status='error',<br/>error_message=stderr)
255+ DB-->>VS: result_id
256+ VS-->>API: Error: ValidationExecutionFailed
257+ API-->>UI: 500 Internal Server Error
258+ UI-->>User: Display error: "Validation failed to execute"
259+ end
260+ end
261+
262+ VS->>VS: Cleanup temp files
263+ ```
264+
175265### Data Model
176266
177267Two new tables:
@@ -409,7 +499,7 @@ When Conforma REST API becomes available:
409499
410500** Cons** : Additional infrastructure, network latency, complexity for simple use case
411501
412- ** Verdict** : Deferred - could be future enhancement for large-scale deployments
502+ ** Verdict** : Deferred - could be future enhancements for large-scale deployments
413503
414504### 3. Embedded WASM Module
415505
@@ -460,7 +550,7 @@ When Conforma REST API becomes available:
460550- [ ] Implement validation results display with summary statistics
461551- [ ] Build violations list component with expandable details
462552- [ ] Create validation history timeline view
463- - [ ] Add policy selectreference management UI (admin pages)
553+ - [ ] Add policy reference management UI (admin pages)
464554 - [ ] Policy reference list view with search/filter (shows name, external URL, type)
465555 - [ ] Policy reference create/edit form (Git URL, OCI ref, auth config)
466556 - [ ] Policy reference delete confirmation
0 commit comments