Audit Bundle Format Specification

Format version: 1.0.0

Audience: auditors, compliance reviewers, and integrators who consume or produce Stella Ops audit bundles.

The Stella Ops audit bundle is a self-contained, tamper-evident package containing all evidence required for an auditor to verify a release decision. The bundle is designed for:

Bundle Structure

audit-bundle-<digest>-<timestamp>/
├── manifest.json              # Bundle manifest with cryptographic hashes
├── README.md                  # Human-readable guide for auditors
├── verdict/
│   ├── verdict.json           # StellaVerdict artifact
│   └── verdict.dsse.json      # DSSE envelope with signatures
├── evidence/
│   ├── sbom.json              # SBOM (CycloneDX format)
│   ├── vex-statements/        # All VEX statements considered
│   │   ├── index.json         # VEX index with sources
│   │   └── *.json             # Individual VEX documents
│   ├── reachability/
│   │   ├── analysis.json      # Reachability analysis result
│   │   └── call-graph.dot     # Call graph visualization (optional)
│   └── provenance/
│       └── slsa-provenance.json
├── policy/
│   ├── policy-snapshot.json   # Policy version and rules used
│   ├── gate-decision.json     # Gate evaluation result
│   └── evaluation-trace.json  # Full policy trace (optional)
├── replay/
│   ├── knowledge-snapshot.json  # Frozen inputs for replay
│   └── replay-instructions.md   # How to replay verdict
└── schema/                    # Schema references (optional)
    ├── verdict-schema.json
    └── vex-schema.json

File Specifications

manifest.json

The manifest provides cryptographic integrity and bundle metadata.

{
  "$schema": "https://schema.stella-ops.org/audit-bundle/manifest/v1",
  "version": "1.0.0",
  "bundleId": "urn:stella:audit-bundle:sha256:abc123...",
  "artifactDigest": "sha256:abc123...",
  "generatedAt": "2026-01-17T10:30:00Z",
  "generatedBy": "stella-cli/2.5.0",
  "files": [
    {
      "path": "verdict/verdict.json",
      "sha256": "abc123...",
      "size": 12345,
      "required": true
    },
    {
      "path": "evidence/sbom.json",
      "sha256": "def456...",
      "size": 98765,
      "required": true
    }
  ],
  "totalFiles": 12,
  "totalSize": 234567,
  "integrityHash": "sha256:manifest-hash-of-all-file-hashes"
}

README.md

Auto-generated guide for auditors with:

verdict/verdict.json

The StellaVerdict artifact in standard format:

{
  "$schema": "https://schema.stella-ops.org/verdict/v1",
  "artifactDigest": "sha256:abc123...",
  "artifactType": "container-image",
  "decision": "BLOCKED",
  "timestamp": "2026-01-17T10:25:00Z",
  "gates": [
    {
      "gateId": "vex-trust",
      "status": "BLOCKED",
      "reason": "Trust score below threshold (0.45 < 0.70)",
      "evidenceRefs": ["evidence/vex-statements/vendor-x.json"]
    }
  ],
  "contentId": "urn:stella:verdict:sha256:xyz..."
}

verdict/verdict.dsse.json

DSSE (Dead Simple Signing Envelope) containing the signed verdict:

{
  "payloadType": "application/vnd.stella-ops.verdict+json",
  "payload": "base64-encoded-verdict",
  "signatures": [
    {
      "keyid": "urn:stella:key:sha256:...",
      "sig": "base64-signature"
    }
  ]
}

evidence/sbom.json

CycloneDX SBOM in JSON format (or SPDX if configured).

evidence/vex-statements/

Directory containing all VEX statements considered during evaluation:

evidence/reachability/analysis.json

Reachability analysis results:

{
  "artifactDigest": "sha256:abc123...",
  "analysisType": "static",
  "analysisTimestamp": "2026-01-17T10:20:00Z",
  "components": [
    {
      "purl": "pkg:npm/lodash@4.17.21",
      "vulnerabilities": [
        {
          "id": "CVE-2021-23337",
          "reachable": false,
          "reason": "Vulnerable function not in call graph"
        }
      ]
    }
  ]
}

policy/policy-snapshot.json

Snapshot of policy configuration at evaluation time:

{
  "policyVersion": "v2.3.1",
  "policyDigest": "sha256:policy-hash...",
  "gates": ["sbom-required", "vex-trust", "cve-threshold"],
  "thresholds": {
    "vexTrustScore": 0.70,
    "maxCriticalCves": 0,
    "maxHighCves": 5
  },
  "evaluatedAt": "2026-01-17T10:25:00Z"
}

policy/gate-decision.json

Detailed gate evaluation result:

{
  "artifactDigest": "sha256:abc123...",
  "overallDecision": "BLOCKED",
  "gates": [
    {
      "gateId": "vex-trust",
      "decision": "BLOCKED",
      "inputs": {
        "vexStatements": 3,
        "trustScore": 0.45,
        "threshold": 0.70
      },
      "reason": "Trust score below threshold",
      "suggestion": "Obtain VEX from trusted issuer or adjust trust registry"
    }
  ]
}

replay/knowledge-snapshot.json

Frozen inputs for deterministic replay:

{
  "$schema": "https://schema.stella-ops.org/knowledge-snapshot/v1",
  "snapshotId": "urn:stella:snapshot:sha256:...",
  "capturedAt": "2026-01-17T10:25:00Z",
  "inputs": {
    "sbomDigest": "sha256:sbom-hash...",
    "vexStatements": ["sha256:vex1...", "sha256:vex2..."],
    "policyDigest": "sha256:policy-hash...",
    "reachabilityDigest": "sha256:reach-hash..."
  },
  "replayCommand": "stella replay snapshot --manifest replay/knowledge-snapshot.json"
}

replay/replay-instructions.md

Human-readable, auto-generated replay instructions that walk an auditor through re-running the verdict from the frozen inputs in replay/knowledge-snapshot.json.

Archive Formats

The bundle can be output in three formats:

FormatExtensionUse Case
Directory(none)Local inspection, development
tar.gz.tar.gzTransfer, archival (default for remote)
zip.zipWindows compatibility

Verification

To verify a bundle’s integrity:

stella audit verify ./audit-bundle-sha256-abc123/

Verification checks:

  1. Parse manifest.json
  2. Verify each file’s SHA-256 hash matches manifest
  3. Verify integrityHash (hash of all file hashes)
  4. Optionally verify DSSE signatures

Compliance Mapping

Compliance FrameworkBundle Component
SOC 2 (CC7.1)verdict/, policy/
ISO 27001 (A.12.6)evidence/sbom.json
FedRAMPAll components
SLSA Level 3evidence/provenance/

Extensibility

Custom evidence can be added to an evidence/custom/ directory. Custom files must be:

See also