#![allow(dead_code, unused_variables)]
#[allow(unused_imports)]
use antigen::{antigen, defended_by, presents};
#[antigen(
name = "nan-in-cleaned-output",
category = AntigenCategory::FunctionalCorrectness,
fingerprint = r#"name = matches("DataCleaner")"#,
family = "numeric-correctness",
summary = "DataCleaner::clean_values() returned NaN values — the output representation diverges from the claimed invariant (no NaN in cleaned data).",
references = []
)]
pub struct NanInCleanedOutput;
#[presents(NanInCleanedOutput)]
pub struct DataCleaner {
pub data: Vec<f64>,
}
impl DataCleaner {
pub fn clean_values(&self) -> Vec<f64> {
self.data.iter().map(|&x| x.sqrt()).collect()
}
}
pub struct DataCleanerSafe {
pub data: Vec<f64>,
}
#[presents(NanInCleanedOutput)]
impl DataCleanerSafe {
pub fn clean_values_safe(&self) -> Vec<f64> {
self.data
.iter()
.filter(|&&x| x >= 0.0)
.map(|&x| x.sqrt())
.collect()
}
}
#[test]
#[defended_by(NanInCleanedOutput)]
fn test_clean_values_no_nan() {
let cleaner = DataCleanerSafe {
data: vec![-1.0, 0.0, 4.0, 9.0, 16.0],
};
let result = cleaner.clean_values_safe();
for val in &result {
assert!(!val.is_nan(), "clean_values_safe() produced NaN: {val}");
}
assert_eq!(result.len(), 4, "expected 4 non-negative values cleaned");
}
#[antigen(
name = "unsigned-security-policy",
category = AntigenCategory::SubstrateAlignment,
fingerprint = r#"doc_contains("security_policy")"#,
family = "governance-compliance",
summary = "A security policy document that must be reviewed and signed before release was not attested — the attestation record diverges from the required signed state.",
references = ["SECURITY.md"]
)]
pub struct UnsignedSecurityPolicy;
#[presents(UnsignedSecurityPolicy)]
pub fn gate_release_unverified(version: &str) -> Result<(), String> {
println!("[GATE] Releasing {version} — security policy assumed signed");
Ok(())
}
#[presents(
UnsignedSecurityPolicy,
requires = all_of([
ratified_doc(path = "docs/security-policy.md", min_version = "1.0"),
signers(required = ["security-team"]),
fresh_within_days(days = 90),
])
)]
pub fn gate_release_verified(version: &str) -> Result<(), String> {
println!("[GATE] Releasing {version} — security policy attested");
Ok(())
}
fn main() {
println!("=== antigen-category example ===");
println!();
println!("Pattern 1: FunctionalCorrectness — NanInCleanedOutput");
println!(" Vulnerable: DataCleaner::clean_values() (no NaN guard)");
println!(" Defended: DataCleanerSafe::clean_values_safe() (witnessed by test)");
println!(" Witness: test_clean_values_no_nan — a test *executes* the defense");
println!();
println!("Pattern 2: SubstrateAlignment — UnsignedSecurityPolicy");
println!(" Vulnerable: gate_release_unverified() (assumes policy signed)");
println!(" Defended: gate_release_verified() (requires = signers(...))");
println!(" Witness: cargo antigen audit evaluates .attest/ sidecar record");
println!();
println!("The quick test: can a *test* execute the thing you're defending?");
println!(" NaN guard: yes → FunctionalCorrectness + witness=");
println!(" Policy sign-off: no → SubstrateAlignment + requires=");
println!();
println!("Filter by category:");
println!(" cargo run --bin cargo-antigen -- antigen scan --root antigen/examples \\");
println!(" --category substrate-alignment");
}