omena-cascade 0.1.14

Cascade-formal substrate for Omena CSS
Documentation
//! Modal proof-obligation aggregation for cascade transform witnesses.
//!
//! The V0 summary turns individual proof witnesses into a single conservative
//! surface that release gates can inspect without knowing each witness shape.

use crate::{ModalCheckWitnessSourceV0, ModalCheckWitnessV0, StaticSupportsEvalVerdictV0};

pub fn summarize_modal_check_witness_v0(
    witnesses: Vec<ModalCheckWitnessSourceV0>,
) -> ModalCheckWitnessV0 {
    let accepted_count = witnesses
        .iter()
        .filter(|witness| modal_witness_accepted(witness))
        .count();
    let source_products = witnesses
        .iter()
        .map(modal_witness_product)
        .collect::<Vec<_>>();
    let all_provenance_preserved = witnesses.iter().all(modal_witness_provenance_preserved);
    let obligation_count = witnesses.len();

    ModalCheckWitnessV0 {
        schema_version: "0",
        product: "omena-cascade.modal-check-witness",
        modal_family: "cascadeProofObligationStrictSuperset",
        substrate: "omena-cascade.proof-witnesses",
        obligation_count,
        accepted_count,
        blocked_count: obligation_count - accepted_count,
        all_provenance_preserved,
        source_products,
        witnesses,
    }
}

fn modal_witness_accepted(witness: &ModalCheckWitnessSourceV0) -> bool {
    match witness {
        ModalCheckWitnessSourceV0::ShorthandCombination(proof) => proof.accepted,
        ModalCheckWitnessSourceV0::StaticSupportsEval(witness) => {
            witness.verdict != StaticSupportsEvalVerdictV0::Unknown
        }
        ModalCheckWitnessSourceV0::ScopeFlatten(proof) => proof.accepted,
        ModalCheckWitnessSourceV0::LayerFlatten(proof) => proof.accepted,
    }
}

fn modal_witness_provenance_preserved(witness: &ModalCheckWitnessSourceV0) -> bool {
    match witness {
        ModalCheckWitnessSourceV0::ShorthandCombination(proof) => proof.provenance_preserved,
        ModalCheckWitnessSourceV0::StaticSupportsEval(witness) => witness.provenance_preserved,
        ModalCheckWitnessSourceV0::ScopeFlatten(proof) => proof.provenance_preserved,
        ModalCheckWitnessSourceV0::LayerFlatten(proof) => proof.provenance_preserved,
    }
}

fn modal_witness_product(witness: &ModalCheckWitnessSourceV0) -> &'static str {
    match witness {
        ModalCheckWitnessSourceV0::ShorthandCombination(proof) => proof.product,
        ModalCheckWitnessSourceV0::StaticSupportsEval(witness) => witness.product,
        ModalCheckWitnessSourceV0::ScopeFlatten(proof) => proof.product,
        ModalCheckWitnessSourceV0::LayerFlatten(proof) => proof.product,
    }
}