namespace StellaOps.AuditPack.Services;
///
/// Request for creating an audit bundle.
///
public sealed record AuditBundleWriteRequest
{
///
/// Output path for the bundle (will add .tar.gz if not present).
///
public required string OutputPath { get; init; }
///
/// Unique bundle identifier (auto-generated if not provided).
///
public string? BundleId { get; init; }
///
/// Human-readable name for the bundle.
///
public string? Name { get; init; }
///
/// Scan ID this bundle was created from.
///
public required string ScanId { get; init; }
///
/// Image reference that was scanned.
///
public required string ImageRef { get; init; }
///
/// Image digest (sha256:...).
///
public required string ImageDigest { get; init; }
///
/// Decision from the verdict (pass, warn, block).
///
public required string Decision { get; init; }
///
/// SBOM document bytes (CycloneDX or SPDX JSON).
///
public required byte[] Sbom { get; init; }
///
/// Advisory feeds snapshot (NDJSON format).
///
public required byte[] FeedsSnapshot { get; init; }
///
/// Policy bundle (OPA tar.gz).
///
public required byte[] PolicyBundle { get; init; }
///
/// Verdict document bytes.
///
public required byte[] Verdict { get; init; }
///
/// VEX statements (OpenVEX JSON, optional).
///
public byte[]? VexStatements { get; init; }
///
/// Proof bundle bytes (optional).
///
public byte[]? ProofBundle { get; init; }
///
/// Trust roots document (optional).
///
public byte[]? TrustRoots { get; init; }
///
/// Scoring rules (optional).
///
public byte[]? ScoringRules { get; init; }
///
/// Triage-suppress predicates and source DSSEs (optional).
/// Sprint: SPRINT_20260219_012 (MWS-03)
///
public byte[]? TriageSuppressEvidence { get; init; }
///
/// Execution evidence predicates (DSSE envelope, optional).
/// Sprint: SPRINT_20260219_013 (SEE-04)
///
public byte[]? ExecutionEvidence { get; init; }
///
/// Beacon attestation predicates (DSSE envelope, optional).
/// Sprint: SPRINT_20260219_014 (BEA-04)
///
public byte[]? BeaconAttestation { get; init; }
///
/// Time anchor for replay context (optional).
///
public TimeAnchorInput? TimeAnchor { get; init; }
///
/// Whether to sign the manifest.
///
public bool Sign { get; init; } = true;
///
/// Path to signing key file (PEM format).
///
public string? SigningKeyPath { get; init; }
///
/// Password for encrypted signing key.
///
public string? SigningKeyPassword { get; init; }
}