=== UK Post by Bad Otter ===
Contributors: badotter
Tags: woocommerce, shipping, uk, postcode, delivery
Requires at least: 6.9
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 0.1.8
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

UK-first delivery, postcode and manual fulfilment tools for WooCommerce.

== Description ==

UK Post by Bad Otter gives UK WooCommerce stores practical local shipping tools without requiring a carrier account or external service for checkout.

UK Post includes:

* Guided setup for Standard Delivery and Express Delivery WooCommerce shipping methods.
* Fixed delivery prices with an optional free-delivery order threshold.
* UK postcode normalisation and configurable postcode regions with exclusions.
* A dedicated UK dispatch address with validation.
* Reusable package profiles with weight, dimensions and a default package selection.
* WooCommerce order controls for manual carrier, service, tracking number, tracking URL and shipment status.
* Customer-facing tracking details on WooCommerce order pages when a tracking number has been added.
* WooCommerce HPOS-compatible order data access.
* WordPress personal-data export and erasure support for UK Post tracking data.
* WooCommerce operational logging with sensitive credential and tracking fields redacted.

The plugin keeps customer delivery promises separate from carrier services. For example, a customer can see "Standard Delivery" while the merchant records whichever carrier and service they actually use for that order.

UK Post Free does not require a Bad Otter account for its local shipping, checkout or manual tracking functionality.

== External services ==

The Free functionality described in this readme does not require an external shipping or licence service and does not automatically send customer/order data to Bad Otter or a carrier.

Links to Bad Otter documentation or product information may open a normal web page when explicitly selected by an administrator. Those links are not part of checkout or order processing.

== Installation ==

1. Make sure WooCommerce is installed and active.
2. Install and activate UK Post by Bad Otter.
3. Open UK Post in wp-admin and complete the setup wizard.
4. Open UK Post > Dispatch and save the full UK address parcels leave from.
5. Optionally create package profiles and postcode regions.
6. Adjust UK Post delivery-method prices in WooCommerce shipping settings when required.
7. On a WooCommerce order, use the UK Post Shipping panel to record manual fulfilment and tracking details.

== Frequently Asked Questions ==

= Does UK Post require WooCommerce? =

Yes. UK Post is designed for WooCommerce and declares WooCommerce as a required plugin dependency.

= Does the Free functionality require a Bad Otter account? =

No. The local checkout, postcode, package, dispatch and manual tracking functionality described here works without a Bad Otter account.

= Does UK Post require a carrier account? =

No. The Free functionality can be used with manual carrier, service and tracking information. No live carrier integration is required.

= Where do I change Standard and Express delivery prices? =

The setup wizard creates UK Post WooCommerce shipping-method instances. Their customer labels, fixed prices, free-delivery thresholds and optional UK Post postcode-region restrictions can be managed in WooCommerce shipping settings.

= How do postcode regions work? =

Create a region in UK Post > Shipping Regions, add postcode rules and exclusions, then select that region on a UK Post delivery-method instance. The delivery option is offered only when the checkout destination matches the selected enabled region.

= What tracking data can WordPress privacy tools export or erase? =

UK Post registers with the WordPress personal-data exporter and eraser. Tracking streams associated with matching WooCommerce orders are included, along with manual tracking numbers and tracking URLs saved by UK Post. Erasure removes UK Post tracking identifiers while leaving the WooCommerce order and non-personal fulfilment state intact.

= How will updates work from WordPress.org? =

WordPress.org is the executable update authority for the directory build. Once installed from the directory, UK Post uses the normal WordPress plugin updater and can participate in WordPress auto-updates.

== Changelog ==

= 0.1.8 =
* Coordinate tracking event merge, reduction and retention with the atomic revision-based stream repository.
* Re-read the winning persisted state and re-apply the carrier-neutral mutation policy after stale concurrent writes.
* Bound compare-and-swap retries without embedding carrier polling, rate-limit or backoff assumptions.

= 0.1.7 =
* Redact legacy UK Post system order notes that contain the exact saved tracking number when WordPress erasure runs, while leaving customer-authored and unrelated notes untouched.

= 0.1.6 =
* Harden the Free MVP checkout, postcode-region, dispatch, package and manual fulfilment workflows against real WooCommerce behaviour.
* Synchronise Standard and Express delivery-method instance state with WooCommerce shipping zones and apply fixed pricing and free-delivery thresholds.
* Expand privacy coverage to manual tracking identifiers and keep newly created operational notes free of raw tracking numbers.
* Wire sensitive-data-redacted operational logging into setup and fulfilment flows.
* Remove unfinished Premium account placeholders from the Free submission surface and align merchant-facing copy with implemented functionality.
* Add release-shaped WooCommerce acceptance coverage for the supported WordPress, WooCommerce and HPOS profiles.

= 0.1.5 =
* Register UK Post tracking data with the WordPress personal-data exporter and eraser APIs.
* Resolve privacy requests through WooCommerce's HPOS-safe order query using the request email address.
* Export retained tracking references, snapshots and event history associated with matched customer orders.
* Erase matched UK Post tracking streams from the dedicated tracking table without altering WooCommerce order data.

= 0.1.4 =
* Add carrier-neutral opaque tracking-event identities for idempotent duplicate rejection.
* Apply deterministic event ordering by carrier event time, received time and stable identity without timezone-string ordering bugs.
* Keep late events in history without letting them roll the current tracking state backwards under the default reducer.
* Enforce the approved 90-day and 100-event tracking history limits while preserving the current supporting event through count pruning where practical.
* Keep the status reducer replaceable so carrier-specific state semantics can be introduced only when an approved mapping exists.

= 0.1.3 =
* Move tracking persistence to a dedicated UK Post table after WooCommerce order-meta CRUD failed the required compare-and-swap concurrency proof.
* Add atomic revision-based tracking stream writes that reject stale polling, webhook or manual-refresh writers.
* Install/upgrade the tracking schema automatically without requiring a deactivate/reactivate cycle.
* Exercise stale-write rejection on both supported HPOS integration profiles.

= 0.1.2 =
* Lock the carrier-neutral tracking persistence architecture in the canonical blueprint.
* Add durable UUID v4 tracking-stream identities and regression coverage as the first persistence building block.
* Preserve the immutable 0.1.1 release by publishing runtime-source changes under a new version.

= 0.1.1 =
* Align release, installation and update-channel wording with the live Bad Otter Stable distribution process.
* Point plugin metadata at the canonical Bad Otter UK Post product page.
* Clarify the current free Core, planned Premium boundary and non-live Royal Mail integration status.

= 0.1.0 =
* First managed Stable release of the UK-first WooCommerce shipping foundation.
