#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub(crate) struct PostDeliveryAccounting {
pub original_tokens: usize,
pub compressed_tokens: usize,
pub kernel_overhead_tokens: usize,
pub decoration_tokens: usize,
pub delivered_tokens: usize,
pub actual_compression_ratio: f64,
pub reported_compression_ratio: f64,
pub phantom_savings_pct: f64,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub(crate) struct SavingsValidation {
pub claimed_saved: usize,
pub actual_saved: usize,
pub phantom: usize,
pub is_valid: bool,
}
pub(crate) fn compute_honest_accounting(
original: usize,
compressed: usize,
kernel_added: usize,
decorations: usize,
) -> PostDeliveryAccounting {
let delivered = compressed
.saturating_add(kernel_added)
.saturating_add(decorations);
let (actual_ratio, reported_ratio) = if original == 0 {
(0.0, 0.0)
} else {
let original = original as f64;
(
(1.0 - delivered as f64 / original).clamp(-1.0, 1.0),
1.0 - compressed as f64 / original,
)
};
PostDeliveryAccounting {
original_tokens: original,
compressed_tokens: compressed,
kernel_overhead_tokens: kernel_added,
decoration_tokens: decorations,
delivered_tokens: delivered,
actual_compression_ratio: actual_ratio,
reported_compression_ratio: reported_ratio,
phantom_savings_pct: (reported_ratio - actual_ratio).max(0.0),
}
}
pub(crate) fn validate_savings(
claimed_saved: usize,
original: usize,
sent: usize,
) -> SavingsValidation {
let actual_saved = original.saturating_sub(sent);
let phantom = claimed_saved.saturating_sub(actual_saved);
let is_valid = phantom == 0 || (phantom as f64) < (original as f64 * 0.05);
SavingsValidation {
claimed_saved,
actual_saved,
phantom,
is_valid,
}
}
pub(crate) fn format_honest_summary(accounting: &PostDeliveryAccounting) -> String {
format!(
"Original: {} → Compressed: {} → +Kernel: {} → +Decorations: {} → Delivered: {}\n\
Actual compression: {:.2}% (reported: {:.2}%, phantom: {:.2}%)",
accounting.original_tokens,
accounting.compressed_tokens,
accounting.kernel_overhead_tokens,
accounting.decoration_tokens,
accounting.delivered_tokens,
accounting.actual_compression_ratio * 100.0,
accounting.reported_compression_ratio * 100.0,
accounting.phantom_savings_pct * 100.0,
)
}
pub(crate) fn detect_negative_savings(accounting: &PostDeliveryAccounting) -> bool {
accounting.delivered_tokens > accounting.original_tokens
}
pub(crate) fn account_proxy_request(
original_tokens: usize,
compressed_tokens: usize,
kernel_supplement_tokens: usize,
injection_overhead_tokens: usize,
) -> PostDeliveryAccounting {
compute_honest_accounting(
original_tokens,
compressed_tokens,
kernel_supplement_tokens,
injection_overhead_tokens,
)
}
pub(crate) fn format_proxy_accounting(accounting: &PostDeliveryAccounting) -> String {
format!(
"delivered={} actual={:.1}% reported={:.1}% phantom={:.1}%",
accounting.delivered_tokens,
accounting.actual_compression_ratio * 100.0,
accounting.reported_compression_ratio * 100.0,
accounting.phantom_savings_pct * 100.0,
)
}
pub(crate) fn has_negative_savings(accounting: &PostDeliveryAccounting) -> bool {
detect_negative_savings(accounting)
}
#[cfg(test)]
mod tests {
use super::{
account_proxy_request, compute_honest_accounting, detect_negative_savings,
format_honest_summary, format_proxy_accounting, has_negative_savings, validate_savings,
};
fn assert_close(actual: f64, expected: f64) {
assert!((actual - expected).abs() < f64::EPSILON);
}
#[test]
fn honest_accounting_basic() {
let accounting = compute_honest_accounting(1_000, 300, 50, 20);
assert_eq!(accounting.delivered_tokens, 370);
assert_close(accounting.actual_compression_ratio, 0.63);
assert_close(accounting.reported_compression_ratio, 0.70);
assert_close(accounting.phantom_savings_pct, 0.07);
}
#[test]
fn phantom_savings_detected() {
let validation = validate_savings(500, 500, 500);
assert_eq!(validation.actual_saved, 0);
assert_eq!(validation.phantom, 500);
assert!(!validation.is_valid);
}
#[test]
fn negative_savings_when_kernel_dominates() {
let accounting = compute_honest_accounting(100, 80, 200, 0);
assert_eq!(accounting.delivered_tokens, 280);
assert_close(accounting.actual_compression_ratio, -1.0);
assert!(detect_negative_savings(&accounting));
}
#[test]
fn zero_original_safe() {
let accounting = compute_honest_accounting(0, 0, 10, 5);
assert_close(accounting.actual_compression_ratio, 0.0);
assert_close(accounting.reported_compression_ratio, 0.0);
}
#[test]
fn no_phantom_when_honest() {
let validation = validate_savings(500, 1_000, 500);
assert_eq!(validation.phantom, 0);
assert!(validation.is_valid);
}
#[test]
fn format_summary_no_content() {
let accounting = compute_honest_accounting(1_000, 300, 50, 20);
let summary = format_honest_summary(&accounting);
assert!(summary.contains("Original: 1000 → Compressed: 300"));
assert!(summary.contains("Actual compression: 63.00%"));
assert!(!summary.contains('/'));
assert!(!summary.contains("content"));
}
#[test]
fn kernel_overhead_visible() {
let accounting = compute_honest_accounting(1_000, 300, 50, 20);
let summary = format_honest_summary(&accounting);
assert_eq!(accounting.kernel_overhead_tokens, 50);
assert!(summary.contains("+Kernel: 50"));
}
#[test]
fn five_percent_phantom_is_invalid() {
let validation = validate_savings(55, 100, 50);
assert_eq!(validation.phantom, 5);
assert!(!validation.is_valid);
}
#[test]
fn account_proxy_standard() {
let accounting = account_proxy_request(1_000, 300, 50, 20);
assert_eq!(accounting.delivered_tokens, 370);
assert_close(accounting.actual_compression_ratio, 0.63);
assert_close(accounting.reported_compression_ratio, 0.70);
assert_close(accounting.phantom_savings_pct, 0.07);
}
#[test]
fn format_includes_all_fields() {
let accounting = account_proxy_request(1_000, 300, 50, 20);
let summary = format_proxy_accounting(&accounting);
assert!(summary.contains("delivered=370"));
assert!(summary.contains("actual=63.0%"));
assert!(summary.contains("reported=70.0%"));
assert!(summary.contains("phantom=7.0%"));
}
#[test]
fn negative_savings_detected() {
let accounting = account_proxy_request(100, 80, 30, 0);
assert!(has_negative_savings(&accounting));
}
}