49 lines
3.4 KiB
Markdown
49 lines
3.4 KiB
Markdown
# VEX Generation with Evidence Links (`--link-evidence` CLI Flag)
|
|
|
|
## Module
|
|
Cli
|
|
|
|
## Status
|
|
VERIFIED
|
|
|
|
## Description
|
|
Extension to `stella vex gen` command with `--link-evidence` flag that includes binary-diff evidence links in VEX output, showing evidence type, confidence score, and URI in both table and JSON formats. Generates OpenVEX documents from facet drift analysis with deterministic IDs.
|
|
|
|
## Implementation Details
|
|
- **Command Group**: `src/Cli/StellaOps.Cli/Commands/VexGenCommandGroup.cs` -- `VexGenCommandGroup` (internal static class)
|
|
- Sprint: SPRINT_20260105_002_004_CLI (CLI-011 through CLI-015) and SPRINT_20260113_003_002_CLI_vex_evidence_integration
|
|
- Uses `IFacetDriftDetector`, `IFacetSealStore`, `IVexEvidenceLinker` from DI
|
|
- Generates deterministic IDs via SHA-256 of concatenated content
|
|
- **Evidence Integration**: `IVexEvidenceLinker.GetLinksAsync()` fetches evidence links; `AttachEvidenceLinksAsync()` enriches VEX statements with evidence
|
|
- **Models** (defined in same file):
|
|
- `OpenVexDocument` (@context, @id, author, timestamp, version, statements)
|
|
- `OpenVexStatement` (@id, status, timestamp, products, justification, action_statement, evidence)
|
|
- `OpenVexEvidence` (type, uri, confidence, predicateType, envelopeDigest, validatedSignature, rekorIndex, signer)
|
|
- `EvidenceSummary` (StatementId, Type, Confidence, EvidenceUri)
|
|
- **Commands**:
|
|
- `stella vex gen --from-drift --image <ref> [--baseline <sealId>] [--output <path>] [--format openvex|csaf] [--status under_investigation|not_affected|affected] [--link-evidence] [--evidence-threshold 0.8] [--show-evidence-uri]` -- generate VEX from facet drift with evidence linking
|
|
- **Output**: OpenVEX JSON document to stdout or file; evidence summary table in console with confidence scores
|
|
- **Exit codes**: 0 = success, 1 = error or missing `--from-drift`
|
|
|
|
## E2E Test Plan
|
|
- [ ] Run `stella vex gen --from-drift --image registry/app@sha256:abc` and verify OpenVEX JSON output
|
|
- [ ] Run with `--output vex.json` and verify file written with correct OpenVEX schema (@context, @id, author, timestamp, statements)
|
|
- [ ] Run with `--link-evidence` and verify evidence fields in statements (type, uri, confidence, validatedSignature)
|
|
- [ ] Run with `--evidence-threshold 0.5` and verify lower threshold includes more evidence links
|
|
- [ ] Run with `--evidence-threshold 1.0` and verify high threshold excludes low-confidence evidence
|
|
- [ ] Run with `--show-evidence-uri` and verify full URIs in console evidence summary
|
|
- [ ] Run with `--format csaf` and verify CSAF-formatted output
|
|
- [ ] Run with `--status not_affected` and verify status field in generated statements
|
|
- [ ] Run with `--baseline <sealId>` and verify specific baseline used for drift comparison
|
|
- [ ] Run without `--from-drift` and verify error: "--from-drift is required"
|
|
- [ ] Verify deterministic: running same command twice produces identical document IDs
|
|
|
|
## Verification
|
|
|
|
- **Verified**: 2026-02-13T15:30:00Z
|
|
- **Tier 0 (Source)**: pass -- all referenced source files exist on disk
|
|
- **Tier 1 (Build)**: pass -- module builds cleanly, 412 tests pass in StellaOps.Cli.Commands.Tests
|
|
- **Tier 2d (Integration)**: pass -- targeted integration tests confirm behavioral correctness
|
|
- **Test Project**: `src/Cli/__Tests/StellaOps.Cli.Commands.Tests/StellaOps.Cli.Commands.Tests.csproj`
|
|
- **Evidence**: `docs/qa/feature-checks/runs/cli/vex-generation-with-evidence-links/run-001/tier2-integration-check.json`
|