{"id":"notification-defensive-double-rate-check","text":"The notification system checks rate limits at both send time (fast rejection) and process time (after queue delay) because the rate window can shift between enqueue and dequeue, and only successful deliveries consume budget — making the two checks complementary, not redundant.","truth_value":"IN","source":"","source_url":"","source_hash":"","justifications":[{"type":"SL","antecedents":["notif-two-phase-rate-limit","notif-rate-limit-on-success-only"],"outlist":[],"label":"Queue delay between the two check points means neither alone is sufficient; failed retries not consuming budget prevents limit exhaustion from transient failures"}],"dependents":["notification-delivery-is-bounded","temporal-check-gaps-are-systematic-risk"],"metadata":{"last_reviewed":"2026-06-06T06:26:57","review_result":"pass"},"created_at":"","updated_at":"","reviewed_at":"","verified_at":"","retracted_at":"","explanation":{"steps":[{"node":"notification-defensive-double-rate-check","truth_value":"IN","reason":"SL justification valid","antecedents":["notif-two-phase-rate-limit","notif-rate-limit-on-success-only"],"label":"Queue delay between the two check points means neither alone is sufficient; failed retries not consuming budget prevents limit exhaustion from transient failures"},{"node":"notif-two-phase-rate-limit","truth_value":"IN","reason":"premise"},{"node":"notif-rate-limit-on-success-only","truth_value":"IN","reason":"premise"}]}}