use ccf_core::envelope::{
compute_envelope_tick, reject_min_gate_unconditional_convergence,
reject_missing_target_motion_telemetry, EnvelopeMonitorTick, EnvelopeStatus,
ENVELOPE_MONITOR_JOURNEY_ID, ENVELOPE_MONITOR_STORY_ID, MIN_GATE_CONVERGENCE_OLD_WRONG_PATH,
NO_TARGET_MOTION_TELEMETRY_OLD_WRONG_PATH,
};
const TEST_SOURCE: &str = include_str!("envelope_monitor.rs");
const CONTRACT_SOURCE: &str =
include_str!("../../../docs2/contracts/ccf-core-v1/journey_envelope_monitor.yml");
fn stable_tick() -> EnvelopeMonitorTick {
EnvelopeMonitorTick {
tick_id: 90,
previous_b_t: 0.40,
alpha_t: 0.25,
e_t: 0.30,
delta_t: 0.02,
kappa_t: 0.01,
monitored_assumptions_hold: true,
}
}
fn moving_target_tick() -> EnvelopeMonitorTick {
EnvelopeMonitorTick {
tick_id: 91,
previous_b_t: 0.20,
alpha_t: 0.25,
e_t: 0.31,
delta_t: 0.08,
kappa_t: 0.02,
monitored_assumptions_hold: false,
}
}
#[test]
fn stable_target_reports_inside_envelope_and_bound_values() {
eprintln!("journey={ENVELOPE_MONITOR_JOURNEY_ID} story={ENVELOPE_MONITOR_STORY_ID}");
let report =
compute_envelope_tick(&stable_tick()).expect("envelope monitor implementation is required");
assert_eq!(report.tick_id, 90);
assert_eq!(report.e_t, stable_tick().e_t);
assert_eq!(report.delta_t, stable_tick().delta_t);
assert_eq!(report.kappa_t, stable_tick().kappa_t);
assert!(report.b_t >= report.e_t);
assert!(report.b_t_bounds_e_t);
assert_eq!(report.status, EnvelopeStatus::InsideEnvelope);
assert!(!report.theorem_failure_claimed);
assert!(!report.convergence_claimed);
eprintln!(
"stable_envelope=PASS tick_id={} E_t={:.16e} delta_t={:.16e} kappa_t={:.16e} B_t={:.16e} B_t_bounds_E_t=PASS envelope_status=inside_envelope",
report.tick_id, report.e_t, report.delta_t, report.kappa_t, report.b_t
);
}
#[test]
fn moving_target_reports_not_certified_without_theorem_language() {
eprintln!("journey={ENVELOPE_MONITOR_JOURNEY_ID} story={ENVELOPE_MONITOR_STORY_ID}");
let report = compute_envelope_tick(&moving_target_tick())
.expect("moving-target envelope monitor implementation is required");
assert_eq!(report.tick_id, 91);
assert_eq!(report.e_t, moving_target_tick().e_t);
assert_eq!(report.delta_t, moving_target_tick().delta_t);
assert_eq!(report.kappa_t, moving_target_tick().kappa_t);
assert_eq!(report.status, EnvelopeStatus::NotCertified);
assert!(!report.theorem_failure_claimed);
assert!(!report.convergence_claimed);
eprintln!(
"moving_target_envelope=PASS tick_id={} E_t={:.16e} delta_t={:.16e} kappa_t={:.16e} B_t={:.16e} envelope_status=not_certified theorem_failure_language=ABSENT convergence_language=ABSENT",
report.tick_id, report.e_t, report.delta_t, report.kappa_t, report.b_t
);
}
#[test]
fn min_gate_convergence_old_wrong_path_is_rejected() {
eprintln!("journey={ENVELOPE_MONITOR_JOURNEY_ID} story={ENVELOPE_MONITOR_STORY_ID}");
let report = reject_min_gate_unconditional_convergence()
.expect("min-gate convergence negative guard is required");
assert_eq!(report.old_wrong_path, MIN_GATE_CONVERGENCE_OLD_WRONG_PATH);
assert!(report.rejected);
eprintln!(
"min_gate_convergence_negative=PASS old_wrong_path={}",
report.old_wrong_path
);
}
#[test]
fn target_motion_telemetry_old_wrong_path_is_rejected() {
eprintln!("journey={ENVELOPE_MONITOR_JOURNEY_ID} story={ENVELOPE_MONITOR_STORY_ID}");
let report = reject_missing_target_motion_telemetry()
.expect("target-motion telemetry negative guard is required");
assert_eq!(
report.old_wrong_path,
NO_TARGET_MOTION_TELEMETRY_OLD_WRONG_PATH
);
assert!(report.rejected);
eprintln!(
"target_motion_telemetry_negative=PASS old_wrong_path={}",
report.old_wrong_path
);
}
#[test]
fn envelope_monitor_has_no_silent_omission_or_convergence_claim() {
eprintln!("journey={ENVELOPE_MONITOR_JOURNEY_ID} story={ENVELOPE_MONITOR_STORY_ID}");
let omission_needles = [
concat!("test", ".skip"),
concat!("describe", ".skip"),
concat!("it", ".skip"),
concat!("#[", "ignore]"),
concat!("status:", " skipped"),
];
let forbidden_claim_needles = [
concat!("guarantees ", "convergence"),
concat!("unconditional ", "convergence"),
concat!("long-term ", "stability proof"),
concat!("theorem ", "failure"),
];
for source in [TEST_SOURCE, CONTRACT_SOURCE] {
for needle in omission_needles {
assert!(
!source.contains(needle),
"envelope monitor gate must not contain silent omission marker {needle}"
);
}
}
for forbidden_claim in forbidden_claim_needles {
assert!(
!TEST_SOURCE.contains(forbidden_claim),
"test source must not claim {forbidden_claim}"
);
}
eprintln!("envelope_no_silent_omission_scan=PASS convergence_language_scan=PASS");
}