///|
/// Verify many captured HTTP records without aborting the batch on bad input.
pub fn audit_entries(
  entries : Array[AuditEntry],
  policy : VerificationPolicy,
) -> AuditReport {
  let findings : Array[AuditFinding] = []
  let mut verified = 0
  let mut mismatch = 0
  let mut invalid = 0
  let mut missing = 0
  let mut blocked = 0
  let mut too_large = 0
  for entry in entries {
    let result = match entry.field_value {
      None =>
        Verification::{
          target: entry.target,
          decision: MissingField,
          algorithm: "",
          code: "MISSING_FIELD",
          checked: 0,
          ignored: 0,
        }
      Some(value) =>
        verify_digest_field(entry.target, value, entry.body, policy)
    }
    match result.decision {
      Verified => verified += 1
      Mismatch => mismatch += 1
      InvalidField | NoSupportedAlgorithm => invalid += 1
      MissingField => missing += 1
      PolicyBlocked => blocked += 1
      BodyTooLarge => too_large += 1
    }
    findings.push({
      record_id: entry.record_id,
      target: entry.target,
      decision: result.decision,
      algorithm: result.algorithm,
      code: result.code,
    })
  }
  { findings, verified, mismatch, invalid, missing, blocked, too_large, }
}