*** ShipSavvy Shipping Changelog ***

2025-08-15 - version 1.0.0
* Added - Initial Launch

2026-04-17 - version 1.0.1
* Added UUID, Customer Order Number & Order Date

2026-08-05 - version 1.1.0
* Reworked the plugin to follow WordPress plugin standards: prefixed functions, classes and constants, escaped output, sanitized input
* Replaced the standalone admin scripts with AJAX endpoints protected by a nonce and a capability check
* Added support for WooCommerce High-Performance Order Storage
* Added error handling for every ShipSavvy API request; failures are recorded as an order note
* Cached tracking lookups for five minutes instead of requesting them on every page load
* Stopped orders being sent to ShipSavvy twice
* Replaced the activation redirect with a dismissible admin notice
* Added readme.txt, including disclosure of the external ShipSavvy service

2026-08-13 - version 1.2.0
* Added - Real-time carrier rates at checkout (Block and Classic), off by default
* Added - Merchant-configurable flat-rate fallback used whenever live rates are unavailable
* Added - Debug mode, which disables live rates and logs rate requests
* Added - Configurable API base URL for non-production environments
* Added - Chosen carrier/service recorded on the order
* Added - Cart-page warm-up so the rate service is already running by checkout
* Fixed - A failed quote is no longer cached for the whole session; previously
  rates only appeared after the shopper edited their address
* Fixed - An address we cannot quote now falls back to the flat rate instead of
  leaving the shopper with no shipping option at all
* Changed - Rates are quoted at checkout, not on the cart page, whose shipping
  calculator has no city field and would price a partial address
* Fixed - Debug Mode now offers the flat rate instead of no shipping option at all

2026-09-12 - version 1.2.1
* No functional changes - release used to verify the automated WordPress.org SVN deployment pipeline

2026-09-18 - version 1.2.3
* Fixed - Orders created by hand in wp-admin are no longer sent to ShipSavvy
  while they are still empty drafts, which stamped the order with a shipment it
  could never ship and blocked the real order from ever being sent. They are now
  sent once the order leaves draft, so tracking and carrier sync back as they do
  for checkout orders
* Fixed - Block checkout drafts are no longer sent, so an abandoned checkout no
  longer creates an empty shipment

2026-09-24 - version 1.2.4
* Fixed - SavvyExpress no longer disappears from checkout on destinations its
  ground service does not cover. Both sellable SavvyExpress services are now
  requested, using the service names the rate API expects, and both are shown
  to the shopper as "SavvyExpress"
