Four invariants.
DEDUPE RETENTION WINDOW MUST COVER THE RECOVERY / REPLAY WINDOW IT PROTECTSA claim of replay protection needs an explicit time horizon.
EXPIRED DEDUPE MEMORY ≠ EFFECT ABSENTExpiry changes the protection state, not the underlying effect state.
AFTER IDEMPOTENCY EXPIRY, RECONCILE BEFORE CONSEQUENTIAL REPLAYAuthoritative effect state should replace expired dedupe memory.
TIME + MEMORY + RECOVERY POLICY FORM ONE SAFETY BOUNDARYThe pieces must be evaluated together.
Reference recovery path.
Evidence required.
When replay safety depends on retention, the proof path should preserve the logical effect identity, idempotency key, record creation and expiry times, recovery/retry time, retention policy, transport outcome, authoritative remote status and final effect count.
Verified #017.
The benchmark fixed a 120-second delayed recovery window. A 60-second TTL expired first and the same key produced a second effect. A 300-second TTL still covered the delayed replay and the second POST was deduplicated. With the short TTL expired, authoritative reconciliation observed COMMITTED and avoided a second POST entirely.
Scope.
The benchmark uses deterministic logical time across a real local HTTP boundary. Its numeric TTL values are test parameters, not production recommendations. This rule does not claim universal exactly-once delivery or provider-specific retention guarantees.
Inspect / reproduce
Short form: DURABLE MEMORY ≠ MEMORY VALID FOR THIS DECISION TIME.