*** Fabrixa Studio for WooCommerce Changelog ***

2026-09-22 - version 0.4.0
* Orders are no longer sent to Fabrixa by the plugin. Shops are connected to Fabrixa as a channel, which imports orders itself; the plugin's own push produced every order twice. The plugin now stores the design on the order line, where the channel reads it.
* The Application Access Token setting is gone with it. Sends still queued by earlier versions are cleared on upgrade.
* The order screen shows the Fabrixa order id, status and fulfilment state reported by webhook.
* Fixed: on the Add to Cart with Options block the Customize button sat level with the first attribute label.
* The Studio window is titled for assistive technology, takes keyboard focus when it opens and hands it back when it closes.
* Added changelog.txt.

2026-09-22 - version 0.3.1
* The Fabrixa SKU field is gone. The item Fabrixa produces is named by the WooCommerce SKU of what is bought — for variable products the variation's own SKU, never the parent's — which is the value the Fabrixa catalogue sync already fills in. Whether a product can be customized is decided by its toggle alone.
* The product edit screen warns when customization is enabled but the product, or one of its variations, has no SKU of its own, and names the variations concerned.
* Fixed: bundled translations were never loaded. 0.3.0 dropped the load_plugin_textdomain() call on the assumption that WordPress loads them on demand, which it does only for plugins hosted on wordpress.org.
* Fixed: a second click on "Edit design" in the Cart or Mini Cart block while the first was still loading locked up the script.
* Fixed: on the classic checkout page and in the classic mini-cart widget, a customized line showed a stray colon and an "Edit design" link meant for the block carts.
* Product settings are saved as part of WooCommerce's own save rather than a second one, so woocommerce_update_product fires once per edit.
* The fabrixa_order_trigger_statuses filter is now honoured by the order sender as well as the webhook when it is added from a theme.

2026-09-18 - version 0.3.0
* Removed the bundled self-updater; updates are delivered by the marketplace the plugin is distributed from.
* Removed the internal development environment from the settings screen.
* Declared compatibility with the Cart and Checkout blocks, which the plugin already supported through the Store API.
* Orders no longer carry the shopper's IP address or browser user agent, neither of which was used to produce or ship anything.
* Added an uninstall routine that clears settings and per-product configuration while leaving order records intact.
* Webhook order lookup works on both order datastores without tripping the WooCommerce 9.2 notice, and confirms the match before applying an update.
* Dropped the redundant load_plugin_textdomain() call; bundled translations load on demand.
* Added a translation template and the GPLv3 licence text.
* Security: the Fabrixa SKU sent for production is now resolved from the product being bought instead of being read back from the add-to-cart request, and a design is only accepted for a product that has customization enabled.
* Security: the settings screen no longer renders the stored access token or webhook secret into the page, and requires the same capability to open as WordPress requires to save it.
* Fixed: a variation with no Fabrixa SKU of its own inherited the parent's WooCommerce SKU and was produced against that. The Fabrixa SKU is now only ever the value entered in that field.
* The Application Access Token can be set with the FABRIXA_ACCESS_TOKEN constant, as the webhook secret already could.
* Saving the settings screen no longer erases a stored secret that a wp-config.php constant is currently overriding.
* Failed API responses are no longer written to the WooCommerce logs in full; define FABRIXA_LOG_RESPONSE_BODIES to restore that while debugging.

version 0.2.1
* Customize button now renders styled on block themes and keeps its own line above Add to cart on themes that style WooCommerce buttons.
* Variable products show "Select options first" immediately instead of briefly showing "Customize" before the script loads.
* Disabled state is greyed out on themes that do not style it themselves.
* A failed update check now reports itself on the Plugins screen instead of leaving the site silently stuck on an old version.

version 0.2.0
* Order creation via POST /v2/integration/orders, sent asynchronously on processing/completed.
* Only customized line items are sent; idempotent per order, with retries for transient failures.
* Fulfilment webhooks (order.created / order.updated) with HMAC-SHA256 signature verification.
* Tracking details and fulfilment status stored on the order; auto-complete when Fabrixa ships.
* Webhook secret setting (overridable via the FABRIXA_WEBHOOK_SECRET constant) and webhook URL display.
* Sync state shown on the order edit screen; all API activity logged to WooCommerce logs.
* Declared High Performance Order Storage compatibility.
* Translations loaded from /languages on init; declared WooCommerce as a required plugin.
* Queued order sends are cancelled on deactivation.

version 0.1.0
* Customize button on selected products (per-product toggle).
* Fabrixa Studio embedded via modal iframe with postMessage handling.
* Environment switcher (dev/production/custom) pairing Studio + API hosts.
* Per-variation Fabrixa SKU with resolver (override -> variation SKU -> fallback).
* cart_item_key persisted to cart and order line item meta.
* Live customization preview in the cart.
* Automatic updates from Bitbucket.
