test
This commit is contained in:
295
docs/modules/snapshot/replay-yaml.md
Normal file
295
docs/modules/snapshot/replay-yaml.md
Normal file
@@ -0,0 +1,295 @@
|
||||
# REPLAY.yaml Manifest Specification
|
||||
|
||||
## Overview
|
||||
|
||||
The **REPLAY.yaml** manifest defines the complete set of inputs required to reproduce a StellaOps evaluation. It is the root document in a `.stella-replay.tgz` bundle.
|
||||
|
||||
## File Location
|
||||
|
||||
```
|
||||
.stella-replay.tgz
|
||||
├── REPLAY.yaml # This manifest
|
||||
├── sboms/
|
||||
├── vex/
|
||||
├── reach/
|
||||
├── exceptions/
|
||||
├── policies/
|
||||
├── feeds/
|
||||
├── config/
|
||||
└── SIGNATURE.sig # Optional DSSE signature
|
||||
```
|
||||
|
||||
## Schema Version
|
||||
|
||||
Current schema version: `1.0.0`
|
||||
|
||||
```yaml
|
||||
version: "1.0.0"
|
||||
```
|
||||
|
||||
## Complete Example
|
||||
|
||||
```yaml
|
||||
version: "1.0.0"
|
||||
|
||||
snapshot:
|
||||
id: "snap-20241222-abc123"
|
||||
createdAt: "2024-12-22T12:00:00Z"
|
||||
artifact: "sha256:abc123..."
|
||||
previousId: "snap-20241221-xyz789"
|
||||
|
||||
inputs:
|
||||
sboms:
|
||||
- path: "sboms/cyclonedx.json"
|
||||
format: "cyclonedx-1.6"
|
||||
digest: "sha256:def456..."
|
||||
- path: "sboms/spdx.json"
|
||||
format: "spdx-3.0.1"
|
||||
digest: "sha256:ghi789..."
|
||||
|
||||
vex:
|
||||
- path: "vex/vendor-lodash.json"
|
||||
source: "vendor:lodash"
|
||||
format: "openvex"
|
||||
digest: "sha256:jkl012..."
|
||||
trustScore: 0.95
|
||||
- path: "vex/redhat-csaf.json"
|
||||
source: "distro:redhat"
|
||||
format: "csaf"
|
||||
digest: "sha256:mno345..."
|
||||
trustScore: 0.90
|
||||
|
||||
reachability:
|
||||
- path: "reach/api-handler.json"
|
||||
entryPoint: "/api/handler"
|
||||
digest: "sha256:pqr678..."
|
||||
nodeCount: 42
|
||||
edgeCount: 57
|
||||
|
||||
exceptions:
|
||||
- path: "exceptions/exc-001.json"
|
||||
exceptionId: "exc-001"
|
||||
digest: "sha256:stu901..."
|
||||
|
||||
policies:
|
||||
bundlePath: "policies/bundle.tar.gz"
|
||||
digest: "sha256:vwx234..."
|
||||
version: "2.1.0"
|
||||
rulesHash: "sha256:yza567..."
|
||||
|
||||
feeds:
|
||||
- feedId: "nvd"
|
||||
name: "National Vulnerability Database"
|
||||
version: "2024-12-22T00:00:00Z"
|
||||
digest: "sha256:bcd890..."
|
||||
fetchedAt: "2024-12-22T06:00:00Z"
|
||||
- feedId: "ghsa"
|
||||
name: "GitHub Security Advisories"
|
||||
version: "2024-12-22T01:00:00Z"
|
||||
digest: "sha256:efg123..."
|
||||
fetchedAt: "2024-12-22T06:15:00Z"
|
||||
|
||||
lattice:
|
||||
type: "K4"
|
||||
configDigest: "sha256:hij456..."
|
||||
|
||||
trust:
|
||||
configDigest: "sha256:klm789..."
|
||||
defaultWeight: 0.5
|
||||
|
||||
outputs:
|
||||
verdictPath: "verdict.json"
|
||||
verdictDigest: "sha256:nop012..."
|
||||
findingsPath: "findings.ndjson"
|
||||
findingsDigest: "sha256:qrs345..."
|
||||
|
||||
seeds:
|
||||
rng: 12345678
|
||||
sampling: 87654321
|
||||
|
||||
environment:
|
||||
STELLAOPS_POLICY_VERSION: "2.1.0"
|
||||
STELLAOPS_LATTICE_TYPE: "K4"
|
||||
|
||||
signature:
|
||||
algorithm: "ecdsa-p256"
|
||||
keyId: "signing-key-prod-2024"
|
||||
value: "MEUCIQDx..."
|
||||
```
|
||||
|
||||
## Field Reference
|
||||
|
||||
### snapshot
|
||||
|
||||
Metadata about the snapshot itself.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| id | string | Yes | Unique snapshot identifier |
|
||||
| createdAt | datetime | Yes | ISO 8601 timestamp |
|
||||
| artifact | string | Yes | Artifact digest being evaluated |
|
||||
| previousId | string | No | Previous snapshot for diff |
|
||||
|
||||
### inputs.sboms
|
||||
|
||||
SBOM documents included in bundle.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| path | string | Yes | Path within bundle |
|
||||
| format | string | Yes | `cyclonedx-1.6` or `spdx-3.0.1` |
|
||||
| digest | string | Yes | Content digest |
|
||||
|
||||
### inputs.vex
|
||||
|
||||
VEX documents from various sources.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| path | string | Yes | Path within bundle |
|
||||
| source | string | Yes | Source identifier (vendor:*, distro:*, etc.) |
|
||||
| format | string | Yes | `openvex`, `csaf`, `cyclonedx-vex` |
|
||||
| digest | string | Yes | Content digest |
|
||||
| trustScore | number | Yes | Trust weight (0.0-1.0) |
|
||||
|
||||
### inputs.reachability
|
||||
|
||||
Reachability subgraph data.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| path | string | Yes | Path within bundle |
|
||||
| entryPoint | string | Yes | Entry point identifier |
|
||||
| digest | string | Yes | Content digest |
|
||||
| nodeCount | integer | No | Number of nodes |
|
||||
| edgeCount | integer | No | Number of edges |
|
||||
|
||||
### inputs.exceptions
|
||||
|
||||
Active exceptions at snapshot time.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| path | string | Yes | Path within bundle |
|
||||
| exceptionId | string | Yes | Exception identifier |
|
||||
| digest | string | Yes | Content digest |
|
||||
|
||||
### inputs.policies
|
||||
|
||||
Policy bundle reference.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| bundlePath | string | Yes | Path to policy bundle |
|
||||
| digest | string | Yes | Bundle digest |
|
||||
| version | string | No | Policy version |
|
||||
| rulesHash | string | Yes | Hash of compiled rules |
|
||||
|
||||
### inputs.feeds
|
||||
|
||||
Advisory feed versions at snapshot time.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| feedId | string | Yes | Feed identifier |
|
||||
| name | string | No | Human-readable name |
|
||||
| version | string | Yes | Feed version/timestamp |
|
||||
| digest | string | Yes | Feed content digest |
|
||||
| fetchedAt | datetime | Yes | When feed was fetched |
|
||||
|
||||
### inputs.lattice
|
||||
|
||||
Lattice configuration for merge semantics.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| type | string | Yes | `K4`, `Boolean`, `8-state` |
|
||||
| configDigest | string | Yes | Configuration hash |
|
||||
|
||||
### inputs.trust
|
||||
|
||||
Trust weight configuration.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| configDigest | string | Yes | Configuration hash |
|
||||
| defaultWeight | number | No | Default trust weight |
|
||||
|
||||
### outputs
|
||||
|
||||
Evaluation outputs for verification.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| verdictPath | string | Yes | Path to verdict file |
|
||||
| verdictDigest | string | Yes | Verdict content digest |
|
||||
| findingsPath | string | No | Path to findings file |
|
||||
| findingsDigest | string | No | Findings content digest |
|
||||
|
||||
### seeds
|
||||
|
||||
Random seeds for deterministic evaluation.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| rng | integer | No | Random number generator seed |
|
||||
| sampling | integer | No | Sampling algorithm seed |
|
||||
|
||||
### environment
|
||||
|
||||
Environment variables captured (non-sensitive).
|
||||
|
||||
Key-value pairs of environment configuration.
|
||||
|
||||
### signature
|
||||
|
||||
DSSE signature over manifest.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| algorithm | string | Yes | Signing algorithm |
|
||||
| keyId | string | Yes | Signing key identifier |
|
||||
| value | string | Yes | Base64-encoded signature |
|
||||
|
||||
## Digest Format
|
||||
|
||||
All digests use the format:
|
||||
```
|
||||
sha256:<64-char-hex>
|
||||
```
|
||||
|
||||
Example:
|
||||
```
|
||||
sha256:a1b2c3d4e5f6...
|
||||
```
|
||||
|
||||
## Validation
|
||||
|
||||
Bundle validation checks:
|
||||
1. REPLAY.yaml exists at bundle root
|
||||
2. All referenced files exist
|
||||
3. All digests match content
|
||||
4. Schema validates against JSON Schema
|
||||
5. Signature verifies (if present)
|
||||
|
||||
## CLI Usage
|
||||
|
||||
```bash
|
||||
# Create bundle
|
||||
stella snapshot export --output snapshot.stella-replay.tgz
|
||||
|
||||
# Verify bundle
|
||||
stella snapshot verify snapshot.stella-replay.tgz
|
||||
|
||||
# Replay from bundle
|
||||
stella replay --bundle snapshot.stella-replay.tgz
|
||||
|
||||
# View manifest
|
||||
stella snapshot manifest snapshot.stella-replay.tgz
|
||||
```
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Knowledge Snapshot Model](./knowledge-snapshot.md)
|
||||
- [Merge Preview](./merge-preview.md)
|
||||
- [Replay Engine](../../modules/policy/implementation_plan.md)
|
||||
Reference in New Issue
Block a user