*** AtoShip Shipping & Labels Changelog ***

2026-07-28 - version 1.3.6
* Docs - Refreshed the WordPress.org screenshot gallery. The three previous screenshots predated the Ship Queue and showed only the per-order metabox flow; the plugin page was advertising the pre-1.3.5 product. The Ship Queue is now screenshot-1 (WP.org orders the gallery by filename) and the captions are renumbered. No code changes - this release exists because WP.org builds the gallery from readme.txt read at the Stable tag, so screenshots cannot be updated without shipping a version.

2026-07-26 - version 1.3.5
* Feature - Ship Queue: a dedicated admin screen under a new "atoship" menu for working through orders that still need a label. Search, sort, date range, four tabs (To ship / Shipped / No shipment needed / All) with counts, wallet balance, and per-row ship-from, weight, dimensions, rates and Buy. Buying reuses the same handlers as the per-order card, so the money path has one implementation.
* Feature - Rates are quoted for every buyable row on page load (three at a time, cached for 15 minutes), so prices are visible without clicking each order.
* Feature - International shipments are now supported: customs description and declared value appear when the destination country differs from the store's, seeded from the order. Previously the label API was never sent customs data, so only domestic labels could be bought.
* Feature - Per-order signature-required option, included in the quote so the price shown is the price with the surcharge.
* Feature - "Needs label" and "Label bought" views with counts above the WooCommerce order list.
* Feature - Bulk buy shows the total cost and is blocked when the atoship balance cannot cover it. Bulk print opens all selected labels in one window.
* Fix - A voided label left its order in "Label bought" permanently. Voiding writes _atoship_label_status only and leaves the tracking number in place, so keying off tracking alone never let the order return to the work queue. Both the in-admin Void button and the atoship webhook now mark it, and voided orders return to Needs label.
* Fix - Voiding a label in atoship now writes back to WooCommerce (status returns to processing, label flagged voided). The storefront used to keep showing the order as shipped with a dead tracking number.
* Fix - Shipped rows link their tracking number and offer Print and Track, and show carrier and service rather than carrier alone.
* Fix - The Ship Queue's horizontal scrollbar never appeared, hiding the right-hand columns including Buy on narrower windows.
* Tweak - Unit changes (lbs/oz, in/cm) no longer invalidate a quote: quotes are keyed by the physical parcel, not by how it was typed. The destination is part of that key, so editing a shipping address correctly re-quotes.
* Tweak - The carrier and service usually chosen for an order is remembered and preselected.
* Tweak - Bumped "WC tested up to" to 10.9.4, the version this release was verified against.

2026-07-22 - version 1.3.4
* Fix - Label purchase now locks to the selected rate by sending its rate id to the API (carrier + service are derived from the rate). Prevents being charged a different (cheapest-matching) rate than the one shown when multiple rates share a carrier/service.
* Tweak - Expired rate ids now surface a clear "rates have expired — fetch rates again" message on Buy instead of a raw API error.

2026-05-20 - version 1.3.3
* Tweak - Bumped "WC tested up to" header to 10.7.0 (current WooCommerce minor) to clear the QIT Validation Test warning.
* Tweak - Rewrote uninstall.php to use $wpdb->prepare() with the %i identifier placeholder for table-name interpolation. Clears all four wordpress.org Plugin Check warnings flagged on this file.
* Notice - Minimum WordPress raised from 5.8 to 6.2 (the version that introduced the %i placeholder we now use in uninstall queries).

2026-05-20 - version 1.3.2
* Tweak - Refreshed plugin page screenshots and captions to better reflect the current UI (order metabox, settings tab, and shipping-method integration).

2026-05-20 - version 1.3.1
* Tweak - Tested up to WordPress 7.0.
* Tweak - Admin styles now use the standard WordPress admin theme CSS variables (--wp-admin-theme-color) with hex fallbacks, so the plugin visually adapts to the new "Modern" admin theme in WordPress 7.0 without affecting older versions.
* Fix - Escape conditional CSS class output in the tracking timeline (cosmetic Plugin Check warning; no functional change — output was already safe).

2026-03-12 - version 1.3.0
* Fix - Properly escape all outputs with esc_html, esc_attr, wp_kses_post.
* Fix - Strengthened REST API permission callbacks with write-access verification.
* Fix - Webhook endpoint now always verifies HMAC signature when a secret is configured.
* Add - Added "Requires Plugins: woocommerce" header for WordPress compliance.
* Add - Added External Services documentation to readme.
* Tweak - Moved inline styles to wp_add_inline_style for proper enqueuing.
* Tweak - Renamed shipping method class to use plugin-specific prefix.

2026-02-15 - version 1.2.0
* Add - Inline rate comparison and label purchase directly from WooCommerce order page.
* Add - Ship-from address selector with saved addresses from AtoShip account.
* Add - AtoShip icon to metabox title.
* Tweak - Shows all available rates (no longer limited to top 10).
* Tweak - Rate list resets when ship-from address is changed.

2026-01-20 - version 1.1.0
* Add - Visual progress stepper (Preparing > Picked up > In Transit > Delivered) on the order page.
* Add - Carrier logo and service name display in the shipping metabox.
* Add - Collapsible tracking timeline with event history.
* Add - "Track on [Carrier]" quick action button.
* Add - AtoShip tracking page link for tracking numbers.

2025-12-01 - version 1.0.0
* New - Initial release.
* Add - OAuth-based connection to AtoShip.
* Add - Automatic order sync with configurable status triggers.
* Add - Real-time shipping rates at checkout.
* Add - Webhook handler for label and tracking updates.
* Add - Bulk order actions.
* Add - WooCommerce HPOS compatibility.
