Dear WPBay Review Team,

Please find the complete Ordrivo RideFlow 7.2.55 package with an updated version and changelog.

1. Daily summaries now group estimates by each booking's stored currency and render separate totals. The configured currency in ordrivo_rideflow_settings is used only when a legacy booking has no stored currency. Changing settings no longer relabels existing bookings.

2. Customer message validation and history writes now run under the shared per-ride state lock. The policy is one accepted message every 10 seconds, up to 100 customer messages over the ride's lifetime, including legacy records. Throttling returns HTTP 429 with retry_after and Retry-After; the lifetime limit and closed rides return HTTP 409 with direct-contact guidance. Rejected requests create no message or event rows. Existing history is preserved, including mixed legacy arrays and newer rows. Failed message inserts do not create message events.

3. Extra-charge creation now acquires the ride-state lock before the fee-array lock, rechecks authoritative ride status and current driver assignment/eligibility, and holds the state lock through accepted-request side effects. Requests made stale by reassignment or closure return 403/409 without a fee, event or email. Customer decisions retain the fee-array lock and verified writes, so they cannot overwrite concurrent fee additions. No code path takes the two locks in reverse order.

Validation: 365 executable PHP assertions passed using deterministic WordPress/database adapters, covering currency changes, replay throttling, lifetime limits, closed rides, persistence failures, stale fee requests and interleaved fee decisions. PHP syntax and PHP 7.4 parsing checks, JavaScript syntax checks and selected existing regression suites passed. These are not live WordPress/MySQL concurrency tests; exact multi-connection staging scenarios and limitations are documented in docs/TEST-RESULTS-7.2.55.md.

Best regards,
Baris Beydogan
