Problem
There is no on-chain enforcement of a dispute window. Members can dispute a booking at any time — even months after checkout — with no time constraint.
Proposed Solution
Create contracts/cntr/dispute_window.rs implementing: pub fn is_within_dispute_window(checkout_timestamp: u64, current_timestamp: u64, window_seconds: u64) -> bool and pub fn dispute_window_expires_at(checkout_timestamp: u64, window_seconds: u64) -> u64. Default dispute window is 48 hours (172,800 seconds). All implementation must live inside contracts/cntr/.
Acceptance Criteria
Problem
There is no on-chain enforcement of a dispute window. Members can dispute a booking at any time — even months after checkout — with no time constraint.
Proposed Solution
Create
contracts/cntr/dispute_window.rsimplementing:pub fn is_within_dispute_window(checkout_timestamp: u64, current_timestamp: u64, window_seconds: u64) -> boolandpub fn dispute_window_expires_at(checkout_timestamp: u64, window_seconds: u64) -> u64. Default dispute window is 48 hours (172,800 seconds). All implementation must live insidecontracts/cntr/.Acceptance Criteria
contracts/cntr/dispute_window.rstruewhencurrent_timestamp - checkout_timestamp < window_secondsfalsewhen the window has passeddispute_window_expires_atreturnscheckout_timestamp + window_secondscargo test