changelog.txt
Rama trunk · réplica de lectura del repositorio original.
== Changelog ==
= 11.2.2 2026-11-04 =
**WooCommerce**
* Fix - Ensure PayPal Standard shipping updates correctly update shipping and tax amounts [#70653](https://github.com/woocommerce/woocommerce/pull/70653)
* Fix - Improve handling of unexpected payment settings profile data. [#70642](https://github.com/woocommerce/woocommerce/pull/70642)
* Fix - Improve validation of the column mapping used by the product CSV importer. [#70646](https://github.com/woocommerce/woocommerce/pull/70646)
* Fix - Keep custom default attribute values intact when a global attribute term slug is renamed. [#70641](https://github.com/woocommerce/woocommerce/pull/70641)
* Fix - Require a logged-in admin browser session for the Jetpack connection endpoints used during onboarding. [#70656](https://github.com/woocommerce/woocommerce/pull/70656)
* Fix - Restrict REST API key authentication to REST API requests. [#70649](https://github.com/woocommerce/woocommerce/pull/70649)
* Fix - Start each Store API checkout request with its own order and payment data. [#70637](https://github.com/woocommerce/woocommerce/pull/70637)
* Fix - Stop checkout from continuing to payment when the order could not be saved, and reject phone numbers over 100 characters. [#70639](https://github.com/woocommerce/woocommerce/pull/70639)
* Fix - Use a chosen shipping method only when its rate was calculated for the cart. [#70648](https://github.com/woocommerce/woocommerce/pull/70648)
* Fix - Validate the quantity when updating a cart item via the Store API. [#70657](https://github.com/woocommerce/woocommerce/pull/70657)
* Fix - When a shopper adds a product to the cart, ignore attributes that the product does not use. [#70651](https://github.com/woocommerce/woocommerce/pull/70651)
= 11.2.1 2026-10-09 =
**WooCommerce**
* Fix - Restore how the classic checkout sends order review and coupon requests, so fields removed with checkout field filters are no longer sent as empty values. [#69649](https://github.com/woocommerce/woocommerce/pull/69649)
* Fix - Accept legacy four-digit Argentine postcodes in the Checkout block again. [#69662](https://github.com/woocommerce/woocommerce/pull/69662)
= 11.2.0 2026-10-07 =
**WooCommerce**
* Fix - Accept Danish postcodes that carry the DK prefix with no separator or with a space, matching the separator handling introduced for Latvian postcodes. [#67685](https://github.com/woocommerce/woocommerce/pull/67685)
* Fix - Accept Latvian postcodes that carry the LV prefix without a hyphen, restoring values that validated before postcode rules were added for Latvia. [#67684](https://github.com/woocommerce/woocommerce/pull/67684)
* Fix - Add postcode validation for Latvia, which previously accepted invalid values. [#67460](https://github.com/woocommerce/woocommerce/pull/67460)
* Fix - Add translator context to the Orders list table "Status" column so it can be translated independently of the unrelated "Status" strings elsewhere in the admin. [#67816](https://github.com/woocommerce/woocommerce/pull/67816)
* Fix - Allow password reset links to work when reset cookies use SameSite=Strict. [#68334](https://github.com/woocommerce/woocommerce/pull/68334)
* Fix - Allow structured data filters to return multiple schema types without causing a fatal error or dropping valid product markup. [#68459](https://github.com/woocommerce/woocommerce/pull/68459)
* Fix - Allow variation attribute selectors to use available header space and wrap on narrow screens. [#68434](https://github.com/woocommerce/woocommerce/pull/68434)
* Fix - Analytics: label a customer filter tag with the username or email when the customer is registered without a name. Affects the Downloads and Customers reports. [#68139](https://github.com/woocommerce/woocommerce/pull/68139)
* Fix - Analytics: pin the Stock report to published and private products so its CSV export always completes and its download email is sent. [#68045](https://github.com/woocommerce/woocommerce/pull/68045)
* Fix - Analytics: report the Taxes report period by the configured date type (default date paid) so its order counts and tax totals reconcile with the Orders and Revenue reports. [#67553](https://github.com/woocommerce/woocommerce/pull/67553)
* Fix - Analytics: restore the released unqualified parent_id form of the Taxes orders_count column carried by the woocommerce_admin_report_columns filter, and invalidate report caches on the first-ever save of the analytics date type. [#67679](https://github.com/woocommerce/woocommerce/pull/67679)
* Fix - Analytics > Orders: report refunds with the customer type of the order they refund, instead of always reporting them as returning customers. [#67565](https://github.com/woocommerce/woocommerce/pull/67565)
* Fix - Anchor day-precision date queries on the store's local midnight instead of UTC midnight, so wc_get_orders() and wc_get_products() match the day a merchant means when filtering on date_paid, date_completed, date_on_sale_from and date_on_sale_to. A `start...end` range now covers the whole of its final day, where before it collapsed that day down to a single second, so range queries return one more day of results than they used to. [#67903](https://github.com/woocommerce/woocommerce/pull/67903)
* Fix - Avoid customized WooCommerce template parts taking priority over template parts queried directly [#67892](https://github.com/woocommerce/woocommerce/pull/67892)
* Fix - Back in Stock: hide the sign-up form with the hidden attribute so it stays hidden for in-stock variations on themes that replace the WooCommerce stylesheet. [#68859](https://github.com/woocommerce/woocommerce/pull/68859)
* Fix - Cast the payment method title to string on printed order receipts so a non-string value from the woocommerce_printable_order_receipt_data filter no longer fatals receipt generation. [#67763](https://github.com/woocommerce/woocommerce/pull/67763)
* Fix - Clarify that variation price filters use string values. [#67796](https://github.com/woocommerce/woocommerce/pull/67796)
* Fix - Clear product CSV import mapping markers in the last import batch, so an import abandoned during cleanup cannot make a later import resolve its id: references to the wrong products. [#68392](https://github.com/woocommerce/woocommerce/pull/68392)
* Fix - Constrain the product image on the stock notification edit screen so it no longer overflows its column and overlaps the Update button. [#64482](https://github.com/woocommerce/woocommerce/pull/64482)
* Fix - Corrected the `@since` tag for WC_Coupon::set_status() from 3.0.0 to 6.2.0 [#37557](https://github.com/woocommerce/woocommerce/pull/37557)
* Fix - Correctly hide patterns containing product-related blocks when products are password-protected [#68479](https://github.com/woocommerce/woocommerce/pull/68479)
* Fix - Correctly highlight Products submenu items throughout the empty All Products add-product flow. [#67655](https://github.com/woocommerce/woocommerce/pull/67655)
* Fix - Correct the public TypeScript type for the Store API item_data `hidden` flag, which arrives as a string rather than a boolean. [#68159](https://github.com/woocommerce/woocommerce/pull/68159)
* Fix - Delete orphaned order notes (comments) when an order is permanently deleted with HPOS enabled and sync disabled. [#67935](https://github.com/woocommerce/woocommerce/pull/67935)
* Fix - Direction-isolate the currency symbol in wc_price() so RTL-script symbols (e.g. Lebanese Pound) respect the configured currency position and no longer bleed into surrounding text. [#67686](https://github.com/woocommerce/woocommerce/pull/67686)
* Fix - Dispatch plugin install/activate failures as error notices instead of success notices when the rejected PluginError is passed to createNoticesFromResponse(). [#68095](https://github.com/woocommerce/woocommerce/pull/68095)
* Fix - Display the real character instead of the raw HTML entity when the price thousand or decimal separator is stored as an entity such as in Analytics, admin screens, and blocks. [#67732](https://github.com/woocommerce/woocommerce/pull/67732)
* Fix - Enable Back in Stock Notifications sign-ups by default on new installs, as intended, instead of leaving the sign-up form off because the install hook wrote the wrong option name. [#68737](https://github.com/woocommerce/woocommerce/pull/68737)
* Fix - Encode apostrophes in classic checkout request data. [#68365](https://github.com/woocommerce/woocommerce/pull/68365)
* Fix - Ensure exact global attribute terms remain selectable when partial matches fill the search results. [#68098](https://github.com/woocommerce/woocommerce/pull/68098)
* Fix - Ensure low-stock thresholds are stored as non-negative integers. [#67925](https://github.com/woocommerce/woocommerce/pull/67925)
* Fix - Ensure POS catalog download URLs reflect the current site URL. [#67815](https://github.com/woocommerce/woocommerce/pull/67815)
* Fix - Ensure Product Filters respect zero block spacing on the frontend. [#67870](https://github.com/woocommerce/woocommerce/pull/67870)
* Fix - Ensure Store API checkout carts clear after redirect payments. [#68102](https://github.com/woocommerce/woocommerce/pull/68102)
* Fix - Ensure the cached order item data always includes the item type and item ID, so the cache shape is consistent between the order data store and the order item data store. [#67513](https://github.com/woocommerce/woocommerce/pull/67513)
* Fix - Ensure WooCommerce scheduled actions are removed on uninstall by bootstrapping Action Scheduler when no other plugin has loaded it. [#68527](https://github.com/woocommerce/woocommerce/pull/68527)
* Fix - Escape product titles in the dashboard top-seller report and correct output annotations. [#68160](https://github.com/woocommerce/woocommerce/pull/68160)
* Fix - Escape settings field attributes and currency symbols in legacy report scripts. [#68209](https://github.com/woocommerce/woocommerce/pull/68209)
* Fix - Exclude password-protected product reviews from the Store API [#68375](https://github.com/woocommerce/woocommerce/pull/68375)
* Fix - Exclude payment settings from Blueprint exports and clarify this in the export interface. [#67941](https://github.com/woocommerce/woocommerce/pull/67941)
* Fix - Exclude refunds of never-paid or never-completed orders from Revenue analytics filtered by paid or completed date, so manually refunded failed orders no longer produce phantom returns, negative net sales and uncollected tax amounts. Applies to refunds synced after this fix; previously imported rows update on re-sync or historical data re-import. [#67710](https://github.com/woocommerce/woocommerce/pull/67710)
* Fix - Expose the Customer Stock Notifications settings through the REST settings API by registering them outside the admin context. [#68464](https://github.com/woocommerce/woocommerce/pull/68464)
* Fix - Fade the whole button rather than only its label when a cart or checkout button is disabled, and stop disabled outlined buttons from taking on the dark hover styling. [#67738](https://github.com/woocommerce/woocommerce/pull/67738)
* Fix - Fix a fatal error generating receipts for orders with a deleted variation parent. [#68369](https://github.com/woocommerce/woocommerce/pull/68369)
* Fix - Fix a fatal error on the order received page when the order key is passed as an array, and replace legacy WPCS suppression comments in the settings save handler, thanks page, conditional tag helpers and terms template with exact PHPCS annotations. [#68266](https://github.com/woocommerce/woocommerce/pull/68266)
* Fix - Fix a fatal error when structured data is requested without a type filter on a store whose markup uses multiple schema types. [#68740](https://github.com/woocommerce/woocommerce/pull/68740)
* Fix - Fix a long order origin overflowing the Order attribution metabox. The origin now takes the full width of the metabox and is truncated to one line while the details are collapsed, and the details toggle has moved to the bottom of the metabox. [#67877](https://github.com/woocommerce/woocommerce/pull/67877)
* Fix - Fix Analytics Revenue table rows keeping the first dataset loaded when an extension report filter changes. [#68052](https://github.com/woocommerce/woocommerce/pull/68052)
* Fix - Fix Analytics settings so a failed save can be retried and no longer reports an error after it succeeds. [#67868](https://github.com/woocommerce/woocommerce/pull/67868)
* Fix - Fix a shopper being blocked in the checkout shortcode by a stock hold created by their own cancelled order. [#67471](https://github.com/woocommerce/woocommerce/pull/67471)
* Fix - Fix Back in Stock duplicate signup detection: match guest and logged-in signups with the same email, ignore cancelled and sent notifications, and keep signups for different variation attributes separate. [#68728](https://github.com/woocommerce/woocommerce/pull/68728)
* Fix - Fix cache invalidation no-ops when transient versions refresh within the same second. [#64604](https://github.com/woocommerce/woocommerce/pull/64604)
* Fix - Fix Catalog sorting label vertical alignment [#68024](https://github.com/woocommerce/woocommerce/pull/68024)
* Fix - Fix coupons applied in the order editor ignoring manually edited line item totals. [#67979](https://github.com/woocommerce/woocommerce/pull/67979)
* Fix - Fix Customers report aggregates and numeric filters for refunds and parented orders. [#67713](https://github.com/woocommerce/woocommerce/pull/67713)
* Fix - Fix date filtering of the HPOS orders list via links from Analytics reports (order_date_type and day-granularity date params were ignored). [#67625](https://github.com/woocommerce/woocommerce/pull/67625)
* Fix - Fix default product category row losing Name column and actions on WordPress 7.1. [#68418](https://github.com/woocommerce/woocommerce/pull/68418)
* Fix - Fix product archive pagination links to the first page. [#68116](https://github.com/woocommerce/woocommerce/pull/68116)
* Fix - Fix product CSV importer failing between steps when the file path contains special characters such as '+', and show a clear error when the CSV file cannot be opened. [#66986](https://github.com/woocommerce/woocommerce/pull/66986)
* Fix - Fix Product Filters on a Shop page set as the static front page. [#67791](https://github.com/woocommerce/woocommerce/pull/67791)
* Fix - Fix product list filters and sorting breaking when an extension joins the wc_product_meta_lookup table under its own alias. [#68094](https://github.com/woocommerce/woocommerce/pull/68094)
* Fix - Fix product permalink settings radio buttons reverting to "Custom base" after saving Default, Shop base, or Shop base with category. [#67346](https://github.com/woocommerce/woocommerce/pull/67346)
* Fix - Fix reversed pagination arrows on Analytics report tables in RTL locales [#67724](https://github.com/woocommerce/woocommerce/pull/67724)
* Fix - Fix RTL currency symbols not respecting the currency position setting in the Checkout blocks [#68744](https://github.com/woocommerce/woocommerce/pull/68744)
* Fix - Fix settings groups being registered twice, and settings pages or email classes registered from admin_init callbacks being dropped. [#67718](https://github.com/woocommerce/woocommerce/pull/67718)
* Fix - Fix the "log in" link in the stock notifications account-required notice pointing to /my-account/my-account/ instead of the My Account page. [#68782](https://github.com/woocommerce/woocommerce/pull/68782)
* Fix - Fix the Analytics date range label showing a garbled date in languages whose month names contain digits, such as Japanese. [#67804](https://github.com/woocommerce/woocommerce/pull/67804)
* Fix - Fix the back-in-stock notification email CTA dropping the selected "Any" attribute from the product link. [#68355](https://github.com/woocommerce/woocommerce/pull/68355)
* Fix - Fix the block email editor loading in a broken state when a plugin (e.g. Yoast SEO Premium) calls WP_Screen::get() from admin_enqueue_scripts, re-entering the replace_editor filter mid-render [#68150](https://github.com/woocommerce/woocommerce/pull/68150)
* Fix - Fix the Create shipping label button by showing a completion notice and a Reload page button after WooCommerce Shipping is installed and activated. [#67895](https://github.com/woocommerce/woocommerce/pull/67895)
* Fix - Fix the last_quarter end date in TimeInterval::get_timeframe_dates(), which used an invalid September 31 and rolled over to October 1, widening the quarter by a day. [#67787](https://github.com/woocommerce/woocommerce/pull/67787)
* Fix - Fix the oversized gap between the two buttons on the core profiler welcome screen at mobile widths. [#67729](https://github.com/woocommerce/woocommerce/pull/67729)
* Fix - Fix the PayPal API credentials settings link. [#68137](https://github.com/woocommerce/woocommerce/pull/68137)
* Fix - Fix the product short description editor becoming blank after moving its metabox. [#68433](https://github.com/woocommerce/woocommerce/pull/68433)
* Fix - Fix the Sale price dates help tip rendering below the Cancel link instead of next to its label in the product editor. [#67500](https://github.com/woocommerce/woocommerce/pull/67500)
* Fix - Fix the shipping method label's for attribute so it matches the input ID when a shipping package uses a non-numeric key. [#68020](https://github.com/woocommerce/woocommerce/pull/68020)
* Fix - Fix the shortcode checkout dropping every other field in the order fieldset when order notes are disabled, which also left a required field there blocking checkout with no way to fill it in. [#68169](https://github.com/woocommerce/woocommerce/pull/68169)
* Fix - Fix Variation Selector attribute rows being unselectable, and colliding with each other, for custom (non-taxonomy) product attributes in the editor. [#68198](https://github.com/woocommerce/woocommerce/pull/68198)
* Fix - Flush product count cache on plugin (de)activation so custom product statuses appear immediately. [#68734](https://github.com/woocommerce/woocommerce/pull/68734)
* Fix - Flush the order count cache when a plugin is activated or deactivated, so newly registered order statuses show up in the Orders list right away. [#68114](https://github.com/woocommerce/woocommerce/pull/68114)
* Fix - Handle read errors while streaming product downloads. [#67945](https://github.com/woocommerce/woocommerce/pull/67945)
* Fix - Harden the Back in Stock Notifications feature gate: honor the WOOCOMMERCE_BIS_ALPHA_ENABLED constant until the option migration runs, fail soft in NotificationQuery when the feature is off, make SignupRateLimiter static so SignupService::init() keeps its three-argument signature, and deprecate StockNotifications::init_hooks() in favor of maybe_init_services(). [#68771](https://github.com/woocommerce/woocommerce/pull/68771)
* Fix - Hide product and variation descriptions until the product password is entered. [#68371](https://github.com/woocommerce/woocommerce/pull/68371)
* Fix - Hide the postcode field and make the state optional for Qatar at checkout. [#68366](https://github.com/woocommerce/woocommerce/pull/68366)
* Fix - Hide the rating block on in-app Marketplace product cards when a product has no rating [#67882](https://github.com/woocommerce/woocommerce/pull/67882)
* Fix - Honor the Term ID sort order for product attribute terms and variation dropdowns. [#68517](https://github.com/woocommerce/woocommerce/pull/68517)
* Fix - Ignore array values for the analytics report export filename instead of raising a PHP warning. [#68293](https://github.com/woocommerce/woocommerce/pull/68293)
* Fix - Include selected "Any" variation values in classic cart and checkout displays and in new order item names, and stop variation values already shown in an item name from being repeated as cart or order metadata, including on existing orders. [#67527](https://github.com/woocommerce/woocommerce/pull/67527)
* Fix - Include WooCommerce user fields in currentUserData when the REST API has not been initialized. [#68319](https://github.com/woocommerce/woocommerce/pull/68319)
* Fix - Initialize new orders with the store's tax entry mode, and preserve saved order values when the store setting changes. [#67926](https://github.com/woocommerce/woocommerce/pull/67926)
* Fix - Internationalization: use the singular form for the variation report order count. [#67662](https://github.com/woocommerce/woocommerce/pull/67662)
* Fix - Interpolate trusted order table names directly instead of using the `%i` placeholder in the order data stores, list table, customer history meta box, and orders REST query, so these queries stay valid on database layers that run on a supported WordPress version but don't implement `%i`. [#66374](https://github.com/woocommerce/woocommerce/pull/66374)
* Fix - Interpolate trusted session table names directly instead of using the `%i` placeholder, so session queries stay valid on database layers that run on a supported WordPress version but don't implement `%i`. [#66372](https://github.com/woocommerce/woocommerce/pull/66372)
* Fix - Invalidate cached product terms when their taxonomy terms are reordered. [#67829](https://github.com/woocommerce/woocommerce/pull/67829)
* Fix - Keep an order on the Analytics failed imports list when its tax lookup rows could not be written, so a retry that fails again stays visible instead of reporting success. [#67896](https://github.com/woocommerce/woocommerce/pull/67896)
* Fix - Keep emailed Analytics report exports downloadable for a week instead of deleting them on the first request. [#68312](https://github.com/woocommerce/woocommerce/pull/68312)
* Fix - Keep other packages' shipping selections when one package's selection fails, and leave the rejected rate unselected so the shopper can retry it. [#68142](https://github.com/woocommerce/woocommerce/pull/68142)
* Fix - Keep product responses, admin variation screens and CSV exports working after one of a product's global attributes is deleted. [#68567](https://github.com/woocommerce/woocommerce/pull/68567)
* Fix - Keep refund rows' returning_customer NULL when a customer's first order is recalculated, so Analytics > Orders keeps reporting refunds with the refunded order's customer type [#67638](https://github.com/woocommerce/woocommerce/pull/67638)
* Fix - Keep Shop subpage rewrite rules in sync with the product permalink base. [#68089](https://github.com/woocommerce/woocommerce/pull/68089)
* Fix - Keep the Cart and Checkout incompatible extensions notices (editor sidebar and storefront banner) dismissed when an incompatible extension or payment gateway is disabled, and warn again only when something the merchant has not yet acknowledged becomes incompatible. Dismissals are now stored per site. Existing dismissals carry over on single-site installs but not on multisite installs, where notices may need to be dismissed again after upgrading. [#67910](https://github.com/woocommerce/woocommerce/pull/67910)
* Fix - Keep the dir and translate attributes wc_price() puts on the currency symbol when Product Elements, Wishlist, and Save for later swap price_html client-side, so RTL-script currency symbols keep honoring the currency position setting after hydration. [#68006](https://github.com/woocommerce/woocommerce/pull/68006)
* Fix - Keep the Settings UI Save button disabled when a visibility toggle restores the original values. [#67848](https://github.com/woocommerce/woocommerce/pull/67848)
* Fix - Left-align the action buttons on the Analytics settings page (Import historical data, and Reset defaults / Save settings) with the rest of the page content on wide viewports. [#67680](https://github.com/woocommerce/woocommerce/pull/67680)
* Fix - Limit the Recently Viewed Products widget query to the 15 most recent product IDs from the cookie. This prevents oversized cookies from increasing query workload while preserving normal browsing behavior. [#67825](https://github.com/woocommerce/woocommerce/pull/67825)
* Fix - Load the matching DataForm 17.1 stylesheet only for successfully resolved Settings UI pages. [#67369](https://github.com/woocommerce/woocommerce/pull/67369)
* Fix - Make sequential coupons with equal priorities calculate in application order. [#68030](https://github.com/woocommerce/woocommerce/pull/68030)
* Fix - Make the date_paid/date_completed day filter on the legacy orders list table respect the site timezone, so the listed orders match the requested local day. [#67134](https://github.com/woocommerce/woocommerce/pull/67134)
* Fix - Make the WooCommerce Admin header non-sticky on all pages. [#67379](https://github.com/woocommerce/woocommerce/pull/67379)
* Fix - Normalize checkbox description tooltip markup while preserving supported formatting. [#68200](https://github.com/woocommerce/woocommerce/pull/68200)
* Fix - Normalize customer emails in Back in Stock Notifications so signups and lookups match regardless of letter case, rewrite existing rows in the same form, and fix lookups for emails containing a single quote. [#68386](https://github.com/woocommerce/woocommerce/pull/68386)
* Fix - Normalize locale-formatted coupon minimum/maximum spend amounts before validating and storing them in WC_Coupon::set_minimum_amount() and WC_Coupon::set_maximum_amount(). [#68251](https://github.com/woocommerce/woocommerce/pull/68251)
* Fix - Only show "Free!" for Free Shipping in order emails, so zero cost Flat Rate and Local Pickup methods keep their titles, and add the woocommerce_email_order_shipping_show_free_label filter to override it [#68436](https://github.com/woocommerce/woocommerce/pull/68436)
* Fix - Pass product image IDs to WordPress attachment functions as integers. [#68447](https://github.com/woocommerce/woocommerce/pull/68447)
* Fix - Pass the include/exclude parameters through to the downloadable product search so the Grant access field on the order edit screen no longer lists products that are already selected. [#68166](https://github.com/woocommerce/woocommerce/pull/68166)
* Fix - Plugin install and activation failure notices now name the plugin once and state the reason WordPress reported (for example an unmet PHP version) instead of generic advice. [#68087](https://github.com/woocommerce/woocommerce/pull/68087)
* Fix - Prepare order-item deletion queries with an integer placeholder. [#67932](https://github.com/woocommerce/woocommerce/pull/67932)
* Fix - Preserve classic checkout order attribution when duplicate input groups exist outside the checkout form. [#67711](https://github.com/woocommerce/woocommerce/pull/67711)
* Fix - Preserve classic setting names, values, and visibility rules while canonicalizing typed Settings UI fields. [#67335](https://github.com/woocommerce/woocommerce/pull/67335)
* Fix - Preserve product data when saving a new product without a name in the classic editor by using the default “(no title)” name. [#68427](https://github.com/woocommerce/woocommerce/pull/68427)
* Fix - Preserve the current customer's login after a password reset without logging in a different customer. [#68387](https://github.com/woocommerce/woocommerce/pull/68387)
* Fix - Preserve third party attachment metadata keys when regenerating product images. [#67458](https://github.com/woocommerce/woocommerce/pull/67458)
* Fix - Preserve variation sale prices when a bulk decrease from regular prices is empty or invalid. [#68534](https://github.com/woocommerce/woocommerce/pull/68534)
* Fix - Prevent a false order cancellation error after shoppers refresh the return page. [#68141](https://github.com/woocommerce/woocommerce/pull/68141)
* Fix - Prevent bulk variation edits from racing unsaved variation changes. [#67943](https://github.com/woocommerce/woocommerce/pull/67943)
* Fix - Prevent duplicate customer entries in Analytics after manually creating guest orders without an email address. [#67722](https://github.com/woocommerce/woocommerce/pull/67722)
* Fix - Prevent duplicate Mini-Cart markup when a template part references a block pattern. [#67431](https://github.com/woocommerce/woocommerce/pull/67431)
* Fix - Prevent endpoint rewrite flushes from persisting incomplete rules during WordPress installation requests. [#67942](https://github.com/woocommerce/woocommerce/pull/67942)
* Fix - Prevent failed Store API batch requests from clearing the shopper's saved cart. [#68765](https://github.com/woocommerce/woocommerce/pull/68765)
* Fix - Prevent fatal errors when product attribute lookup updates run after a product is deleted. [#68100](https://github.com/woocommerce/woocommerce/pull/68100)
* Fix - Prevent featured image metadata loss when a WooCommerce image size is not registered. [#68008](https://github.com/woocommerce/woocommerce/pull/68008)
* Fix - Prevent invalid Product Filters block spacing values from being rendered. [#67974](https://github.com/woocommerce/woocommerce/pull/67974)
* Fix - Prevent Mini-Cart item removals from being cancelled when navigating away. [#68165](https://github.com/woocommerce/woocommerce/pull/68165)
* Fix - Prevent non-error checkout update notices from triggering field validation. [#68360](https://github.com/woocommerce/woocommerce/pull/68360)
* Fix - Prevent non-scalar cart item data provided by extensions from causing a fatal error when rendering the classic cart. [#67781](https://github.com/woocommerce/woocommerce/pull/67781)
* Fix - Prevent numbers from being saved as the thousand or decimal separator in currency settings. [#64248](https://github.com/woocommerce/woocommerce/pull/64248)
* Fix - Prevent price amounts from wrapping onto multiple lines in admin list tables when a space is used as the thousands separator. [#68115](https://github.com/woocommerce/woocommerce/pull/68115)
* Fix - Prevent product editor content from showing through the sticky editor tools. [#67382](https://github.com/woocommerce/woocommerce/pull/67382)
* Fix - Prevent recursive feature definition initialization when hooks check WooCommerce features during translation or option callbacks. [#68417](https://github.com/woocommerce/woocommerce/pull/68417)
* Fix - Prevent recursive product description formatting between the Product Description block and Store API product schema. [#67908](https://github.com/woocommerce/woocommerce/pull/67908)
* Fix - Prevent REST product update and duplicate requests from fatally erroring when given a variation ID, and preserve the stored product type instead of converting the product to simple when the requested type names no known class. [#67182](https://github.com/woocommerce/woocommerce/pull/67182)
* Fix - Prevent the Orders Analytics CSV export from logging warnings and writing a lone space when an order has no customer name. [#68393](https://github.com/woocommerce/woocommerce/pull/68393)
* Fix - Prevent Variation Selector placeholders from querying the Store API, which could break the editor preview or display unrelated attribute terms. [#68188](https://github.com/woocommerce/woocommerce/pull/68188)
* Fix - Prevent WP-CLI runs that skip the active theme from consuming queued rewrite flushes and dropping theme-registered rewrite rules. [#68146](https://github.com/woocommerce/woocommerce/pull/68146)
* Fix - Prioritize product title matches in default admin searches while preserving broad matches and explicit sorting. [#67508](https://github.com/woocommerce/woocommerce/pull/67508)
* Fix - Product review ratings posted as a fraction below one, such as 0.5, are no longer stored as a rating of 0. [#68268](https://github.com/woocommerce/woocommerce/pull/68268)
* Fix - Properly sanitize product category display settings before storage. [#67893](https://github.com/woocommerce/woocommerce/pull/67893)
* Fix - Recalculate shipping options as soon as the country is changed at checkout, instead of keeping the previous country's options until the rest of the address is filled in. [#68364](https://github.com/woocommerce/woocommerce/pull/68364)
* Fix - Redirect missing WooCommerce Admin task routes to Home instead of leaving a blank screen. [#67362](https://github.com/woocommerce/woocommerce/pull/67362)
* Fix - Refresh Analytics reports after saving report-affecting settings. [#67578](https://github.com/woocommerce/woocommerce/pull/67578)
* Fix - Refresh category, tag, and brand counts after an out-of-stock product visibility term is removed. [#67669](https://github.com/woocommerce/woocommerce/pull/67669)
* Fix - Refresh country, state, and continent names when the active locale changes. [#68381](https://github.com/woocommerce/woocommerce/pull/68381)
* Fix - Regenerate the missing combined translation file for WooCommerce Admin scripts on demand, so Analytics and other admin screens no longer show untranslated strings when the file is absent. [#67548](https://github.com/woocommerce/woocommerce/pull/67548)
* Fix - Register order withdrawal endpoint hooks only when the feature is enabled. [#68419](https://github.com/woocommerce/woocommerce/pull/68419)
* Fix - Reject array values for the wc-auth handshake parameters so they no longer cause a fatal error, and replace legacy WPCS suppression comments in the auth, REST authentication and PayPal IPN handlers with exact PHPCS annotations. [#68270](https://github.com/woocommerce/woocommerce/pull/68270)
* Fix - Remove empty spacing from product reviews when avatars are disabled. [#67600](https://github.com/woocommerce/woocommerce/pull/67600)
* Fix - Remove the stray blue box drawn around the selected Marketplace tab on WordPress 7.1. [#68078](https://github.com/woocommerce/woocommerce/pull/68078)
* Fix - Render Cart and Checkout notices with the same list markup whether there is one notice or several, and expose each notice's id as `data-id` on its list item. [#67635](https://github.com/woocommerce/woocommerce/pull/67635)
* Fix - Render the Analytics dashboard and repair the stored preference when the woocommerce_admin_dashboard_sections user meta is corrupted. [#67888](https://github.com/woocommerce/woocommerce/pull/67888)
* Fix - Report a customer's first order as new in Analytics regardless of the order in which its orders and refunds are imported [#67664](https://github.com/woocommerce/woocommerce/pull/67664)
* Fix - Report inherited password protection correctly for product variations in Store API responses. [#68431](https://github.com/woocommerce/woocommerce/pull/68431)
* Fix - Report nothing instead of everything in Analytics when the category and product filters have no product in common. An empty intersection was indistinguishable from an absent product filter, so both filters were dropped. Affects the products, products/stats, variations, variations/stats and orders/stats report endpoints. [#67626](https://github.com/woocommerce/woocommerce/pull/67626)
* Fix - Respect excluded order statuses in Analytics reports when a custom status slug exceeds the 20-character storage limit [#67694](https://github.com/woocommerce/woocommerce/pull/67694)
* Fix - Respect excluded order statuses in the Customer History metabox when a custom status slug exceeds the 20-character storage limit [#67700](https://github.com/woocommerce/woocommerce/pull/67700)
* Fix - Restore order notes when an HPOS order is untrashed, instead of leaving them permanently hidden. [#68206](https://github.com/woocommerce/woocommerce/pull/68206)
* Fix - Restore pending stock holds to prevent multiple payable orders from reserving the same stock. [#67931](https://github.com/woocommerce/woocommerce/pull/67931)
* Fix - Restore the cart context after hydrating a Store API route, so a front-end page render no longer inherits the store-api cart context and its shipping behaviour. [#67312](https://github.com/woocommerce/woocommerce/pull/67312)
* Fix - Restore the full Recently Viewed Products cookie ID list for widget query filters to preserve extension compatibility. [#67854](https://github.com/woocommerce/woocommerce/pull/67854)
* Fix - Restore the real image dimensions in the Featured Product and Featured Category image editor, which opened at a square default after WordPress 6.2 merged the image editing provider into the editor component. [#68189](https://github.com/woocommerce/woocommerce/pull/68189)
* Fix - Restore the table styles on the Settings > Emails listing. [#68498](https://github.com/woocommerce/woocommerce/pull/68498)
* Fix - Restore WordPress focus and modal styling, identify current navigation links, and preserve other plugins' navigation warnings in the experimental Settings UI. [#66867](https://github.com/woocommerce/woocommerce/pull/66867)
* Fix - Retry failed usage-tracking snapshot deliveries on the next scheduled run instead of silently dropping them for a week. [#68120](https://github.com/woocommerce/woocommerce/pull/68120)
* Fix - Return a Store API error response instead of a fatal error when the cart cannot be loaded from the session. [#67769](https://github.com/woocommerce/woocommerce/pull/67769)
* Fix - Return HTTP 429 instead of 400 when Store API requests exceed the rate limit. [#68066](https://github.com/woocommerce/woocommerce/pull/68066)
* Fix - Return is_super_admin and woocommerce_meta fields in users REST endpoint only for requests in 'edit' context, and only when requesting own user or with 'list_users' capability. [#68380](https://github.com/woocommerce/woocommerce/pull/68380)
* Fix - Run the product title in the single product reviews heading through wp_kses_post and replace legacy WPCS output suppressions with documented hooks and exact PHPCS annotations. [#68301](https://github.com/woocommerce/woocommerce/pull/68301)
* Fix - Sanitize the stock notifications My Account endpoint slug when saved from settings. [#68475](https://github.com/woocommerce/woocommerce/pull/68475)
* Fix - Saved for Later declares its auto-injection after the Cart block via block.json blockHooks, injects wherever the Cart block is used, stays registered while the feature is off to prevent an unsupported-block notice, and allows only one instance per page [#65977](https://github.com/woocommerce/woocommerce/pull/65977)
* Fix - Scope the stale task redirect to the Home screen and skip it when task lists have not loaded, so failed fetches or stray task params no longer navigate away. [#67811](https://github.com/woocommerce/woocommerce/pull/67811)
* Fix - Set tax_status to 'none' when creating fee order items from non-taxable cart fees. [#66302](https://github.com/woocommerce/woocommerce/pull/66302)
* Fix - Show a returning customer's saved country as a disabled option in the checkout country dropdown when the store no longer sells or ships to that country [#68056](https://github.com/woocommerce/woocommerce/pull/68056)
* Fix - Show each guest order's billing name in Analytics when orders share an email address. [#68311](https://github.com/woocommerce/woocommerce/pull/68311)
* Fix - Show every matching product when a search matches more than 100 products, in the Analytics > Products report and in the single category view of the Analytics > Categories report. The products report endpoints now accept a `search` argument and resolve the search themselves. [#67626](https://github.com/woocommerce/woocommerce/pull/67626)
* Fix - Show subscription expiry dates in the store's own date format and time zone, rather than an English-only ordinal on the UTC date. [#68916](https://github.com/woocommerce/woocommerce/pull/68916)
* Fix - Show the browser validation message for negative order item quantities in the admin order editor instead of silently failing, and reject them server-side in the order items AJAX endpoints. [#67921](https://github.com/woocommerce/woocommerce/pull/67921)
* Fix - Skip required validation for hidden address fields on the classic checkout and My Account address form. [#67706](https://github.com/woocommerce/woocommerce/pull/67706)
* Fix - Stock notifications: return the customer to the page they cancelled a notification from, instead of the first page of the list. [#64439](https://github.com/woocommerce/woocommerce/pull/64439)
* Fix - Stop attributing refunds to user #1 when no user is logged in. refunded_by is now 0 in REST v1-v3 and null in v4, and the admin labels these refunds as System. [#68428](https://github.com/woocommerce/woocommerce/pull/68428)
* Fix - Stop locale filters that read country, state, or continent data from recursing when geographical data is looked up. [#68573](https://github.com/woocommerce/woocommerce/pull/68573)
* Fix - Stop rebuilding a WC Tracker snapshot on every daily run when building it fails. [#68225](https://github.com/woocommerce/woocommerce/pull/68225)
* Fix - Stop the Back in Stock form from rendering inside the Add to Cart + Options block, which forced the block into a legacy HTML form. [#68385](https://github.com/woocommerce/woocommerce/pull/68385)
* Fix - Stop the daily scheduled-sales cron reprocessing every completed scheduled sale as both a starting and an ending sale. Developer note: on a store whose only matches were completed sales, all four of wc_before/after_products_starting_sales and wc_before/after_products_ending_sales stop firing rather than firing with a shorter list, and the daily `wc_products_onsale` transient delete and product transient-version bump stop with them. All of these still run whenever a sale genuinely starts or ends. [#67958](https://github.com/woocommerce/woocommerce/pull/67958)
* Fix - Stop the virtual keyboard from opening on the core profiler platform selector on touch devices. [#68258](https://github.com/woocommerce/woocommerce/pull/68258)
* Fix - Stop wrapping block checkout autofill hints in a billing/shipping prefix the HTML autofill grammar rejects. Browsers offer saved values on the email field again, and a field an extension set to "off" stays opted out [#68394](https://github.com/woocommerce/woocommerce/pull/68394)
* Fix - Store API: the cart items endpoint now publishes and validates extensions registered against `cart-item`, rather than those registered against `product`. The order items schema, which isn't extendable, no longer advertises `product` extensions it never returned. [#68357](https://github.com/woocommerce/woocommerce/pull/68357)
* Fix - Store API: the order endpoint no longer reports a hidden metadata row's ID on an item_data entry an extension appended. That entry now correctly reports a null `id`. [#68390](https://github.com/woocommerce/woocommerce/pull/68390)
* Fix - Store API: the order endpoint now returns item_data as a list, matching the cart endpoint and its own documented schema. Each entry carries its metadata row ID in a new `id` property, null when an extension added the entry without a stored row. [#68161](https://github.com/woocommerce/woocommerce/pull/68161)
* Fix - Store one wc_order_tax_lookup row per tax order item, so Analytics tax reports keep every tax line of an order, including lines that share a tax rate id, and drop rows for tax lines that have been removed. [#67896](https://github.com/woocommerce/woocommerce/pull/67896)
* Fix - Store the default Cart page empty cart headings as block pattern references so they follow the site language instead of the install language, and restore the missing "Browse store" link. [#67651](https://github.com/woocommerce/woocommerce/pull/67651)
* Fix - Strip invisible Unicode characters from phone numbers so pasted numbers are not rejected over characters the customer cannot see, store the cleaned number from the Checkout block and the My Account address form, and stop the classic checkout marking the field invalid. wc_remove_non_displayable_chars() now removes every Unicode default-ignorable code point, including the word joiner (U+2060) and the variation selectors it used to keep. [#68164](https://github.com/woocommerce/woocommerce/pull/68164)
* Fix - Surface WooCommerce.com API failures on My Subscriptions instead of rendering an empty subscription list, including the rate-limit message for the whole backoff window after an HTTP 429. [#67832](https://github.com/woocommerce/woocommerce/pull/67832)
* Fix - Three small Marketplace fixes: the clear button in the search field only shows when there is text to clear and resets the results, search results get a "Results for" heading, and the WooCommerce.com account menu link reads "Your WooCommerce.com account" and points at My account. [#68429](https://github.com/woocommerce/woocommerce/pull/68429)
* Fix - Treat array-valued order keys as invalid on the order pay, cancel and PayPal return paths instead of raising a PHP error. [#68307](https://github.com/woocommerce/woocommerce/pull/68307)
* Fix - Treat product download links whose query arguments arrive as arrays as invalid links instead of letting them raise a PHP error. [#68265](https://github.com/woocommerce/woocommerce/pull/68265)
* Fix - Unify postcode validation rules used by the server and Checkout blocks. [#67780](https://github.com/woocommerce/woocommerce/pull/67780)
* Fix - Unregister a global product attribute's runtime taxonomy when the attribute is deleted so its slug can be reused in the same request. [#68212](https://github.com/woocommerce/woocommerce/pull/68212)
* Fix - Update mobile app QR login session handling. [#68540](https://github.com/woocommerce/woocommerce/pull/68540)
* Fix - Update product rating aggregates when REST API reviews are created, re-rated, or moved between products in wc/v1, wc/v2, and wc/v3. [#67778](https://github.com/woocommerce/woocommerce/pull/67778)
* Fix - Update the Import historical data description in Analytics settings to stop referencing activating WooCommerce Admin. [#67723](https://github.com/woocommerce/woocommerce/pull/67723)
* Fix - Update the Mastercard payment-card label to use the brand's current spelling. [#67698](https://github.com/woocommerce/woocommerce/pull/67698)
* Fix - Use the canonical customer effort score submit label property for inline survey dispatches. [#68222](https://github.com/woocommerce/woocommerce/pull/68222)
* Fix - Use the site timezone instead of the server timezone for the default reference date in TimeInterval::get_timeframe_dates(), so remote spec timeframe rules select the correct period near period boundaries. [#67827](https://github.com/woocommerce/woocommerce/pull/67827)
* Fix - Validate minimum spend amount does not exceed maximum spend amount in WC_Coupon::set_minimum_amount(). [#67703](https://github.com/woocommerce/woocommerce/pull/67703)
* Fix - Validate post-action webhooks using the affected post ID instead of request-global post type state. [#68208](https://github.com/woocommerce/woocommerce/pull/68208)
* Fix - Validate Settings UI schemas and script handles before mounting, with a complete classic fallback for server-side failures. [#67334](https://github.com/woocommerce/woocommerce/pull/67334)
* Fix - Variation gallery: stop persisting the inherited parent image on variation save, prefer variation-owned galleries on the storefront, and clean up previously frozen variation thumbnails. [#68389](https://github.com/woocommerce/woocommerce/pull/68389)
* Fix - Charge shipping in the classic checkout when an extension hides a required state or postcode field. [#69149](https://github.com/woocommerce/woocommerce/pull/69149)
* Fix - Fix a fatal error when saving Screen Options with Back in Stock Notifications enabled. [#68986](https://github.com/woocommerce/woocommerce/pull/68986)
* Fix - Fix PHP parse errors caused by unresolved conflicts in the Pattern Fetcher backport. [#69147](https://github.com/woocommerce/woocommerce/pull/69147)
* Fix - Include reviews left on the Review Order page in the product's star rating and rating count. [#69105](https://github.com/woocommerce/woocommerce/pull/69105)
* Fix - Keep checkout from marking fields invalid when an extension hides error notices but still shows other notices. [#69128](https://github.com/woocommerce/woocommerce/pull/69128)
* Fix - Prevent variation gallery rendering from recursively requesting variation data. [#68964](https://github.com/woocommerce/woocommerce/pull/68964)
* Fix - Restore support for other file types (e.g. PDFs) in product galleries. [#68992](https://github.com/woocommerce/woocommerce/pull/68992)
* Fix - Show product blocks, such as Product Collection, in sent emails built with the block email editor. [#69107](https://github.com/woocommerce/woocommerce/pull/69107)
* Fix - Treat a shipping address missing required fields as incomplete, even when an extension changes the default address settings. [#69127](https://github.com/woocommerce/woocommerce/pull/69127)
* Fix - Fixed a fatal error in persistent product status counters during background revision save in the admin when a null value was dispatched instead of a post object. [#69234](https://github.com/woocommerce/woocommerce/pull/69234)
* Fix - Keep enforcing a coupon's minimum spend when its saved maximum spend is lower, as earlier versions did. [#69242](https://github.com/woocommerce/woocommerce/pull/69242)
* Fix - Keep price separators as plain text in the Store API and block settings. [#69244](https://github.com/woocommerce/woocommerce/pull/69244)
* Fix - Show each KOMOJU payment method's own name and description on the Payments settings page, instead of identical rows. [#69175](https://github.com/woocommerce/woocommerce/pull/69175)
* Fix - Update the classic checkout totals after an address change when an extension hides a required address field. [#69333](https://github.com/woocommerce/woocommerce/pull/69333)
* Fix - Ensure fulfillments REST API item requests operate on the fulfillment identified in the request URL. [#69534](https://github.com/woocommerce/woocommerce/pull/69534)
* Fix - Prevent Cc/Bcc recipients from being configured for emails that carry a password reset key or a one-time verification link. [#69537](https://github.com/woocommerce/woocommerce/pull/69537)
* Fix - Prevent fatal errors in the batch processing controller when another plugin loads an Action Scheduler older than 3.3.0, by falling back to `as_next_scheduled_action()` when `as_has_scheduled_action()` is missing. [#69415](https://github.com/woocommerce/woocommerce/pull/69415)
* Fix - Prevent shop managers from editing users who have additional roles that cannot be edited by shop managers. [#69533](https://github.com/woocommerce/woocommerce/pull/69533)
* Fix - Remove non-allowlisted query parameters and fragments from analytics document location and referrer properties. [#69536](https://github.com/woocommerce/woocommerce/pull/69536)
* Fix - Require network super admin rights to import Blueprints on multisite. [#69529](https://github.com/woocommerce/woocommerce/pull/69529)
* Fix - Revert recent changes to how conditional checkout field rules handle missing values. [#69530](https://github.com/woocommerce/woocommerce/pull/69530)
* Fix - Update REST API key nonce handling. [#69532](https://github.com/woocommerce/woocommerce/pull/69532)
* Add - Add an "Automatic updates" column to the My Subscriptions screen that turns auto-updates on or off for installed extensions and themes, and shows "Blocked" when they are on but something else stops the product updating [#68410](https://github.com/woocommerce/woocommerce/pull/68410)
* Add - Add an "Awaiting confirmation" section to the Stock notifications My Account tab, listing unconfirmed sign-ups with Resend email and Cancel actions above the active notifications table. [#68295](https://github.com/woocommerce/woocommerce/pull/68295)
* Add - Add an $orderby argument to wc_get_product_category_list() and order single-product meta categories by hierarchy. Stores on the stock single-product/meta.php template now render categories ancestor-first; return an empty string from woocommerce_product_meta_category_orderby to restore WordPress term-list order. [#67633](https://github.com/woocommerce/woocommerce/pull/67633)
* Add - Add an order-aware filter for failed order confirmation messages in classic and block renderers. [#68221](https://github.com/woocommerce/woocommerce/pull/68221)
* Add - Add a Role column to the Analytics > Customers report and its CSV export, showing each customer's WordPress role(s). [#67653](https://github.com/woocommerce/woocommerce/pull/67653)
* Add - Add a skip action for individual Things to do next tasks. [#66199](https://github.com/woocommerce/woocommerce/pull/66199)
* Add - Add a Stock notifications setting under Settings > Advanced > Account endpoints, so the My Account endpoint slug can be renamed or cleared to turn the page off. [#68291](https://github.com/woocommerce/woocommerce/pull/68291)
* Add - Add a Stock notifications tab to My Account, so customers can review the back-in-stock sign-ups they have made and cancel the ones they no longer want. [#64439](https://github.com/woocommerce/woocommerce/pull/64439)
* Add - Add a taxable amount column to the Analytics Taxes report, recording the net amount each tax rate applied to. [#68233](https://github.com/woocommerce/woocommerce/pull/68233)
* Add - Add a woocommerce_store_api_cart_item_quantity_validation filter so extensions can validate cart item quantity changes made via the Store API. [#67928](https://github.com/woocommerce/woocommerce/pull/67928)
* Add - Add billing and shipping phone columns to the Analytics Customers report, its REST API, and CSV export. [#67641](https://github.com/woocommerce/woocommerce/pull/67641)
* Add - Add configurable customer and merchant emails for order withdrawal requests. [#67799](https://github.com/woocommerce/woocommerce/pull/67799)
* Add - Add Elavon to payments extension suggestions. [#68923](https://github.com/woocommerce/woocommerce/pull/68923)
* Add - Add errored_coupon and errored_coupon_in_checkout JS events fired when a coupon fails to apply on the classic cart and checkout pages. [#66285](https://github.com/woocommerce/woocommerce/pull/66285)
* Add - Add inbox notice pointing merchants to the full refund data fix tool [#66265](https://github.com/woocommerce/woocommerce/pull/66265)
* Add - Add notices under WooCommerce.com extensions on the Plugins screen when the store isn't connected, the extension has no subscription, or its subscription has expired or is about to expire without auto-renew, and make the renew link renew that subscription rather than add the product to the cart [#68916](https://github.com/woocommerce/woocommerce/pull/68916)
* Add - Add Off, Mobile, and Always overlay modes to Product Filters block. [#67696](https://github.com/woocommerce/woocommerce/pull/67696)
* Add - Add rate-limit (HTTP 429) backoff for WooCommerce.com update-check and subscriptions API requests, respecting the Retry-After header. [#67004](https://github.com/woocommerce/woocommerce/pull/67004)
* Add - Add sticky positioning support to the Product Filters block. [#68256](https://github.com/woocommerce/woocommerce/pull/68256)
* Add - Add support for border and shadow styles to the Product Quantity block and also apply them to the Cart quantity selector [#68148](https://github.com/woocommerce/woocommerce/pull/68148)
* Add - Add support for border radius styles in the Product Quantity block [#68000](https://github.com/woocommerce/woocommerce/pull/68000)
* Add - Add support for border styles to the Product Image block [#68342](https://github.com/woocommerce/woocommerce/pull/68342)
* Add - Add support for text and background color styles in the Product Quantity block [#68040](https://github.com/woocommerce/woocommerce/pull/68040)
* Add - Add support for the `date` field type in the additional checkout fields API. [#68048](https://github.com/woocommerce/woocommerce/pull/68048)
* Add - Add support for typography, padding, and border radius styles to the Chips block [#68105](https://github.com/woocommerce/woocommerce/pull/68105)
* Add - Add the WIR franc (CHW) to the list of available store currencies. [#68442](https://github.com/woocommerce/woocommerce/pull/68442)
* Add - Add the `woocommerce_admin_report_server_side_search_item_types` JavaScript filter, so an integration that overrides an Analytics report route with a handler that does not read `search` can opt out of server-side search and keep receiving resolved item IDs. [#67626](https://github.com/woocommerce/woocommerce/pull/67626)
* Add - Add tracking for product sorting views and manual reordering. [#67782](https://github.com/woocommerce/woocommerce/pull/67782)
* Add - Add woocommerce_order_removed_coupon action hook to WC_Order::remove_coupon() for parity with WC_Cart and the existing woocommerce_order_applied_coupon hook. [#64361](https://github.com/woocommerce/woocommerce/pull/64361)
* Add - Add `min` and `max` options to `date` additional checkout fields, accepting an absolute date or an ISO 8601-2 duration relative to today such as `P1D` or `-P18Y`. [#68083](https://github.com/woocommerce/woocommerce/pull/68083)
* Add - Allow additional date fields in Checkout block to use JSON Schema in validation. [#68743](https://github.com/woocommerce/woocommerce/pull/68743)
* Add - Honor the WooCommerce.com `autoupdate` flag on plugin and theme updates, so a critical extension release can be installed automatically when the package is installable. Theme update items now also report their PHP requirement, so an automatic update is skipped on an incompatible PHP version. [#68068](https://github.com/woocommerce/woocommerce/pull/68068)
* Add - Introduce two new PHP filters, woocommerce_analytics_settings_default_excluded_order_statuses and woocommerce_analytics_settings_default_actionable_order_statuses, that let plugins change the default order statuses used by Analytics. The filters apply everywhere, not only to the boxes pre-checked on the Analytics Settings screen: on a store that has never saved these options they also change report totals, the order status enum returned by the reports REST controllers, the Activity Panel orders-to-fulfill count, and the Customer History box. [#66288](https://github.com/woocommerce/woocommerce/pull/66288)
* Add - Store API: add `raw_key` to cart item `item_data` so extensions can identify their own entries without matching a translated label. [#68388](https://github.com/woocommerce/woocommerce/pull/68388)
* Add - Use GTIN, UPC, EAN, or ISBN as the match key for existing product and variation CSV updates when ID and SKU are absent, and let a variation row identified only by one create a new variation. [#67940](https://github.com/woocommerce/woocommerce/pull/67940)
* Update - Analytics: search the Downloads report's advanced filter by customer name, username or email instead of username only. [#68139](https://github.com/woocommerce/woocommerce/pull/68139)
* Update - Deprecate the WC_Brands recount methods in favor of the shared term recount functions. [#67657](https://github.com/woocommerce/woocommerce/pull/67657)
* Update - Marketplace: report whether a product card shows the quality badge in the card click tracking event. [#68878](https://github.com/woocommerce/woocommerce/pull/68878)
* Update - Move the experimental dual API engine out of WooCommerce core into the WooCommerce Dual API plugin. [#68287](https://github.com/woocommerce/woocommerce/pull/68287)
* Update - Move the quality badge above the price on in-app marketplace cards (between the name and the price on compact cards), centre compact card content vertically, and pin the price row to the bottom of regular cards. [#68259](https://github.com/woocommerce/woocommerce/pull/68259)
* Update - Remove 20 WooCommerce patterns from the pattern library. [#68132](https://github.com/woocommerce/woocommerce/pull/68132)
* Update - Remove account creation from Back in Stock guest sign-ups and stop linking guest sign-ups to existing accounts by email. [#68762](https://github.com/woocommerce/woocommerce/pull/68762)
* Update - Remove Helio Pay as official and suggested payments extension. [#68928](https://github.com/woocommerce/woocommerce/pull/68928)
* Update - Remove the Activity panel from WooCommerce pages while keeping the Inbox on Woo Home. [#67719](https://github.com/woocommerce/woocommerce/pull/67719)
* Update - Remove the experimental abandoned cart recovery feature. [#67726](https://github.com/woocommerce/woocommerce/pull/67726)
* Update - Rename patterns category from WooCommerce to Shop [#67874](https://github.com/woocommerce/woocommerce/pull/67874)
* Update - Rename the default Payment method option on the order screen from "N/A" to "All methods available", so it says what the customer will actually be offered. [#68187](https://github.com/woocommerce/woocommerce/pull/68187)
* Update - Send the installed version of each WooCommerce.com extension in the update-check request. [#68068](https://github.com/woocommerce/woocommerce/pull/68068)
* Update - Update GoCardless, Airwallex, and Viva.com Smart Checkout payments extension suggestions. [#68927](https://github.com/woocommerce/woocommerce/pull/68927)
* Update - Update Mini-Cart drawer header style to use smaller font size and align it with the close button [#68432](https://github.com/woocommerce/woocommerce/pull/68432)
* Update - Update react-number-format from 4.9.3 to 5.4.5. [#67806](https://github.com/woocommerce/woocommerce/pull/67806)
* Update - Update the Action Scheduler package to version 4.1.0. [#67427](https://github.com/woocommerce/woocommerce/pull/67427)
* Update - Update the default Mini-Cart labels. [#67469](https://github.com/woocommerce/woocommerce/pull/67469)
* Update - Update the plugin directory product screenshots with the correct heading design. [#67581](https://github.com/woocommerce/woocommerce/pull/67581)
* Update - Update the vendored webonyx/graphql-php to 15.32.3 to limit parser recursion and field comparisons. [#67596](https://github.com/woocommerce/woocommerce/pull/67596)
* Dev - Add a PHPCS sniff that flags unguarded use of the `%i` SQL identifier placeholder in `wpdb::prepare()` calls, so trusted identifiers are interpolated directly (or `%i` is guarded with `wpdb::has_cap( 'identifier_placeholders' )`). [#66380](https://github.com/woocommerce/woocommerce/pull/66380)
* Dev - Add a regression test covering that the stock notifications My Account endpoint slug is sanitized when saved through the REST settings API. [#68542](https://github.com/woocommerce/woocommerce/pull/68542)
* Dev - Add per-country, per-section contract tests pinning the Payments settings partner recommendations, replacing two duplicated suggestion-count data providers and several per-country spot tests. [#67428](https://github.com/woocommerce/woocommerce/pull/67428)
* Dev - Add Playwright e2e coverage for the Back in Stock Notifications signup, email, and admin management flows. [#64482](https://github.com/woocommerce/woocommerce/pull/64482)
* Dev - Add unit tests for CSVUploadHelper. [#68636](https://github.com/woocommerce/woocommerce/pull/68636)
* Dev - Allow running the PHPUnit suite without the code hacker by setting the WC_TEST_DISABLE_CODE_HACKER environment variable, for tools such as mutation testers that need to own the file stream wrapper. [#68195](https://github.com/woocommerce/woocommerce/pull/68195)
* Dev - Always return a string from the price separator sanitize filters. [#68842](https://github.com/woocommerce/woocommerce/pull/68842)
* Dev - Clear the WC singleton cart, cart context, notice queue, and cached country locale in the base test case teardown, and remove the per-class cleanup that is now redundant. [#67437](https://github.com/woocommerce/woocommerce/pull/67437)
* Dev - Correct PHPCS slow query suppressions for empty product widget query containers. [#67823](https://github.com/woocommerce/woocommerce/pull/67823)
* Dev - Correct the Store API cart and checkout hook docblocks, and say where the local pickup tax filters are documented. [#68153](https://github.com/woocommerce/woocommerce/pull/68153)
* Dev - Declare the UUID dependency required by WooCommerce Admin builds. [#67822](https://github.com/woocommerce/woocommerce/pull/67822)
* Dev - Document intentional product, order, and payment markup contracts with exact coding-standard annotations. [#67947](https://github.com/woocommerce/woocommerce/pull/67947)
* Dev - Document intentional raw-data boundaries in the settings APIs with exact coding-standard annotations. [#67894](https://github.com/woocommerce/woocommerce/pull/67894)
* Dev - Document what Enums get_all() returns compared with the filterable wc_get_*() helpers, including the differing return shapes and the wc- prefix on order statuses. [#67889](https://github.com/woocommerce/woocommerce/pull/67889)
* Dev - Exclude the hook comment and hyphenated hook name phpcs sniffs for tests and remove the redundant inline ignores. [#67748](https://github.com/woocommerce/woocommerce/pull/67748)
* Dev - Fix the classic-assets stylelint setup to parse SCSS and clean up the violations it surfaced. Tooling and source-formatting only, no functional CSS changes. [#68072](https://github.com/woocommerce/woocommerce/pull/68072)
* Dev - Fix the product and add to cart block hook docblocks. [#68154](https://github.com/woocommerce/woocommerce/pull/68154)
* Dev - Fix the WooCommerce Blocks hook docs pipeline (build:docs) and regenerate the hooks reference (filters.md, actions.md) from the current PHP sources. [#67839](https://github.com/woocommerce/woocommerce/pull/67839)
* Dev - Guard every hook.doc read in the Blocks hook docs generator. No change to the generated reference. [#68151](https://github.com/woocommerce/woocommerce/pull/68151)
* Dev - Make the Blocks e2e seed re-runnable and fail loudly on a broken step. [#67707](https://github.com/woocommerce/woocommerce/pull/67707)
* Dev - Move additional checkout field type behavior into per-type classes, and field value storage into a trait, with no change in behavior. [#68081](https://github.com/woocommerce/woocommerce/pull/68081)
* Dev - Move Back in Stock Notifications activation from the WOOCOMMERCE_BIS_ALPHA_ENABLED wp-config constant to a normal feature toggle at WooCommerce → Settings → Advanced → Features → Experimental. [#64490](https://github.com/woocommerce/woocommerce/pull/64490)
* Dev - Move the classic-theme block style decision cache from a function-local static to a BlockTypesController instance property so it can be isolated in PHP tests. [#68249](https://github.com/woocommerce/woocommerce/pull/68249)
* Dev - Pin date_paid on the Orders Stats report test fixtures so a run that crosses the top of the hour no longer drops orders out of the queried window. [#68665](https://github.com/woocommerce/woocommerce/pull/68665)
* Dev - Pin the refund fixtures' dates in the Orders Stats report tests, closing the half of the hour-boundary flake that pinning the orders alone left open. [#68675](https://github.com/woocommerce/woocommerce/pull/68675)
* Dev - Product ordering: start legacy algorithm deprecation cycle. [#67812](https://github.com/woocommerce/woocommerce/pull/67812)
* Dev - Remove an unnecessary coding-standard suppression from product review rating counts. [#67824](https://github.com/woocommerce/woocommerce/pull/67824)
* Dev - Remove an unused Reviews by Product editor stylesheet. [#67612](https://github.com/woocommerce/woocommerce/pull/67612)
* Dev - Remove core E2E tests whose coverage exists elsewhere: the duplicated logged-in Checkout Link block, the WordPress-core lost password specs, and seven of eight identical order status filter cases. [#68207](https://github.com/woocommerce/woocommerce/pull/68207)
* Dev - Remove IE8-era leftovers from the classic-assets build: the ie8 uglify flag, the IE 8/9 browserslist targets, and two dead IE-only CSS hacks. Minified output changes; no behavior change on any supported browser. [#68077](https://github.com/woocommerce/woocommerce/pull/68077)
* Dev - Remove the duplicated Variant SKU entry from the Shopify importer column mapping. [#68226](https://github.com/woocommerce/woocommerce/pull/68226)
* Dev - Remove the experimental Agentic Checkout API. [#67914](https://github.com/woocommerce/woocommerce/pull/67914)
* Dev - Remove the no-op autoprefixer step from the legacy assets CSS build and clean the obsolete vendor prefixes it was stripping from the sources. Built CSS is unchanged. [#68061](https://github.com/woocommerce/woocommerce/pull/68061)
* Dev - Remove two stale PHPStan baseline entries for TransientFilesEngine that no longer match any reported error. [#67672](https://github.com/woocommerce/woocommerce/pull/67672)
* Dev - Replace legacy WPCS suppression comments in the widget rendering paths with exact PHPCS annotations, and run the remaining widget form setting labels through wp_kses_post(). [#68267](https://github.com/woocommerce/woocommerce/pull/68267)
* Dev - Replace legacy WPCS suppression comments on extension-facing SQL and order note queries with scoped phpcs:ignore annotations. [#68298](https://github.com/woocommerce/woocommerce/pull/68298)
* Dev - Replace legacy WPCS suppression comments on REST product and variation meta queries with explicit phpcs:ignore annotations that record why postmeta remains the correct path. [#68299](https://github.com/woocommerce/woocommerce/pull/68299)
* Dev - Replace legacy WPCS suppression comments with PHPCS directives. [#67752](https://github.com/woocommerce/woocommerce/pull/67752)
* Dev - Resolve custom PHPCS sniff paths relative to the WooCommerce ruleset. [#67776](https://github.com/woocommerce/woocommerce/pull/67776)
* Dev - Revert the @woocommerce/classic-assets node build script and restore the Grunt pipeline. Built assets are unchanged either way. [#68202](https://github.com/woocommerce/woocommerce/pull/68202)
* Dev - Run Core API tests with usage tracking enabled in pull request, nightly, and release CI. [#68274](https://github.com/woocommerce/woocommerce/pull/68274)
* Dev - Seed deterministic ratings and sales data for Product Collection Blocks E2E sorting tests. [#67512](https://github.com/woocommerce/woocommerce/pull/67512)
* Dev - Settings registration now runs on `admin_init` at priority 999 instead of the default 10, so it runs after other callbacks on that hook rather than before. Code that unhooks it must match the new priority: `remove_action( 'admin_init', array( WC(), 'register_wp_admin_settings' ), 999 )`; the no-priority form that matches in 11.0.1 and 11.1 silently stops matching. [#67718](https://github.com/woocommerce/woocommerce/pull/67718)
* Dev - Skip push notification scheduling and the loopback request when no push tokens are registered [#68841](https://github.com/woocommerce/woocommerce/pull/68841)
* Dev - Speed up block template customization end-to-end tests using REST API setup and cleanup. [#67561](https://github.com/woocommerce/woocommerce/pull/67561)
* Dev - Split the legacy Orders Stats report test class into focused test classes under tests/php/src, with no change in coverage [#68026](https://github.com/woocommerce/woocommerce/pull/68026)
* Dev - Spread the actual @wordpress/date module in the import status bar test mock. [#67629](https://github.com/woocommerce/woocommerce/pull/67629)
* Dev - Surface PHPCS findings as inline annotations on a pull request's Files changed tab. [#66989](https://github.com/woocommerce/woocommerce/pull/66989)
* Dev - Update npm dependencies and remove unused build tools to close more Dependabot alerts. [#67962](https://github.com/woocommerce/woocommerce/pull/67962)
* Dev - Update npm dependencies that resolve high-severity security advisories. [#67844](https://github.com/woocommerce/woocommerce/pull/67844)
* Dev - Update PHP development dependencies to versions that resolve reported security advisories. [#67603](https://github.com/woocommerce/woocommerce/pull/67603)
* Dev - Update term count release version metadata. [#67887](https://github.com/woocommerce/woocommerce/pull/67887)
* Dev - Use the tooling catalog for shared Babel, PostCSS, and webpack versions. [#67842](https://github.com/woocommerce/woocommerce/pull/67842)
* Dev - Use WooCommerce Core versions in JavaScript deprecation notices. [#67615](https://github.com/woocommerce/woocommerce/pull/67615)
* Dev - wc_order_tax_lookup gains an order_item_id column and is re-keyed on (order_id, tax_rate_id, order_item_id), so it now holds one row per tax line instead of one row per tax rate. Code summing the table is unaffected and code counting rows will see more of them. Code writing to the table with $wpdb->replace() on (order_id, tax_rate_id) lands on the new column's zero default rather than replacing the rows WooCommerce writes for that order. The reports leave such a row out while those rows stand, so its values are not read at all and it needs to write order_item_id too. Existing rows are rebuilt in the background, and can be rebuilt by hand from WooCommerce > Status > Tools. [#68374](https://github.com/woocommerce/woocommerce/pull/68374)
* Tweak - Add search, pagination, and an empty state to the order edit Add tax modal. [#66039](https://github.com/woocommerce/woocommerce/pull/66039)
* Tweak - Give nice names to webpack JS and CSS dynamic chunks [#49368](https://github.com/woocommerce/woocommerce/pull/49368)
* Tweak - Size the Catalog Sorting block to the selected option. [#67607](https://github.com/woocommerce/woocommerce/pull/67607)
* Tweak - Three small Marketplace UI fixes: the Plugins > Add Plugin "WooCommerce Marketplace" tab lands on Discover, the Extensions page title matches other admin page titles, and compact product cards show the "Sponsored" label. [#68411](https://github.com/woocommerce/woocommerce/pull/68411)
* Tweak - Update Antom payment gateway icon to use partner-supplied brand logo [#64584](https://github.com/woocommerce/woocommerce/pull/64584)
* Tweak - Stop adding block data- attributes to the HTML of emails built with the block email editor. [#69107](https://github.com/woocommerce/woocommerce/pull/69107)
* Tweak - Stop scheduling Pattern Fetcher jobs. [#69146](https://github.com/woocommerce/woocommerce/pull/69146)
* Performance - Avoid running Inbox Note cleanup during admin initialization. [#68088](https://github.com/woocommerce/woocommerce/pull/68088)
* Performance - Avoid site-wide orphan cleanup after product CSV imports. [#68090](https://github.com/woocommerce/woocommerce/pull/68090)
* Performance - Cache CSV importer original-ID lookups within each import batch, so CSVs with repeated IDs or many product references (grouped, upsell, cross-sell) no longer run the same postmeta query for every occurrence. [#68018](https://github.com/woocommerce/woocommerce/pull/68018)
* Performance - Cap variable product prices transient size. [#68058](https://github.com/woocommerce/woocommerce/pull/68058)
* Performance - Check likely-purchasable variations first in WC_Product_Variable::has_purchasable_variations() so listings and Store API responses stop hydrating every variation of each variable product. [#68272](https://github.com/woocommerce/woocommerce/pull/68272)
* Performance - Count the customer and review report totals with aggregate queries instead of one query per bucket. [#68302](https://github.com/woocommerce/woocommerce/pull/68302)
* Performance - Fixed ordering products performance (N-query pattern). [#66603](https://github.com/woocommerce/woocommerce/pull/66603)
* Performance - Improve performance when product reviews are disabled by skipping product rating lookup table updates. [#66524](https://github.com/woocommerce/woocommerce/pull/66524)
* Performance - Memoize the payment extension suggestions list per country and context so it is built once per request instead of once per registered gateway. [#66341](https://github.com/woocommerce/woocommerce/pull/66341)
* Performance - REST API: in the wc/v4 customers endpoint, only compute the order count, total spent and avatar fields when they are requested via _fields, avoiding wasted per-customer aggregate queries on sparse requests. [#66072](https://github.com/woocommerce/woocommerce/pull/66072)
* Performance - Sort the products widget by sales and the top rated products widget by rating through the product lookup table instead of post meta. [#68300](https://github.com/woocommerce/woocommerce/pull/68300)
* Performance - Tune terms and post meta cache invalidation during product saving. [#66966](https://github.com/woocommerce/woocommerce/pull/66966)
* Performance - Revert the faster purchasable-variation check for variable products so it can get more testing before it ships again. [#69069](https://github.com/woocommerce/woocommerce/pull/69069)
* Performance - Skip wiring the front-end stock notification services on admin requests. [#69145](https://github.com/woocommerce/woocommerce/pull/69145)
* Enhancement - Add a dismiss button and an inline disconnect link to the connected account banner on the marketplace's My Subscriptions tab. [#68412](https://github.com/woocommerce/woocommerce/pull/68412)
* Enhancement - Add a reusable CSS class to product names in improved order emails. [#67764](https://github.com/woocommerce/woocommerce/pull/67764)
* Enhancement - Add a variation bulk action to set sale prices from regular prices. [#68520](https://github.com/woocommerce/woocommerce/pull/68520)
* Enhancement - Add customer stock notifications settings and notification counts to the WooCommerce usage tracker snapshot. [#68821](https://github.com/woocommerce/woocommerce/pull/68821)
* Enhancement - Cart and Checkout blocks: give the order summary a fixed 360px column and hold the single-column layout until there is room for both columns, so mid-range viewports are no longer cramped. [#68363](https://github.com/woocommerce/woocommerce/pull/68363)
* Enhancement - Format count values in the legacy Reports chart legends with locale-aware thousands separators. [#68051](https://github.com/woocommerce/woocommerce/pull/68051)
* Enhancement - Improve photoswipe error message. [#68909](https://github.com/woocommerce/woocommerce/pull/68909)
* Enhancement - Include the report's date range in emailed Analytics exports, in the email and in the downloaded file's name. [#68469](https://github.com/woocommerce/woocommerce/pull/68469)
* Enhancement - Open the product picker automatically when adding products to an order, so merchants can start typing without an extra click. [#66905](https://github.com/woocommerce/woocommerce/pull/66905)
* Enhancement - Rate limit stock notification sign-ups per client and e-mail address. [#68538](https://github.com/woocommerce/woocommerce/pull/68538)
= 11.1.2 2026-09-22 =
**WooCommerce**
* Fix - Prevent variation gallery rendering from recursively requesting variation data. [#68965](https://github.com/woocommerce/woocommerce/pull/68965)
* Fix - Route order review submissions through WordPress's comment pipeline so they receive the same filtering and moderation as other comments. [#68961](https://github.com/woocommerce/woocommerce/pull/68961)
= 11.1.1 2026-09-18 =
**WooCommerce**
* Fix - Add a stricter dispatch check to REST API key authentication. [#68827](https://github.com/woocommerce/woocommerce/pull/68827)
* Fix - Prevent unstyled Mini Cart drawer contents from appearing below the footer when the Mini Cart block is hidden. [#68790](https://github.com/woocommerce/woocommerce/pull/68790)
* Fix - Update legacy options API permission checks. [#68862](https://github.com/woocommerce/woocommerce/pull/68862)
* Fix - Update mobile app login permission checks. [#68862](https://github.com/woocommerce/woocommerce/pull/68862)
* Fix - Update session cookie validation. [#68862](https://github.com/woocommerce/woocommerce/pull/68862)
= 11.1.0 2026-09-03 =
**WooCommerce**
* Fix - Activity Panel counts endpoint now respects an explicitly-empty actionable order statuses setting instead of falling back to the defaults, so a cleared setting reports zero orders to fulfill. [#66483](https://github.com/woocommerce/woocommerce/pull/66483)
* Fix - Add aria-label to Product Gallery Thumbnails [#67303](https://github.com/woocommerce/woocommerce/pull/67303)
* Fix - Add a visible validation message for the checkout terms and conditions checkbox. [#66449](https://github.com/woocommerce/woocommerce/pull/66449)
* Fix - Add explicit sale date fields to product Quick Edit and save schedules consistently with the full product editor. [#66931](https://github.com/woocommerce/woocommerce/pull/66931)
* Fix - Align the Core Breadcrumbs block output with WooCommerce Store Breadcrumbs on shop, product, account, archive, and custom taxonomy pages. [#66382](https://github.com/woocommerce/woocommerce/pull/66382)
* Fix - Align the Payments settings partner recommendations with the partnership tracking sheet: add Mayotte, add PayPal to Guyana, add Airwallex to Malaysia and South Korea, make MONEI the preferred provider in Andorra, and place Paytrail before GoCardless in Finland. [#67395](https://github.com/woocommerce/woocommerce/pull/67395)
* Fix - Allow customers to save account details when an unchanged display name is already an email address. [#66645](https://github.com/woocommerce/woocommerce/pull/66645)
* Fix - Allow null parent names in REST API order line items. [#66636](https://github.com/woocommerce/woocommerce/pull/66636)
* Fix - Allow Product Gallery variation events to use numeric string IDs. [#67768](https://github.com/woocommerce/woocommerce/pull/67768)
* Fix - Allow REST order updates to accept round-tripped line item meta display values with complex data. [#65513](https://github.com/woocommerce/woocommerce/pull/65513)
* Fix - Allow Shop Managers to save Local Pickup settings by adding a dedicated /wc/v3/pickup-locations REST route guarded by the manage_woocommerce capability, instead of posting to /wp/v2/settings which requires manage_options. [#65286](https://github.com/woocommerce/woocommerce/pull/65286)
* Fix - Analytics: initialize the Date type selector in Analytics settings with the effective date_paid default instead of rendering blank when the option was never saved. [#67423](https://github.com/woocommerce/woocommerce/pull/67423)
* Fix - Apply block support styles to legacy Product Reviews block wrappers. [#67754](https://github.com/woocommerce/woocommerce/pull/67754)
* Fix - Apply shipping tax to manual orders that contain shipping but no products. [#66639](https://github.com/woocommerce/woocommerce/pull/66639)
* Fix - Apply the stepper quantity-selector styles only to quantity containers that hold a visible quantity input, so a form containing both visible and hidden quantity fields no longer renders a stepper box around a hidden one. [#67153](https://github.com/woocommerce/woocommerce/pull/67153)
* Fix - Blueprint: match the restricted site options list regardless of the casing, padding or accents used in an imported key, so a variant spelling can no longer overwrite a restricted option such as wp_user_roles. [#67348](https://github.com/woocommerce/woocommerce/pull/67348)
* Fix - Cap quantity-form v4 refund amounts to the line's remaining refundable amount so sequential partial refunds can always refund the remaining items instead of failing on rounding drift. [#66884](https://github.com/woocommerce/woocommerce/pull/66884)
* Fix - Cart Link block: set the cart icon width to match the Mini-Cart icon size (1.5em) so it no longer renders oversized. [#65875](https://github.com/woocommerce/woocommerce/pull/65875)
* Fix - Change CSV batch exporter default fopen mode from a+ to a for S3 stream wrapper compatibility and add error logging when opening, writing to, or closing the export file fails. [#66295](https://github.com/woocommerce/woocommerce/pull/66295)
* Fix - Clarify the on-hold order email for payment flows that require another step. [#66914](https://github.com/woocommerce/woocommerce/pull/66914)
* Fix - Clear cached payment provider lists when the payment providers service cache is cleared. [#66909](https://github.com/woocommerce/woocommerce/pull/66909)
* Fix - Complete the WPDS token migration for the Settings UI shell while preserving compatibility-specific dimensions. [#67150](https://github.com/woocommerce/woocommerce/pull/67150)
* Fix - Correct the Macanese pataca currency symbol to MOP$. [#66716](https://github.com/woocommerce/woocommerce/pull/66716)
* Fix - Correct the Zambian kwacha currency symbol from ZK to K. This changes the public symbol returned by currency APIs and the symbol recognized when saving flat-rate shipping costs. [#66722](https://github.com/woocommerce/woocommerce/pull/66722)
* Fix - CSV importer: clear removed gallery images when reducing the number of images for an existing product. [#66213](https://github.com/woocommerce/woocommerce/pull/66213)
* Fix - CSV product importer: match special columns (attributes, downloads, meta) by prefix instead of with unanchored regexes, so columns that merely contain a special name no longer get the wrong formatting callback. [#66825](https://github.com/woocommerce/woocommerce/pull/66825)
* Fix - Delete expired transient files on sites whose uploads directory is a stream wrapper path, such as S3-Uploads and WordPress VIP installs, where the cleanup previously reported success without deleting anything. [#67670](https://github.com/woocommerce/woocommerce/pull/67670)
* Fix - Deprecate the woocommerce_coupon_object_updated_props action in favor of the new woocommerce_coupon_updated_props action, which reports only the properties changed by the current save. The deprecated action keeps firing with its historical payload (properties accumulated across saves through the same data store instance, with duplicates) whenever it has listeners. WC_Coupon_Data_Store_CPT::$updated_props is deprecated. [#67168](https://github.com/woocommerce/woocommerce/pull/67168)
* Fix - Detect REST API requests made via the ?rest_route= query parameter (plain permalinks, Jetpack-signed requests) in is_rest_api_request(). [#66816](https://github.com/woocommerce/woocommerce/pull/66816)
* Fix - Detect Store API requests made with plain permalinks (?rest_route=/wc/store/) so they are correctly identified. [#65781](https://github.com/woocommerce/woocommerce/pull/65781)
* Fix - Enhanced product search multi-selects (e.g. Linked Products) no longer list products that are already selected, so re-clicking a product in the results can no longer silently remove it from the selection. [#67063](https://github.com/woocommerce/woocommerce/pull/67063)
* Fix - Ensure Helcim account connectivity follows the gateway's setup status. [#67398](https://github.com/woocommerce/woocommerce/pull/67398)
* Fix - Ensure Product Categories, Product Tags, and Brands menu meta boxes are visible by default on the Appearance > Menus screen. [#65990](https://github.com/woocommerce/woocommerce/pull/65990)
* Fix - Ensure the toggle button in the product list table stays aligned on mobile view. [#58774](https://github.com/woocommerce/woocommerce/pull/58774)
* Fix - Ensure the woocommerce_placeholder_img_src filter applies to attachment-based product placeholders. [#66717](https://github.com/woocommerce/woocommerce/pull/66717)
* Fix - Ensure unsupported WooCommerce blocks are hidden from the Customizer's widget inserter. [#66650](https://github.com/woocommerce/woocommerce/pull/66650)
* Fix - Excluded product IDs no longer leak back into product search results through matching variations of a variable product or through numeric search terms. [#67308](https://github.com/woocommerce/woocommerce/pull/67308)
* Fix - Fire the cart store's cross-store sync event, legacy added-to-cart event, and screen-reader announcement once per mutation batch cycle instead of once per request, removing the redundant resync requests and duplicate events/announcements produced when several cart mutations are coalesced into one cycle. [#66748](https://github.com/woocommerce/woocommerce/pull/66748)
* Fix - Fix: make coming soon page theme-aware and simplify layout [#65816](https://github.com/woocommerce/woocommerce/pull/65816)
* Fix - fix: using window.wc instead of wc in classic checkout so they no longer break when a third-party script shadows the global wc binding. [#66349](https://github.com/woocommerce/woocommerce/pull/66349)
* Fix - Fix :where() selectors in Brands shortcode [#66497](https://github.com/woocommerce/woocommerce/pull/66497)
* Fix - Fix a fatal error on `/wp-admin/widgets.php` and other admin surfaces when a WooCommerce product block is registered to render in a widget area and a WooCommerce session becomes active during the request. [#66641](https://github.com/woocommerce/woocommerce/pull/66641)
* Fix - Fix a PHP warning raised on the first step of every CSV product export. [#66585](https://github.com/woocommerce/woocommerce/pull/66585)
* Fix - Fix a set of styling issues on the Payments settings screens: the white content background now reaches the bottom of the page, headings match the colour used elsewhere, the dividers under the headers are drawn consistently while the screen loads, the whole offline payments header title acts as the back control, and the offline payment method settings form is aligned and spaced evenly. [#67464](https://github.com/woocommerce/woocommerce/pull/67464)
* Fix - Fix clearing a log source so it reliably deletes all of that source's log files, and only that source's files (previously it stopped after 20 files and could remove files from other sources sharing the same name prefix). [#66170](https://github.com/woocommerce/woocommerce/pull/66170)
* Fix - Fix CSV importer HTML-encoding attribute names, which prevented matching existing global attributes and caused duplicate attributes or slug-too-long import errors. [#66656](https://github.com/woocommerce/woocommerce/pull/66656)
* Fix - Fix duplicate headers on Settings UI drill-down pages. [#66854](https://github.com/woocommerce/woocommerce/pull/66854)
* Fix - Fix duplicate React keys for review loading placeholders. [#67666](https://github.com/woocommerce/woocommerce/pull/67666)
* Fix - Fix false "Daily Cron: Not scheduled" on Status page for fresh WooCommerce installs. [#66188](https://github.com/woocommerce/woocommerce/pull/66188)
* Fix - Fix Free Shipping method name duplicated in order emails with improvements enabled [#66034](https://github.com/woocommerce/woocommerce/pull/66034)
* Fix - Fix invalid label markup for classic settings radio fields. [#66705](https://github.com/woocommerce/woocommerce/pull/66705)
* Fix - Fix keyboard flow in the order Add products modal so products can be added without a rogue search box, and fix the clear/chevron icon overlap. [#66381](https://github.com/woocommerce/woocommerce/pull/66381)
* Fix - Fix legacy `wc/v3/reports/sales` and the other legacy admin reports returning empty results on HPOS-authoritative sites with sync disabled by routing `WC_Admin_Report::get_order_report_data()` through the HPOS schema (`wc_orders` / `wc_orders_meta` / `wc_order_operational_data`). [#65493](https://github.com/woocommerce/woocommerce/pull/65493)
* Fix - Fix long product names in the Add products modal running under the clear/chevron icons on WP 7.0+ and stretching the table past the modal edge. [#67774](https://github.com/woocommerce/woocommerce/pull/67774)
* Fix - Fix Mini-Cart block not visible in RTL languages [#67453](https://github.com/woocommerce/woocommerce/pull/67453)
* Fix - Fix Mini-Cart styles. [#66651](https://github.com/woocommerce/woocommerce/pull/66651)
* Fix - Fix missing default layout styles for the product_brand_thumbnails_description shortcode. [#66280](https://github.com/woocommerce/woocommerce/pull/66280)
* Fix - Fix PHP 8.5+ deprecation notices when a block without a front-end script (e.g. Coming Soon) registers chunk translations with a null script handle. [#66197](https://github.com/woocommerce/woocommerce/pull/66197)
* Fix - Fix printed order receipts: show the discount line for orders discounted without a coupon so the amounts add up to the total paid, and stop rendering an empty payment method section. [#67760](https://github.com/woocommerce/woocommerce/pull/67760)
* Fix - Fix product CSV importer form crashing when the mbstring extension is unavailable. [#66732](https://github.com/woocommerce/woocommerce/pull/66732)
* Fix - Fix Product Gallery showing the previously selected variation's image when used with the classic Add to Cart Form. [#67715](https://github.com/woocommerce/woocommerce/pull/67715)
* Fix - Fix product image gallery alignment when slide widths are fractional. [#66631](https://github.com/woocommerce/woocommerce/pull/66631)
* Fix - Fix quick edit saving empty stock quantity as null instead of 0 when manage stock is enabled. [#64551](https://github.com/woocommerce/woocommerce/pull/64551)
* Fix - Fix review count not updating on WooCommerce Home after moderating multiple reviews [#65830](https://github.com/woocommerce/woocommerce/pull/65830)
* Fix - Fix right-to-left (RTL) layout issues in the admin: the sample product import overlay position and its list chevrons, and the Customize Your Store banner illustration placement. [#66518](https://github.com/woocommerce/woocommerce/pull/66518)
* Fix - Fix robots.txt `Disallow` rules pointing at the wrong location on installs that relocate `wp-content` or the uploads directory. [#64582](https://github.com/woocommerce/woocommerce/pull/64582)
* Fix - Fix scheduled sales briefly showing and charging the wrong price between the sale start/end time and the scheduled-sale event running. [#65551](https://github.com/woocommerce/woocommerce/pull/65551)
* Fix - Fix Tax settings REST validation rejecting valid values when plugins filter options into a structured format. [#66536](https://github.com/woocommerce/woocommerce/pull/66536)
* Fix - Fix the dashboard status widget out-of-stock count for unmanaged products. [#66666](https://github.com/woocommerce/woocommerce/pull/66666)
* Fix - Fix the order-review moderation guard missing legacy reviews of variable-product variations. [#67071](https://github.com/woocommerce/woocommerce/pull/67071)
* Fix - Fix the order-review moderation guard missing reviews written before 10.9.0. [#66897](https://github.com/woocommerce/woocommerce/pull/66897)
* Fix - Fix the product_import_complete Tracks event never firing by checking for the actual `_wpnonce` request parameter present on the importer's done step instead of a non-existent `nonce` parameter. [#66556](https://github.com/woocommerce/woocommerce/pull/66556)
* Fix - Fix the Revenue report double-counting returns when an order has a partial refund followed by a full refund. [#66320](https://github.com/woocommerce/woocommerce/pull/66320)
* Fix - Guard against non-string screen ID in visual attribute script enqueue [#66655](https://github.com/woocommerce/woocommerce/pull/66655)
* Fix - Hide additional address fields with show_in_order_confirmation set to false from the order confirmation block theme thank you page, classic theme order details, and My Account order details. [#66899](https://github.com/woocommerce/woocommerce/pull/66899)
* Fix - Hide shipping details for non-shipping orders in the admin order summary. [#66488](https://github.com/woocommerce/woocommerce/pull/66488)
* Fix - Honour the position argument of wc_admin_register_page() for sub pages, so extensions can control where their React-powered pages appear within a parent submenu. Previously position was only passed to add_menu_page() for top level pages and silently ignored for sub pages. [#66826](https://github.com/woocommerce/woocommerce/pull/66826)
* Fix - Ignore a stale quality_badge URL param in marketplace search requests when the badge is disabled or IAM settings are unavailable, so the listing cannot stay silently filtered without the toggle that clears it. [#67683](https://github.com/woocommerce/woocommerce/pull/67683)
* Fix - Import gallery images from a CSV Images cell whose first value is empty (e.g. a value starting with a separator) instead of silently dropping them and leaving the previous gallery in place. [#66586](https://github.com/woocommerce/woocommerce/pull/66586)
* Fix - Improve keyboard and screen reader accessibility for button-like links in the classic cart. [#67137](https://github.com/woocommerce/woocommerce/pull/67137)
* Fix - Improve Product Image srcset to prevent wide images from appearing blurry in square blocks [#67325](https://github.com/woocommerce/woocommerce/pull/67325)
* Fix - Improve Product Image srcset to prevent wide images from appearing blurry [#67105](https://github.com/woocommerce/woocommerce/pull/67105)
* Fix - Improve the color contrast of custom date fields in legacy Reports. [#67014](https://github.com/woocommerce/woocommerce/pull/67014)
* Fix - Include product brands in visibility-aware product term recounts. [#67656](https://github.com/woocommerce/woocommerce/pull/67656)
* Fix - Include variable products with out-of-stock variations in the Products stock status filter. [#66942](https://github.com/woocommerce/woocommerce/pull/66942)
* Fix - Introduce --wc-separator-color CSS custom property for theme-aware border colors. Migrate $universal-border-light, the login/register form borders, and the mini-cart footer border to use this token. [#65697](https://github.com/woocommerce/woocommerce/pull/65697)
* Fix - Keep external products visible in the catalog after converting them from an out-of-stock product. [#67622](https://github.com/woocommerce/woocommerce/pull/67622)
* Fix - Keep merchants on the current variation page, with their unsaved edits intact, when the pagination save warning is dismissed. [#66998](https://github.com/woocommerce/woocommerce/pull/66998)
* Fix - Keep responsive Settings UI shell gutters synchronized with WPDS spacing tokens. [#67449](https://github.com/woocommerce/woocommerce/pull/67449)
* Fix - Keep shipping details visible in admin for physical Store API orders without a shipping method. [#66627](https://github.com/woocommerce/woocommerce/pull/66627)
* Fix - Keep the product image help tip aligned when setting or removing an image. [#66659](https://github.com/woocommerce/woocommerce/pull/66659)
* Fix - Keep the Review Order page from restoring an intentionally empty Shop page setting. If this bug restored your intentionally cleared Shop page setting, clear it once more after updating. [#67127](https://github.com/woocommerce/woocommerce/pull/67127)
* Fix - Keep the transient files directory working on sites whose uploads directory is a stream wrapper path, such as S3-Uploads and WordPress VIP installs. [#67670](https://github.com/woocommerce/woocommerce/pull/67670)
* Fix - Keep WooCommerce blocks registered while filtering block inserter availability by editor context. [#66314](https://github.com/woocommerce/woocommerce/pull/66314)
* Fix - Leading zeros are now trimmed from the coupon amount on save for cleaner display. [#66682](https://github.com/woocommerce/woocommerce/pull/66682)
* Fix - Load frontend includes during new post editor requests to avoid Product Collection block hydration fatals. [#66225](https://github.com/woocommerce/woocommerce/pull/66225)
* Fix - Log and stop redundantly deleting invalid version string cache entries, and correctly detect misses from object cache drop-ins that report them as null. [#67164](https://github.com/woocommerce/woocommerce/pull/67164)
* Fix - Make focus indicators consistent on the Payments settings screen: stop the "More payment options" ring from appearing on mouse click, give it room to breathe, round the square rings on the drag handle and section header, and give the Official badge, the category info icons and the status badge info icon themed focus rings instead of the browser default. The highlighted row in the business location selector now follows the admin colour scheme too. [#67448](https://github.com/woocommerce/woocommerce/pull/67448)
* Fix - Make Product Gallery layout honor custom Product Image aspect ratios. [#66441](https://github.com/woocommerce/woocommerce/pull/66441)
* Fix - Match order withdrawal requests by email address and order number [#67433](https://github.com/woocommerce/woocommerce/pull/67433)
* Fix - Mini-Cart: prevent a stray trailing separator after hidden or malformed item data entries and harden item data rendering so it no longer depends on the Interactivity API swallowing an error when an item has no item data. [#66688](https://github.com/woocommerce/woocommerce/pull/66688)
* Fix - Normalize the Product Collection carousel header row by aligning the heading and navigation buttons, removing the heading's hardcoded spacing, and applying theme-aware colors to the navigation buttons. [#65691](https://github.com/woocommerce/woocommerce/pull/65691)
* Fix - NOX onboarding: automatically move to the next step and show a notice when the test account creation fails with a non-recoverable error, instead of a retry loop. [#66356](https://github.com/woocommerce/woocommerce/pull/66356)
* Fix - NOX onboarding: keep reporting the test account step as completed after it was skipped forward, so merchants are not routed back into it when the platform fell back to an account that requires verification. [#66492](https://github.com/woocommerce/woocommerce/pull/66492)
* Fix - Only enqueue the block notice styles (wc-blocks-style) on classic themes when block notices are actually in use. [#66417](https://github.com/woocommerce/woocommerce/pull/66417)
* Fix - Pass placeholder image attributes to the placeholder image filter. [#66691](https://github.com/woocommerce/woocommerce/pull/66691)
* Fix - Persist the default nav-menu hidden meta box snapshot on a user's first visit to Appearance > Menus, so meta boxes registered by plugins installed after that visit stay visible by default instead of being hidden on every recompute. [#66954](https://github.com/woocommerce/woocommerce/pull/66954)
* Fix - Persist the default nav-menu hidden meta box snapshot only for the current user on the Appearance > Menus screen, matching WordPress core, so a read of another user's option (e.g. user-switching or admin tooling) can no longer overwrite that user's own first-visit snapshot. [#66977](https://github.com/woocommerce/woocommerce/pull/66977)
* Fix - Preserve 0% tax lines when refunding order line items, so zero-rated tax entries are recorded on the refund order instead of being dropped. [#66615](https://github.com/woocommerce/woocommerce/pull/66615)
* Fix - Preserve cart contents when paying for an existing order. [#66090](https://github.com/woocommerce/woocommerce/pull/66090)
* Fix - Preserve category and tag terms attached to existing variations when re-importing them via CSV with "update existing" enabled, instead of unconditionally deleting them on every variation row. [#66946](https://github.com/woocommerce/woocommerce/pull/66946)
* Fix - Preserve Core Breadcrumbs callback compatibility for extensions. [#66822](https://github.com/woocommerce/woocommerce/pull/66822)
* Fix - Preserve existing order shipping line names that match the default Shipping label. [#66849](https://github.com/woocommerce/woocommerce/pull/66849)
* Fix - Preserve focus and screen reader feedback when hiding shipping recommendations, and restore marketplace links where the recommendations component is unavailable. [#66689](https://github.com/woocommerce/woocommerce/pull/66689)
* Fix - Preserve product archive rewrite rules when WP-CLI skips the active theme and another plugin flushes permalinks. [#67101](https://github.com/woocommerce/woocommerce/pull/67101)
* Fix - Preserve the legacy admin header when a Settings UI drill-down fails to render. [#66916](https://github.com/woocommerce/woocommerce/pull/66916)
* Fix - Preserve touch handling for interactive content nested inside FlexSlider galleries. [#66754](https://github.com/woocommerce/woocommerce/pull/66754)
* Fix - Preserve variation IDs when partially updating order line items through the REST API. [#67343](https://github.com/woocommerce/woocommerce/pull/67343)
* Fix - Prevent a fatal error when calculating totals for an order that has a fee stored with a blank value; the blank fee total is now treated as 0 during tax calculation. [#66231](https://github.com/woocommerce/woocommerce/pull/66231)
* Fix - Prevent a fatal error when WooCommerce checks the current admin screen before the WordPress screen API is available. [#66701](https://github.com/woocommerce/woocommerce/pull/66701)
* Fix - Prevent a fatal TypeError when force-downloading a remote file while a woocommerce_file_download_filename filter callback returns a non-string value. [#66658](https://github.com/woocommerce/woocommerce/pull/66658)
* Fix - Prevent a ghost 0.00 "Order fully refunded" refund from being created when partial refunds sum a float epsilon above the stored order total. [#66885](https://github.com/woocommerce/woocommerce/pull/66885)
* Fix - Prevent block initialization errors in the classic widget editor. [#67112](https://github.com/woocommerce/woocommerce/pull/67112)
* Fix - Prevent Brand Nav widget from poisoning shared product subcategory cache. [#65947](https://github.com/woocommerce/woocommerce/pull/65947)
* Fix - Prevent classic product image gallery swipes from closing the Facebook in-app browser. [#66602](https://github.com/woocommerce/woocommerce/pull/66602)
* Fix - Prevent client-side-only blocks from disappearing from the post editor inserter. [#66628](https://github.com/woocommerce/woocommerce/pull/66628)
* Fix - Prevent duplicate order download permissions when granting access to a product again. [#66410](https://github.com/woocommerce/woocommerce/pull/66410)
* Fix - Prevent early translation loading when checking unified block editor build assets. [#67072](https://github.com/woocommerce/woocommerce/pull/67072)
* Fix - Prevent early WooCommerce translation loading from breaking redirects when debugging is enabled. [#66582](https://github.com/woocommerce/woocommerce/pull/66582)
* Fix - Prevent fatal errors on plugins.php, update-core.php and the Extensions page when cached WooCommerce.com subscription data contains malformed entries. [#67152](https://github.com/woocommerce/woocommerce/pull/67152)
* Fix - Prevent fatal errors when older WooCommerce Analytics packages are loaded. [#66710](https://github.com/woocommerce/woocommerce/pull/66710)
* Fix - Prevent fatal errors when updating malformed payment gateway settings. [#66848](https://github.com/woocommerce/woocommerce/pull/66848)
* Fix - Prevent filtered review blocks from showing all reviews when no category or product is selected. [#67324](https://github.com/woocommerce/woocommerce/pull/67324)
* Fix - Prevent ID-less classic settings radio fields from sharing a single "-title" ID that could cross-label radio groups for assistive technology. [#66944](https://github.com/woocommerce/woocommerce/pull/66944)
* Fix - Prevent invalid object cache values from crashing the version string generator. [#67164](https://github.com/woocommerce/woocommerce/pull/67164)
* Fix - Prevent invalid Quick Edit sale dates and unavailable datepicker scripts from corrupting product pricing schedules. [#67052](https://github.com/woocommerce/woocommerce/pull/67052)
* Fix - Prevent notice about wp-editor being enqueued from appearing in the Widgets screen [#66979](https://github.com/woocommerce/woocommerce/pull/66979)
* Fix - Prevent product brand shortcode images from rendering empty or unitless inline dimensions. [#66745](https://github.com/woocommerce/woocommerce/pull/66745)
* Fix - Prevent product editor content from shifting during initial page load. [#67351](https://github.com/woocommerce/woocommerce/pull/67351)
* Fix - Prevent product variations imported via CSV from inheriting the default "Uncategorized" product category. [#66255](https://github.com/woocommerce/woocommerce/pull/66255)
* Fix - Prevent the Blueprint settings screen from fataling when a third-party filter throws while WooCommerce requests plugin or theme metadata from WordPress.org. [#67342](https://github.com/woocommerce/woocommerce/pull/67342)
* Fix - Prevent the Site Editor from showing unsaved changes when opening classic WooCommerce templates. [#67093](https://github.com/woocommerce/woocommerce/pull/67093)
* Fix - Prevent variations from being automatically included in product exports when a specific type filter (e.g. variable only) is set. [#66292](https://github.com/woocommerce/woocommerce/pull/66292)
* Fix - Prevent WC_Abstract_Order::add_item() from silently overwriting an unsaved item when items are removed and re-added before save() (count()-based temporary key collision). [#65607](https://github.com/woocommerce/woocommerce/pull/65607)
* Fix - Product CSV importer: respect the store's decimal separator setting when parsing weight and dimensions, so comma-separated values (e.g. "1,5") are no longer discarded. [#66205](https://github.com/woocommerce/woocommerce/pull/66205)
* Fix - Product searches with terms containing " or " now apply the include, exclude, status, product type and post type filters to every OR group instead of only a single group, so admin product pickers no longer suggest drafts, excluded products or wrong-type products matched by those groups. [#67420](https://github.com/woocommerce/woocommerce/pull/67420)
* Fix - Product Summary: apply responsive styles to current and legacy rendered summaries. [#67356](https://github.com/woocommerce/woocommerce/pull/67356)
* Fix - Rate limit order withdrawal requests by IP address and email. [#67069](https://github.com/woocommerce/woocommerce/pull/67069)
* Fix - Register legacy block bundle handles as deprecated compatibility placeholders when unified editor assets are enabled. [#67055](https://github.com/woocommerce/woocommerce/pull/67055)
* Fix - Register WooCommerce block types on demand when a product or variation description is rendered through do_blocks, so dynamic blocks placed in a description no longer render blank in the products REST API, the Store API, the variation AJAX endpoint or product webhooks. [#67663](https://github.com/woocommerce/woocommerce/pull/67663)
* Fix - Reject duplicate tax IDs in refund line items on the wc/v4 refunds endpoint and the wc/v3 compute_totals path, which previously created refunds whose stored line taxes did not add up to the refund amount. [#67613](https://github.com/woocommerce/woocommerce/pull/67613)
* Fix - Remove duplicate Shipping settings Marketplace link when shipping recommendations are shown. [#66110](https://github.com/woocommerce/woocommerce/pull/66110)
* Fix - Remove nofollow from product permalink links in product buttons. [#66743](https://github.com/woocommerce/woocommerce/pull/66743)
* Fix - Remove Sample badge from sample products generated during the CYS flow [#66322](https://github.com/woocommerce/woocommerce/pull/66322)
* Fix - Reorder the cart, mini-cart, and add-to-cart quantity steppers so the decrease button precedes the quantity input in the DOM, matching the visual order for a logical keyboard focus and screen-reader reading sequence. [#66670](https://github.com/woocommerce/woocommerce/pull/66670)
* Fix - Replace deprecated jQuery .focus() shorthand with .trigger( 'focus' ) / .on( 'focus' ) across legacy JS files. [#66273](https://github.com/woocommerce/woocommerce/pull/66273)
* Fix - Report whether approved download directory rules are enforced in Site Health. [#67479](https://github.com/woocommerce/woocommerce/pull/67479)
* Fix - Reset stock management and stock status when converting products to grouped or external types. [#67484](https://github.com/woocommerce/woocommerce/pull/67484)
* Fix - Respect dp parameter when formatting coupon line item discount and discount_tax values in REST API. [#66328](https://github.com/woocommerce/woocommerce/pull/66328)
* Fix - Respect hidden Date and Status columns on the admin orders list below 782px, so the Columns menu (Screen Options) is honored at every screen width. [#66242](https://github.com/woocommerce/woocommerce/pull/66242)
* Fix - Respect legacy WooCommerce Admin filters when disabling analytics. [#66444](https://github.com/woocommerce/woocommerce/pull/66444)
* Fix - Restore and harden the Site Health prompt after approved download directory synchronization. [#67491](https://github.com/woocommerce/woocommerce/pull/67491)
* Fix - Restore checkout compatibility handling for payment extensions with missing script dependencies. [#67365](https://github.com/woocommerce/woocommerce/pull/67365)
* Fix - Restore Mini-Cart inner blocks in the Site Editor. [#67416](https://github.com/woocommerce/woocommerce/pull/67416)
* Fix - Return early in Product block if product is not viewable [#67332](https://github.com/woocommerce/woocommerce/pull/67332)
* Fix - Return HTTP 400 instead of 500 for invalid refund_tax and auto-compute inputs on the wc/v3 refunds compute_totals path, by adding the missing HTTP status to five shared-engine validation errors and defaulting status-less engine errors to 400 at the v3 boundary. [#67757](https://github.com/woocommerce/woocommerce/pull/67757)
* Fix - Serve minified admin scripts only when the minified file actually exists, preventing broken admin pages when the minified-js feature is force-enabled (e.g. via WooCommerce Beta Tester) on builds that do not ship minified JS files. [#67515](https://github.com/woocommerce/woocommerce/pull/67515)
* Fix - Show the billing name for guest orders in the WooCommerce Home Orders activity panel instead of leaving the name blank. [#66279](https://github.com/woocommerce/woocommerce/pull/66279)
* Fix - Show the Local Pickup settings save confirmation on a successful save (and an error notice on failure), instead of only when the server response matched the sent payload, which suppressed the notice when values were sanitized (e.g. "&" normalized to "&"). [#66459](https://github.com/woocommerce/woocommerce/pull/66459)
* Fix - Show the Save Draft button when creating a coupon. [#66663](https://github.com/woocommerce/woocommerce/pull/66663)
* Fix - Skip on-the-fly and background thumbnail regeneration for attachments no image editor supports (e.g. SVGs), preventing PHP notices and repeated doomed resize attempts. [#67347](https://github.com/woocommerce/woocommerce/pull/67347)
* Fix - Skip the brands product column when the product_brand taxonomy is deregistered [#66410](https://github.com/woocommerce/woocommerce/pull/66410)
* Fix - Start new bank accounts on the Direct bank transfer settings page in the business location set on the Payments settings screen. The store base country used before could arrive with a state suffix ("US:CA"), which matched no entry in the country field and no routing number format. [#67478](https://github.com/woocommerce/woocommerce/pull/67478)
* Fix - Stop counting test-mode WooPayments usage - a test-drive account or test-mode orders - when determining WooPayments incentives eligibility, so trialing WooPayments no longer disqualifies a store from incentives. Stores already disqualified this way get their eligibility re-determined once. [#67154](https://github.com/woocommerce/woocommerce/pull/67154)
* Fix - Store API: fall back to the billing address when a checkout request omits the shipping address and the cart needs shipping. [#66409](https://github.com/woocommerce/woocommerce/pull/66409)
* Fix - Sync trashed and untrashed order status to analytics so trashed orders no longer appear in reports, and remove deleted refunds from analytics lookup tables under HPOS. [#64157](https://github.com/woocommerce/woocommerce/pull/64157)
* Fix - Tighten authorization checks on the Stripe extension install redirect. [#66880](https://github.com/woocommerce/woocommerce/pull/66880)
* Fix - Tighten moderation checks on order reviews. [#66881](https://github.com/woocommerce/woocommerce/pull/66881)
* Fix - Tighten multisite site-membership handling during login. [#66879](https://github.com/woocommerce/woocommerce/pull/66879)
* Fix - Update Checkout total guard to run after addresses in the request have been applied. [#67773](https://github.com/woocommerce/woocommerce/pull/67773)
* Fix - Use gateway defaults when detecting enabled-state transitions from malformed settings. [#66912](https://github.com/woocommerce/woocommerce/pull/66912)
* Fix - Use the filename announced by the remote server (Content-Disposition/Content-Type) when force-downloading an external file whose URL has no filename in its path, such as Google Drive links. [#66604](https://github.com/woocommerce/woocommerce/pull/66604)
* Fix - Use the IPv6-capable ipify endpoint for external IP lookups. [#66735](https://github.com/woocommerce/woocommerce/pull/66735)
* Fix - Use the selected shipping method name for manually created orders. [#66811](https://github.com/woocommerce/woocommerce/pull/66811)
* Fix - Use the stable Block Selectors API. [#66596](https://github.com/woocommerce/woocommerce/pull/66596)
* Fix - Use WooCommerce Analytics to report legacy Select2 usage on storefront pages. [#66652](https://github.com/woocommerce/woocommerce/pull/66652)
* Fix - WC_Order_Item_Product::set_product() now resets variation_id to 0 when passed a non-variation product, so reassigning a line item's product no longer leaves a stale variation ID that made get_product() return the previous variation. [#66734](https://github.com/woocommerce/woocommerce/pull/66734)
* Fix - WP-CLI's blueprint command no longer risks a fatal error from loading its class twice. [#67074](https://github.com/woocommerce/woocommerce/pull/67074)
* Fix - WP-CLI no longer exits the whole process when the optional wp-cli/extension-command package isn't installed. [#67074](https://github.com/woocommerce/woocommerce/pull/67074)
* Fix - Exclude WordPress editorial notes from the WooCommerce comment count cache, so adding a note no longer inflates the pending comment count shown in wp-admin. [#67985](https://github.com/woocommerce/woocommerce/pull/67985)
* Fix - Fix Add to Cart + Options redirect when a plugin modifies the form and WooCommerce is installed in a subdirectory [#67798](https://github.com/woocommerce/woocommerce/pull/67798)
* Fix - Fix CSV variation import saving a catch-all variation and a stray global attribute when a global-flagged row matches a custom parent attribute. [#68002](https://github.com/woocommerce/woocommerce/pull/68002)
* Fix - Fix dropdown text and the clear icon running under the chevron in admin single selects on WP 7.0+, including the Order edit Country, State and Customer fields. [#67969](https://github.com/woocommerce/woocommerce/pull/67969)
* Fix - Fix has_orders_pending_sync() incorrectly returning false when an order changes after a full HPOS backfill [#67838](https://github.com/woocommerce/woocommerce/pull/67838)
* Fix - Hide the customer email verification prompt when its email notification is disabled. [#67994](https://github.com/woocommerce/woocommerce/pull/67994)
* Fix - Prevent REST order updates from failing when a line item's variation is deleted mid-update and the posted product resolves to the parent product. [#67860](https://github.com/woocommerce/woocommerce/pull/67860)
* Fix - Restore the wc_product_meta_lookup join when the Products list is filtered by "Out of stock", so posts_clauses callbacks registered after WooCommerce can still reference the alias. [#67890](https://github.com/woocommerce/woocommerce/pull/67890)
* Fix - Suppress the customer email verification prompt when guest checkout is disabled. [#67968](https://github.com/woocommerce/woocommerce/pull/67968)
* Fix - Correct the introductory text on the order withdrawal form. [#68125](https://github.com/woocommerce/woocommerce/pull/68125)
* Fix - Harden password visibility toggle markup handling. [#68176](https://github.com/woocommerce/woocommerce/pull/68176)
* Fix - Preserve custom data store cleanup when removing order items. [#68144](https://github.com/woocommerce/woocommerce/pull/68144)
* Fix - Preserve replacement order items saved by extensions during deferred checkout item deletion. [#68103](https://github.com/woocommerce/woocommerce/pull/68103)
* Fix - Properly strip tags from product names in AJAX responses [#68175](https://github.com/woocommerce/woocommerce/pull/68175)
* Fix - Temporarily disable Helcim payment provider recommendations. [#68119](https://github.com/woocommerce/woocommerce/pull/68119)
* Fix - Allow product attribute term columns to preserve non-string content. [#68273](https://github.com/woocommerce/woocommerce/pull/68273)
* Fix - Fix unnecessary repeated processing of fragments in the GraphQL side of the dual API. [#68241](https://github.com/woocommerce/woocommerce/pull/68241)
* Fix - Harden order line meta value handling in the REST API. [#68216](https://github.com/woocommerce/woocommerce/pull/68216)
* Fix - Harden REST API key authentication route handling. [#68199](https://github.com/woocommerce/woocommerce/pull/68199)
* Fix - Improve REST API key authentication for WooCommerce routes reached through custom URLs. [#68263](https://github.com/woocommerce/woocommerce/pull/68263)
* Fix - Improve WooPayments onboarding profile data handling. [#68236](https://github.com/woocommerce/woocommerce/pull/68236)
* Fix - Prevent extension gallery markup from breaking variable product add-to-cart forms. [#68219](https://github.com/woocommerce/woocommerce/pull/68219)
* Fix - Resolve REST API routes the way WordPress does when the request URI has repeated leading slashes or percent-encoded characters. [#68237](https://github.com/woocommerce/woocommerce/pull/68237)
* Fix - Restore plain-text product names in AJAX search responses. [#68191](https://github.com/woocommerce/woocommerce/pull/68191)
* Add - Add a "Send test email" action to the emails listing page (block email editor). [#66405](https://github.com/woocommerce/woocommerce/pull/66405)
* Add - Add a feature-gated public order withdrawal endpoint. [#66538](https://github.com/woocommerce/woocommerce/pull/66538)
* Add - Add a filter for product attribute taxonomy row actions in the Attributes admin table. [#66633](https://github.com/woocommerce/woocommerce/pull/66633)
* Add - Add Airwallex to payment providers recommendations in Japan. [#67359](https://github.com/woocommerce/woocommerce/pull/67359)
* Add - Add an opt-in compute_totals mode to POST /wc/v3/orders/{id}/refunds that computes per-line refund amounts server-side from quantities, validated against the order's refund history. [#67613](https://github.com/woocommerce/woocommerce/pull/67613)
* Add - Add an order withdrawal inbox notification for EU-selling live stores. [#67295](https://github.com/woocommerce/woocommerce/pull/67295)
* Add - Add a refund preview endpoint (POST /wc/v3/orders/{id}/refunds/preview) that returns server-computed refund totals and per-line breakdowns without creating a refund. [#67613](https://github.com/woocommerce/woocommerce/pull/67613)
* Add - Add beta support for videos in product galleries. [#65396](https://github.com/woocommerce/woocommerce/pull/65396)
* Add - Add CatalogSortOrder enum class for woocommerce_default_catalog_orderby option values and adopt it in the Product Collection block query builder. [#66877](https://github.com/woocommerce/woocommerce/pull/66877)
* Add - Add click tracking for the Things to do next task list. [#66125](https://github.com/woocommerce/woocommerce/pull/66125)
* Add - Add contextual image metadata to onboarding tasks via Task::get_image_url() and Task::get_image_alt(), so third-party tasks can supply their own illustration for My Home and the legacy dashboard setup widget. [#66500](https://github.com/woocommerce/woocommerce/pull/66500)
* Add - Add coupon validation filters for product_ids, product_categories, sale_items, excluded_items, excluded_product_ids, and excluded_product_categories in WC_Discounts. [#64363](https://github.com/woocommerce/woocommerce/pull/64363)
* Add - Add GoCardless as a recommended payment partner extension for GB (UK) merchants. [#67336](https://github.com/woocommerce/woocommerce/pull/67336)
* Add - Add Helcim to payment method recommendations in the United States and Canada. [#66960](https://github.com/woocommerce/woocommerce/pull/66960)
* Add - Add KOMOJU to payment providers recommendations in Japan. [#67359](https://github.com/woocommerce/woocommerce/pull/67359)
* Add - Add Mastercard Merchant Cloud as a recommended payment partner in select countries. [#64098](https://github.com/woocommerce/woocommerce/pull/64098)
* Add - Add merchant warning for order withdrawal requests outside the 14-day window. [#67160](https://github.com/woocommerce/woocommerce/pull/67160)
* Add - Adds an inbox note when a customer submits a withdraw order request [#67155](https://github.com/woocommerce/woocommerce/pull/67155)
* Add - Add StockDisplayFormat enum class for woocommerce_stock_format option values and adopt it in the Store API product schema. [#66802](https://github.com/woocommerce/woocommerce/pull/66802)
* Add - Add telemetry for legacy Select2 script usage. [#66245](https://github.com/woocommerce/woocommerce/pull/66245)
* Add - Add woocommerce_webhook_enable_delivery_log filter to disable delivery logs. [#64372](https://github.com/woocommerce/woocommerce/pull/64372)
* Add - Automatically create 9 default color terms when a new wc-visual product attribute is created, so users can start using color swatches without manually adding each color. [#65923](https://github.com/woocommerce/woocommerce/pull/65923)
* Add - Blueprint: list what an imported Blueprint will do before it runs, including how many database queries it executes and which plugins and themes it installs or activates, and state that a Blueprint should only be imported from a trusted source. [#67349](https://github.com/woocommerce/woocommerce/pull/67349)
* Add - Display user avatar in Customer Account block [#67032](https://github.com/woocommerce/woocommerce/pull/67032)
* Add - Order withdrawal form [#66783](https://github.com/woocommerce/woocommerce/pull/66783)
* Add - Pass the plain-text rendering context when personalizing transactional email subjects and preheaders so personalization tag values are not HTML-escaped in plain-text output. [#66937](https://github.com/woocommerce/woocommerce/pull/66937)
* Add - Product Price: support Responsive Styling. [#67007](https://github.com/woocommerce/woocommerce/pull/67007)
* Add - Show sale date fields in the product quick edit form. [#66931](https://github.com/woocommerce/woocommerce/pull/66931)
* Add - Show the WooCommerce.com quality badge on in-app marketplace product cards and add a "show only" filter toggle, both driven by the WooCommerce.com API. [#67658](https://github.com/woocommerce/woocommerce/pull/67658)
* Add - Store API/Checkout Block: reject the order with a 409 when the total the shopper confirmed no longer matches the total calculated on the server (e.g. a product, price or quantity changed during checkout), so shoppers are never charged an unexpected amount. [#66420](https://github.com/woocommerce/woocommerce/pull/66420)
* Update - Clarify that adding a shipping method also saves the shipping zone. [#66343](https://github.com/woocommerce/woocommerce/pull/66343)
* Update - Dismiss WooCommerce admin notices asynchronously instead of reloading the page. The query-string based dismissal is kept as a no-JS fallback. [#66625](https://github.com/woocommerce/woocommerce/pull/66625)
* Update - Email editor: delete previously generated email posts that were never customized, so those emails render from the current template files and site locale. [#67025](https://github.com/woocommerce/woocommerce/pull/67025)
* Update - Email editor: re-add the listing Preview action for emails without a saved post, rendering the current file template. [#67025](https://github.com/woocommerce/woocommerce/pull/67025)
* Update - Email editor: render emails from file-based templates until they are customized and saved, so uncustomized emails always reflect the current template files and site locale. [#67025](https://github.com/woocommerce/woocommerce/pull/67025)
* Update - Introduce new upgrade warning to the Product Image Gallery block when used in the same template with the Add to Cart + Options block [#66552](https://github.com/woocommerce/woocommerce/pull/66552)
* Update - Keep Launch Your Store and coming soon behavior enabled without legacy feature flags. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Update - Keep product editor and pattern toolkit behavior enabled without legacy feature flags. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Update - Keep stable WooCommerce Admin shell features enabled without legacy feature flags. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Update - Keep the Mini-Cart Interactivity API behavior enabled without a legacy feature flag. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Update - Keep WooCommerce Admin analytics and scheduled imports enabled without legacy feature flags. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Update - Keep WooCommerce Admin commerce recommendations enabled without legacy feature flags. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Update - Keep WooCommerce Admin onboarding tasks enabled without legacy feature flags. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Update - Link WooPayments onboarding failures to the onboarding troubleshooting guide. [#66587](https://github.com/woocommerce/woocommerce/pull/66587)
* Update - Make images in Featured Product and Featured Category blocks responsive [#66466](https://github.com/woocommerce/woocommerce/pull/66466)
* Update - Move the order withdrawal feature out of experimental status. [#67391](https://github.com/woocommerce/woocommerce/pull/67391)
* Update - Rename the amount field to total in the wc/v4/refunds creation endpoint request and response so it matches the refund preview endpoint. The v4 REST API is behind the rest-api-v4 feature flag. [#66799](https://github.com/woocommerce/woocommerce/pull/66799)
* Update - Update product brand taxonomy labels to clarify they apply to products. [#66725](https://github.com/woocommerce/woocommerce/pull/66725)
* Update - Enable variation galleries for all stores and remove the experimental feature toggle. [#67915](https://github.com/woocommerce/woocommerce/pull/67915)
* Update - Update version requirements to WordPress 7.0. [#67866](https://github.com/woocommerce/woocommerce/pull/67866)
* Update - Update the Klarna Checkout payment recommendation to its new Kustom Checkout branding, icon, and links. [#68071](https://github.com/woocommerce/woocommerce/pull/68071)
* Dev - Add a structured outcome to the cart store addCartItem action so consumers can read add success/failure directly instead of counting cart lines. [#66687](https://github.com/woocommerce/woocommerce/pull/66687)
* Dev - Add deprecated compatibility shims for retired WooCommerce Admin feature flags. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Dev - Add editor asset count and network transfer size performance metrics. [#66606](https://github.com/woocommerce/woocommerce/pull/66606)
* Dev - Add regression coverage for classic checkout shipping address selection. [#66923](https://github.com/woocommerce/woocommerce/pull/66923)
* Dev - Add stricter checks for order re-use in AbandonedCartRecovery unit tests [#67045](https://github.com/woocommerce/woocommerce/pull/67045)
* Dev - Add test coverage for the existing `woocommerce_submit_order_reviews` AJAX endpoint handled by `OrderReviews\SubmissionHandler`. [#64408](https://github.com/woocommerce/woocommerce/pull/64408)
* Dev - Add test coverage for the orders REST tax line item meta schema type union. [#66807](https://github.com/woocommerce/woocommerce/pull/66807)
* Dev - Add tests covering the payments provider base class's resilience to gateways that throw from state probes or return non-scalar option values. [#67400](https://github.com/woocommerce/woocommerce/pull/67400)
* Dev - Add unit tests covering empty customer session values overriding persisted customer data. [#65703](https://github.com/woocommerce/woocommerce/pull/65703)
* Dev - Add void to intentionally-unawaited promises for the new no-floating-promises lint rule [#66795](https://github.com/woocommerce/woocommerce/pull/66795)
* Dev - Add WC_Product::is_viewable() and is_publicly_viewable() to centralize product visibility checks. [#66173](https://github.com/woocommerce/woocommerce/pull/66173)
* Dev - Balance the output-buffer level in the WC_AJAX order-add-meta nonce test so it is no longer reported as risky. [#66425](https://github.com/woocommerce/woocommerce/pull/66425)
* Dev - Build a WooCommerce plugin artifact once and share it across local browser, API, and performance test jobs. [#65555](https://github.com/woocommerce/woocommerce/pull/65555)
* Dev - Call the parent setup and teardown from unit test classes that override them, so the per-test database transaction is opened and rolled back and test data no longer leaks between tests. [#67177](https://github.com/woocommerce/woocommerce/pull/67177)
* Dev - Clarify that variation taxonomy attribute values must use term slugs. [#67441](https://github.com/woocommerce/woocommerce/pull/67441)
* Dev - Clean up shipping method title test-only exports and add end-to-end coverage. [#67006](https://github.com/woocommerce/woocommerce/pull/67006)
* Dev - Correct the Hydration::get_rest_api_response_data() $path docblock type from array to string and drop the now-resolved PHPStan baseline entries. [#67313](https://github.com/woocommerce/woocommerce/pull/67313)
* Dev - Correct the NoticeHandler::convert_notices_to_wp_errors() docblock, which claimed it discards notices when it does not. [#67307](https://github.com/woocommerce/woocommerce/pull/67307)
* Dev - Correct the woocommerce_use_legacy_get_variations_price_hash docblock: the legacy hash is JSON-encoded, so only a callback object's public properties affect it. [#66889](https://github.com/woocommerce/woocommerce/pull/66889)
* Dev - Declare the storefront, twentytwenty and twentytwentytwo E2E themes in .wp-env.e2e.json instead of installing them from wordpress.org during provisioning. [#66859](https://github.com/woocommerce/woocommerce/pull/66859)
* Dev - Document that conditional functions simply return false when used before the main query is set up. [#67143](https://github.com/woocommerce/woocommerce/pull/67143)
* Dev - E2E: de-flake analytics-data.spec by scoping analytics assertions to the spec's own products, polling for analytics-import readiness instead of a fixed wait, and matching summary tiles independently of the comparison delta text. [#66371](https://github.com/woocommerce/woocommerce/pull/66371)
* Dev - E2E: reorganize the analytics specs across the core-serial/core-parallel pools — move analytics (with the Overview manual-import-trigger tests folded in) and analytics-overview to core-parallel, keep only analytics-settings serial, and drop the redundant analytics-access smoke test. [#66388](https://github.com/woocommerce/woocommerce/pull/66388)
* Dev - E2E tests: normalize the IS_MULTISITE env var to '1'/unset so multisite skips behave consistently regardless of how the system status endpoint reports wp_multisite. [#67339](https://github.com/woocommerce/woocommerce/pull/67339)
* Dev - Exclude email-template test fixtures from PHPUnit discovery so they no longer print markup to stdout during suite construction. [#66427](https://github.com/woocommerce/woocommerce/pull/66427)
* Dev - Fix CSV importer image unit tests that referenced an importer property removed by a concurrent change. [#66595](https://github.com/woocommerce/woocommerce/pull/66595)
* Dev - Fix flaky Mini-Cart variation-attributes e2e test by waiting for the Add to cart button to be enabled. [#67165](https://github.com/woocommerce/woocommerce/pull/67165)
* Dev - Fix flaky product-delete list-table quick-delete E2E test by scrolling the product row into view before clicking the hover-revealed Trash / Delete Permanently row action. [#66360](https://github.com/woocommerce/woocommerce/pull/66360)
* Dev - Fix POS catalog AsyncGenerator integration test to actually exercise the FeedLockException path by opening the feed with open() instead of start() (which returns void). [#66249](https://github.com/woocommerce/woocommerce/pull/66249)
* Dev - Guard the fake WC Calypso Bridge functions declared in tests, collect the LegacyProxy get_global test that was never running, and reset the REST server global the Store API controller tests replace. [#67298](https://github.com/woocommerce/woocommerce/pull/67298)
* Dev - Install and activate the plugin-check plugin via the E2E wp-env config instead of the e2e test setup script, so it is provisioned before lifecycle scripts run and no longer races with the backgrounded theme install that intermittently left `wp plugin check` unregistered in the nightly CI job. [#66443](https://github.com/woocommerce/woocommerce/pull/66443)
* Dev - Keep dev-only files out of the release zip: stop copying legacy JS test directories into built assets, and exclude lint configs and other development files from the package. [#67077](https://github.com/woocommerce/woocommerce/pull/67077)
* Dev - Migrate unit tests from react-test-renderer to the @testing-library family and drop the react-test-renderer dependency. [#66436](https://github.com/woocommerce/woocommerce/pull/66436)
* Dev - Optimize shipping partner and BNPL onboarding icon SVGs to reduce their file size. [#67357](https://github.com/woocommerce/woocommerce/pull/67357)
* Dev - Point the nightly/release 'Checks from plugin-check plugin' CI job at the full E2E wp-env config, which provisions the plugin-check plugin, so `wp plugin check` no longer fails as an unregistered subcommand after the wp-env test config split. [#66423](https://github.com/woocommerce/woocommerce/pull/66423)
* Dev - Propagate REST API errors in the order emails e2e spec instead of swallowing them; test-only, no changes to shipped code. [#67338](https://github.com/woocommerce/woocommerce/pull/67338)
* Dev - Register test filters per test rather than in setUpBeforeClass, so they survive WordPress's per-test hook restore and the assertions that depend on them stop passing for the wrong reason. [#67297](https://github.com/woocommerce/woocommerce/pull/67297)
* Dev - Remove stable WooCommerce Admin flags from the legacy feature config and load their classes directly. [#65472](https://github.com/woocommerce/woocommerce/pull/65472)
* Dev - Remove unused @wordpress/scripts devDependency. [#66756](https://github.com/woocommerce/woocommerce/pull/66756)
* Dev - Replace deprecated PHPUnit at() matcher in Store API CartItems image-filtering test with an order-independent captured-arguments assertion. [#66424](https://github.com/woocommerce/woocommerce/pull/66424)
* Dev - Replace the stale WP_ENV_TESTS_PORT override with WP_ENV_PORT in the E2E, metrics and k6 test configs. [#66829](https://github.com/woocommerce/woocommerce/pull/66829)
* Dev - Run each PHP version's unit tests as a single CI job instead of fanning them across four wp-env shards, merge the two GraphQL testsuites into one wc-phpunit-graphql, and drop the duplicated wc-phpunit-default/wc-phpunit-full umbrella suites in favour of the default suite list. [#66568](https://github.com/woocommerce/woocommerce/pull/66568)
* Dev - Run the Blocks test classes that touch WordPress state on a WordPress test case, so their database writes are rolled back and their filters no longer leak into the rest of the suite. [#67302](https://github.com/woocommerce/woocommerce/pull/67302)
* Dev - Scope product data tab locators in product-create-simple.spec.ts to the product data metabox. [#67106](https://github.com/woocommerce/woocommerce/pull/67106)
* Dev - Split the shared wp-env test config into a lean PHP-unit config (.wp-env.test.json) and a full E2E config (.wp-env.e2e.json) so the PHP-unit environment no longer provisions E2E-only plugins, themes, and setup. [#66401](https://github.com/woocommerce/woocommerce/pull/66401)
* Dev - Start a single wp-env container set for tests via `--config .wp-env.test.json` (testsEnvironment: false) instead of provisioning separate dev and tests environments; test-only tooling change, no merchant-facing impact. [#66243](https://github.com/woocommerce/woocommerce/pull/66243)
* Dev - Stop Core E2E jobs from running for changes limited to Blocks-owned E2E specs. [#66626](https://github.com/woocommerce/woocommerce/pull/66626)
* Dev - Update Blocks E2E Site Editor content locators for WordPress 7.1. [#66711](https://github.com/woocommerce/woocommerce/pull/66711)
* Dev - Update bundled WordPress UI packages for theme API compatibility. [#66361](https://github.com/woocommerce/woocommerce/pull/66361)
* Dev - Update wp-coding-standards/wpcs to 3.4.1 (security release) in the phpcs lint tooling. [#67033](https://github.com/woocommerce/woocommerce/pull/67033)
* Dev - Fix the create-post e2e test against Gutenberg nightly, where the default block appender no longer exposes the button role. [#67917](https://github.com/woocommerce/woocommerce/pull/67917)
* Dev - Remove the experimental product DataViews and classic variations redesign features. [#67909](https://github.com/woocommerce/woocommerce/pull/67909)
* Tweak - Add a translators comment for the cron interval placeholder to give translators context. [#65734](https://github.com/woocommerce/woocommerce/pull/65734)
* Tweak - Add class to payment link on the customer order details and update the template title to "Customer order details email" [#66544](https://github.com/woocommerce/woocommerce/pull/66544)
* Tweak - Hide the Downloadable product permissions meta box by default on the order edit screen. Merchants can re-enable it via Screen Options. [#66119](https://github.com/woocommerce/woocommerce/pull/66119)
* Tweak - Limit the order withdrawal content width. [#67111](https://github.com/woocommerce/woocommerce/pull/67111)
* Tweak - Lower the specificity of the payment method label image styles so payment methods can override them for their own imagery (e.g. logos rendered in a popover) without needing !important. [#66158](https://github.com/woocommerce/woocommerce/pull/66158)
* Tweak - Polish Woo Home dashboard card spacing, menus, task list states, and mobile alignment. [#66198](https://github.com/woocommerce/woocommerce/pull/66198)
* Tweak - Rename the new coupon result filters to woocommerce_coupon_is_valid_for_* so their true=valid polarity is clear and no longer collides with the woocommerce_coupon_validate_* family. [#66433](https://github.com/woocommerce/woocommerce/pull/66433)
* Tweak - Tweak order withdrawal inbox notification copy. [#67432](https://github.com/woocommerce/woocommerce/pull/67432)
* Performance - Audit the variable product datastore and apply additional optimizations. [#66675](https://github.com/woocommerce/woocommerce/pull/66675)
* Performance - Audit the variable product datastore and extend transients priming within it. [#66767](https://github.com/woocommerce/woocommerce/pull/66767)
* Performance - Audit the variable product datastore and implement optimizations to improve SQL query performance. [#66084](https://github.com/woocommerce/woocommerce/pull/66084)
* Performance - Cache payment provider lists and gateway details in a shared request cache so the dashboard setup widget, onboarding task list, and Payments settings do not repeat expensive provider checks. [#66321](https://github.com/woocommerce/woocommerce/pull/66321)
* Performance - Combine the Activity Panel's orders, reviews, and low stock count requests into a single wc-analytics/activity-panel/counts endpoint. [#66276](https://github.com/woocommerce/woocommerce/pull/66276)
* Performance - Email editor: reduce typing latency in the editor canvas. [#67031](https://github.com/woocommerce/woocommerce/pull/67031)
* Performance - Memoize CallbackUtil::get_hook_callback_signatures() per request, so repeated calls skip the reflection work that closure and invokable callbacks require. [#66882](https://github.com/woocommerce/woocommerce/pull/66882)
* Performance - Performance: Prime caches for variations images. [#66498](https://github.com/woocommerce/woocommerce/pull/66498)
* Performance - Prime post caches in structured data variation counting to avoid a database query per child variation. [#66350](https://github.com/woocommerce/woocommerce/pull/66350)
* Performance - Product Filters: expand hierarchical taxonomy filters with get_term_children() instead of a child_of query per chosen term. [#66359](https://github.com/woocommerce/woocommerce/pull/66359)
* Performance - Re-enable persistent product status counters. [#67366](https://github.com/woocommerce/woocommerce/pull/67366)
* Performance - Reduce Blocks E2E per-test database restoration overhead by running reset and snapshot import in one wp-env container invocation. [#66671](https://github.com/woocommerce/woocommerce/pull/66671)
* Performance - Reduced the number of SQL queries on the cart page for multi-product carts. [#66774](https://github.com/woocommerce/woocommerce/pull/66774)
* Performance - Resize and recompress pattern placeholder images to match their largest rendered size, cutting about 2.7 MB from the plugin package. [#66569](https://github.com/woocommerce/woocommerce/pull/66569)
* Performance - Resolve the Blocks E2E CLI container once per worker so per-test database restores can bypass repeated npm and wp-env startup. [#66699](https://github.com/woocommerce/woocommerce/pull/66699)
* Performance - Skip block and pattern registration on requests that never render blocks. Add the woocommerce_should_register_blocks filter to let extensions opt out. [#65781](https://github.com/woocommerce/woocommerce/pull/65781)
* Performance - Unify Woo blocks editor scripts and editor styles into shared editor assets. [#66200](https://github.com/woocommerce/woocommerce/pull/66200)
* Enhancement - Add background, spacing, and border style controls to the Product Details block. [#67409](https://github.com/woocommerce/woocommerce/pull/67409)
* Enhancement - CSV import now creates new variations of existing variable products when "Update existing products" is selected, instead of skipping them. [#66903](https://github.com/woocommerce/woocommerce/pull/66903)
* Enhancement - Product attributes: tailor the slug field hint to the user's language, showing an approximate character limit based on the locale's script alongside the authoritative byte limit, with a leaner description for clients that have the live byte counter. [#65814](https://github.com/woocommerce/woocommerce/pull/65814)
* Enhancement - Warn merchants when a higher-priority shipping zone prevents a narrower zone from matching. [#66348](https://github.com/woocommerce/woocommerce/pull/66348)
= 11.0.1 2026-08-10 =
**WooCommerce**
* Fix - Fixed admin settings initialization. [#67532](https://github.com/woocommerce/woocommerce/pull/67532)
* Fix - Fix order list checkbox interactions and responsive layout with WordPress 7.1. [#67364](https://github.com/woocommerce/woocommerce/pull/67364)
* Fix - Prevent password-protected products from exposing short descriptions before authentication. [#67557](https://github.com/woocommerce/woocommerce/pull/67557)
* Fix - Sanitize the single dismissible store notice before rendering so entity-encoded HTML in Store API error messages (e.g. a product name) cannot execute script on the Cart and Checkout blocks. [#67476](https://github.com/woocommerce/woocommerce/pull/67476)
* Fix - Store API: Always resolve the cart token from a consistent place. [#67550](https://github.com/woocommerce/woocommerce/pull/67550)
* Fix - Store API: improve coupon handling for order payments. [#67549](https://github.com/woocommerce/woocommerce/pull/67549)
* Fix - Tighten authorization checks on the Marketplace subscription activate endpoint. [#67567](https://github.com/woocommerce/woocommerce/pull/67567)
* Fix - Tighten authorization checks on the review-order shortcode. [#67552](https://github.com/woocommerce/woocommerce/pull/67552)
* Fix - Update product button label checks. [#67558](https://github.com/woocommerce/woocommerce/pull/67558)
* Fix - Update product image SKU match checks [#67530](https://github.com/woocommerce/woocommerce/pull/67530)
* Fix - Update session cookies hashing [#67408](https://github.com/woocommerce/woocommerce/pull/67408)
* Fix - Update theme onboarding checks [#67533](https://github.com/woocommerce/woocommerce/pull/67533)
* Fix - Validate Analytics report export arguments orderby against the target report's schema. [#67551](https://github.com/woocommerce/woocommerce/pull/67551)
* Fix - Validate the Analytics order date type option against known columns. [#67554](https://github.com/woocommerce/woocommerce/pull/67554)
* Add - Add a woocommerce_order_step_logging_enabled filter that allows disabling per-order place-order-debug logging without raising the site-wide logging level threshold. [#67410](https://github.com/woocommerce/woocommerce/pull/67410)
* Dev - Accept the WordPress 7.1 list table check-column markup in the reviews list table row test. [#67517](https://github.com/woocommerce/woocommerce/pull/67517)
* Dev - Add a PHP_CodeSniffer rule requiring the Store API cart token to be read through CartTokenUtils::get_request_cart_token(). [#67550](https://github.com/woocommerce/woocommerce/pull/67550)
* Dev - Update the JS file count test for WordPress 7.1. [#67473](https://github.com/woocommerce/woocommerce/pull/67473)
* Performance - Log writes no longer scan the whole wc-logs directory to locate their target file (the path is now constructed deterministically), and the daily place-order debug log cleanup now deletes a bounded batch per run and reschedules itself until the backlog is drained, instead of stopping at 100 files per day. [#67410](https://github.com/woocommerce/woocommerce/pull/67410)
= 11.0.0 2026-08-04 =
**WooCommerce**
* Fix - Add a compatibility shim for the removed product block editor block registry to avoid third-party extension fatals. [#65500](https://github.com/woocommerce/woocommerce/pull/65500)
* Fix - Add compatibility shims for the removed block templates PHP API to avoid third-party extension fatals. [#65503](https://github.com/woocommerce/woocommerce/pull/65503)
* Fix - Add per-period `refunds` field to the legacy REST sales report so consumers can compute net sales per day or month (fixes #27552, #42694). [#65467](https://github.com/woocommerce/woocommerce/pull/65467)
* Fix - Add referrerPolicy to address autocomplete fetch requests to ensure Referer header is sent even with restrictive site policies. [#62967](https://github.com/woocommerce/woocommerce/pull/62967)
* Fix - Addressed cache invalidation gaps for product instance caching refresh. [#65431](https://github.com/woocommerce/woocommerce/pull/65431)
* Fix - Add the WooCommerce debug group to HPOS CLI debug messages. [#65701](https://github.com/woocommerce/woocommerce/pull/65701)
* Fix - Align email order item names consistently after product thumbnails. [#66141](https://github.com/woocommerce/woocommerce/pull/66141)
* Fix - Align Woo Home in-app promo banner styling with updated admin card patterns. [#65660](https://github.com/woocommerce/woocommerce/pull/65660)
* Fix - Allow decimal stock quantities below 1 to remain in stock when the `woocommerce_stock_amount` filter is overridden with `floatval`. The integer cast inside `WC_Abstract_Product::validate_props()` truncated values like `0.5` to `0`, incorrectly flipping the product to "Out of stock". [#65023](https://github.com/woocommerce/woocommerce/pull/65023)
* Fix - Allow the "Regenerate the product attributes lookup table" tool (and the related abort and resume tools) to run via the REST API instead of failing with an "Invalid nonce" error. [#66082](https://github.com/woocommerce/woocommerce/pull/66082)
* Fix - Allow users with the `view_woocommerce_reports` capability to access the Analytics Leaderboards REST endpoint and view leaderboard data. [#65492](https://github.com/woocommerce/woocommerce/pull/65492)
* Fix - Avoid a critical Site Health warning when WooCommerce cannot verify uploads directory protection. [#65757](https://github.com/woocommerce/woocommerce/pull/65757)
* Fix - Block add to cart: adding a product that is in the cart only inside a bundle (or only as a booking, add-on configuration, or recipient-differentiated line) now adds a new standalone line instead of showing an error or changing the existing line's quantity. [#65869](https://github.com/woocommerce/woocommerce/pull/65869)
* Fix - Blocks: Fix JS crash when the store returns a non-Error value in useCollection; convert it to a proper Error instance so the error boundary handles it gracefully. [#64218](https://github.com/woocommerce/woocommerce/pull/64218)
* Fix - Blueprint: export SQL steps using a table prefix placeholder instead of the source site's database prefix, so settings can be imported on sites that use a different table prefix. [#65942](https://github.com/woocommerce/woocommerce/pull/65942)
* Fix - Cast refund amount values to float for PHP 8.1 TypeError fix. [#64362](https://github.com/woocommerce/woocommerce/pull/64362)
* Fix - Check parent product visibility in get_variation AJAX endpoint before returning variation data [#65209](https://github.com/woocommerce/woocommerce/pull/65209)
* Fix - Decode HTML entities in PTK pattern titles [#65969](https://github.com/woocommerce/woocommerce/pull/65969)
* Fix - Disable the "Continue" button on the product CSV import page until a file is selected or a server path is entered. [#66009](https://github.com/woocommerce/woocommerce/pull/66009)
* Fix - Fix 'current-menu-item' class not being added to the Shop page in the Page List block [#65996](https://github.com/woocommerce/woocommerce/pull/65996)
* Fix - Fix - Make WC_Blocks_Utils::has_block_in_page() search nested blocks recursively. [#63386](https://github.com/woocommerce/woocommerce/pull/63386)
* Fix - Fix/normalize the Store API cart/update-item route truncating decimal quantities when dispatching the cart item updated hook. [#66312](https://github.com/woocommerce/woocommerce/pull/66312)
* Fix - Fix: allow empty customer session fields to override prior values in WC_Customer_Data_Store_Session [#65633](https://github.com/woocommerce/woocommerce/pull/65633)
* Fix - Fix: ensure the dropdown inside Add to Cart + Options block render special character correctly. [#66530](https://github.com/woocommerce/woocommerce/pull/66530)
* Fix - Fix: Improve color contrast for delete link in .wc-metabox to meet WCAG 2.2 AA requirements (SC 1.4.3) [#65605](https://github.com/woocommerce/woocommerce/pull/65605)
* Fix - Fix: Sync active filters across multiple Product Filters blocks on the same page. [#65622](https://github.com/woocommerce/woocommerce/pull/65622)
* Fix - Fix a Sass build error in the Cart proceed-to-checkout block and remove an invalid script module declaration from the Product Price block. [#65749](https://github.com/woocommerce/woocommerce/pull/65749)
* Fix - Fix Checkout block shipping method UI after extension cart updates change the selected shipping rate. [#66014](https://github.com/woocommerce/woocommerce/pull/66014)
* Fix - Fix custom place order button (shortcode checkout) never submitting the order when a shipping address block is present. Client-side validation now only counts visible invalid fields, so the collapsed "Ship to a different address?" shipping fields no longer block submission. [#65933](https://github.com/woocommerce/woocommerce/pull/65933)
* Fix - Fix deferred product transient shutdown ordering before parent product sync. [#66470](https://github.com/woocommerce/woocommerce/pull/66470)
* Fix - Fix deleting a newly added custom field on the order edit screen with HPOS enabled. [#66132](https://github.com/woocommerce/woocommerce/pull/66132)
* Fix - Fix duplicate "Password Changed" admin notification email sent when a customer resets their password. [#66145](https://github.com/woocommerce/woocommerce/pull/66145)
* Fix - Fixed incorrect order counts when custom query_args are added via the order list table prepare_items query args filter. [#66207](https://github.com/woocommerce/woocommerce/pull/66207)
* Fix - Fixed quantity selector plus button size mismatch in Cart and Mini-Cart by replacing the fullwidth plus glyph with a standard plus. [#65658](https://github.com/woocommerce/woocommerce/pull/65658)
* Fix - Fix email previews for orders with downloadable products. [#65856](https://github.com/woocommerce/woocommerce/pull/65856)
* Fix - Fix encoded character in filter option label. [#66446](https://github.com/woocommerce/woocommerce/pull/66446)
* Fix - Fixes 0 value attributes from being skipped when variation is added to cart directly [#65725](https://github.com/woocommerce/woocommerce/pull/65725)
* Fix - Fixes checkout flow to not save shipping_method in customer meta [#65544](https://github.com/woocommerce/woocommerce/pull/65544)
* Fix - Fix exception message info leak to non-admin API callers, null dereferences on missing parent product and order, and duplicate date query key in OrdersTableQuery. [#65368](https://github.com/woocommerce/woocommerce/pull/65368)
* Fix - Fix express payment buttons missing a visible focus outline in Cart and Checkout. [#65901](https://github.com/woocommerce/woocommerce/pull/65901)
* Fix - Fix false "incompatible extension" notice shown in the block editor for express payment methods whose client-side `name` differs from their server-side gateway ID. The compatibility check now matches on `paymentMethodId` (falling back to `name`). [#66017](https://github.com/woocommerce/woocommerce/pull/66017)
* Fix - Fix fatal DB errors during upgrade on sites where HPOS was never enabled by adding a table existence check before attempting to restore the meta_key_value index on wp_wc_orders_meta. [#65536](https://github.com/woocommerce/woocommerce/pull/65536)
* Fix - Fix fatal error in Analytics Customers DataStore when a plain WC_Order (rather than the Overrides\Order subclass) is passed to get_or_create_customer_from_order(), and harden date_last_active against a missing date_created by cascading through date_modified and date_paid before falling back to null. [#64407](https://github.com/woocommerce/woocommerce/pull/64407)
* Fix - Fix fatal TypeError in ProductVersionStringInvalidator when a persistent object cache returns the cached variation parent ID as a string. [#65496](https://github.com/woocommerce/woocommerce/pull/65496)
* Fix - Fix fatal TypeError in wc_modify_map_meta_cap() on PHP 8+ when get_userdata() returns false for an invalid user ID. [#65506](https://github.com/woocommerce/woocommerce/pull/65506)
* Fix - Fix hierarchical selection and expansion in SearchListControl for multi-level categories [#66023](https://github.com/woocommerce/woocommerce/pull/66023)
* Fix - Fix horizontal page overflow caused by the Settings UI tab bar including its padding outside the declared width. [#65715](https://github.com/woocommerce/woocommerce/pull/65715)
* Fix - Fix insufficient color contrast on attribute placeholder text to meet WCAG 2.2 AA requirements. [#65608](https://github.com/woocommerce/woocommerce/pull/65608)
* Fix - Fix My Account endpoint page titles showing the page title instead of the endpoint heading (e.g. "Orders") in block themes when the cart is not empty. [#65949](https://github.com/woocommerce/woocommerce/pull/65949)
* Fix - Fix order totals only filling half the width on the admin order screen at mobile widths. [#65469](https://github.com/woocommerce/woocommerce/pull/65469)
* Fix - Fix oversized heading on the offline payment settings pages by setting the header font size explicitly instead of relying on the floating-header-scoped rule. [#66044](https://github.com/woocommerce/woocommerce/pull/66044)
* Fix - Fix PHP fatal in the Product Collection upsells handler when the product reference is unresolved (editor preview), and stop the cross-sells handler from leaking unresolved product references into its results. [#65909](https://github.com/woocommerce/woocommerce/pull/65909)
* Fix - Fix Product Collection block from marking the post as dirty when the editor loads. [#65524](https://github.com/woocommerce/woocommerce/pull/65524)
* Fix - Fix Product Collection inner blocks when rendered inside Query Loop post content. [#65637](https://github.com/woocommerce/woocommerce/pull/65637)
* Fix - Fix product description editor alignment in the classic product editor. [#66087](https://github.com/woocommerce/woocommerce/pull/66087)
* Fix - Fix Quantity Selector block styles when outside the Add to Cart + Options block [#66261](https://github.com/woocommerce/woocommerce/pull/66261)
* Fix - Fix refund amount validation message positioning [#66248](https://github.com/woocommerce/woocommerce/pull/66248)
* Fix - Fix silent backslash corruption in Agentic Checkout buyer/address fields and Store API checkout field validation. Calling wp_unslash() on JSON request body data that is never magic-quoted was stripping real backslashes typed by the buyer. [#65900](https://github.com/woocommerce/woocommerce/pull/65900)
* Fix - Fix silent backslash corruption in Store API (block checkout) address fields. Calling wp_unslash() on JSON body data that is never magic-quoted was stripping real backslashes from address_1, address_2, and other address fields. [#65643](https://github.com/woocommerce/woocommerce/pull/65643)
* Fix - Fix SKU duplication corrupting hyphenated SKUs. Duplicating a product with SKU `SKU-123` now correctly produces `SKU-123-1` instead of `SKU-124`. [#65423](https://github.com/woocommerce/woocommerce/pull/65423)
* Fix - Fix tax country code autocomplete to not be based on full country name [#65879](https://github.com/woocommerce/woocommerce/pull/65879)
* Fix - Fix tax state code autocomplete: allow searching by state code and scope suggestions to the selected country [#65882](https://github.com/woocommerce/woocommerce/pull/65882)
* Fix - Fix the daily log cleanup so it deletes all expired log files, not just the first 20. [#66073](https://github.com/woocommerce/woocommerce/pull/66073)
* Fix - Fix the log entry context being written and displayed as invalid JSON (e.g. with backtraces or namespaced class names) in WooCommerce > Status > Logs. [#65565](https://github.com/woocommerce/woocommerce/pull/65565)
* Fix - Fix the PSR-4 upgrade fallback fataling when a foreign Composer ClassLoader returns a non-array from getPrefixesPsr4() or a non-string from findFile(); validate both shapes so it degrades to no fallback instead. [#65674](https://github.com/woocommerce/woocommerce/pull/65674)
* Fix - Fix the WooPayments test account activation flow requiring a second click when switching to live payments. [#65895](https://github.com/woocommerce/woocommerce/pull/65895)
* Fix - Fix TypeError: string - string in get_formatted_order_total() on PHP 8.3 with refunded orders [#65507](https://github.com/woocommerce/woocommerce/pull/65507)
* Fix - Fix undefined behavior and potential infinite loop in WC_Post_Data::do_deferred_product_sync when more products are deferred for sync while a deferred sync is running. [#65664](https://github.com/woocommerce/woocommerce/pull/65664)
* Fix - For better compat, use order caps for HPOS placeholder posts. [#58432](https://github.com/woocommerce/woocommerce/pull/58432)
* Fix - Generate the POS catalog feed in chunks across several Action Scheduler actions so large catalogs no longer exceed the host request timeout or Action Scheduler's failure period mid-generation, and detect and restart stuck generation jobs that would otherwise stay pinned in progress forever. [#65860](https://github.com/woocommerce/woocommerce/pull/65860)
* Fix - Hardens Store API product/review endpoints checks. [#66065](https://github.com/woocommerce/woocommerce/pull/66065)
* Fix - Harden the in-place-upgrade PSR-4 fallback autoloader so its remaining unguarded paths degrade gracefully: a foreign Composer ClassLoader shape and a torn/partially-written class file mid-upgrade now leave the class unresolved instead of fataling, so a defensive class_exists() probe during an upgrade returns false rather than raising an error. [#65630](https://github.com/woocommerce/woocommerce/pull/65630)
* Fix - Harden types handling in WC_Tax class get-methods. [#65711](https://github.com/woocommerce/woocommerce/pull/65711)
* Fix - Hide Product Gallery arrows and thumbnails for products with one or no images in the editor. [#66108](https://github.com/woocommerce/woocommerce/pull/66108)
* Fix - Hide unnecessary WooPayments business structure selection during onboarding. [#66069](https://github.com/woocommerce/woocommerce/pull/66069)
* Fix - Improve cart table accessibility and spacing so screen readers announce line items as rows with the correct column headers. [#65689](https://github.com/woocommerce/woocommerce/pull/65689)
* Fix - Improve contrast for product IDs in the Products list row actions. [#65667](https://github.com/woocommerce/woocommerce/pull/65667)
* Fix - Improve text color contrast on the admin order edit screen so order data, line-item details, and column headers meet WCAG AA accessibility standards. [#65714](https://github.com/woocommerce/woocommerce/pull/65714)
* Fix - Invalidate the correct meta cache group when the HPOS order meta corruption guard fires, so a corrupt legacy object-cache entry is re-read from the database instead of persisting across reads. [#66554](https://github.com/woocommerce/woocommerce/pull/66554)
* Fix - Keep random Product Collection pagination consistent across pages. [#65462](https://github.com/woocommerce/woocommerce/pull/65462)
* Fix - Lock the POS catalog feed file exclusively while writing so two overlapping generation processes can no longer interleave output into a corrupt feed. [#65924](https://github.com/woocommerce/woocommerce/pull/65924)
* Fix - Log when the POS product feed directory's .htaccess cannot be updated, and avoid overwriting an unreadable or custom file during the legacy upgrade. [#65621](https://github.com/woocommerce/woocommerce/pull/65621)
* Fix - Mark grouped products add to cart table as presentational [#66096](https://github.com/woocommerce/woocommerce/pull/66096)
* Fix - Match orders and stock home panel border with other cards [#65864](https://github.com/woocommerce/woocommerce/pull/65864)
* Fix - Move logic to enable or disable the compatibility layer in block templates from 'template_redirect' to 'template_include' to be more accurate with the resolved template [#64504](https://github.com/woocommerce/woocommerce/pull/64504)
* Fix - Omit the LIMIT clause in OrdersTableQuery when an unlimited (-1) row count is requested, matching WP_Query nopaging behavior. Fixes a datatype mismatch error when the orders query runs against a SQLite database. [#64396](https://github.com/woocommerce/woocommerce/pull/64396)
* Fix - Order editing: skip reserved internal meta keys when saving order items, so they cannot be added via the "Add meta" button and stored as invisible meta. [#65471](https://github.com/woocommerce/woocommerce/pull/65471)
* Fix - Preserve Settings UI pending navigation after form-post saves. [#65910](https://github.com/woocommerce/woocommerce/pull/65910)
* Fix - Preserve the "Pending review" product status when exporting and re-importing products via CSV, instead of importing them as drafts. [#66194](https://github.com/woocommerce/woocommerce/pull/66194)
* Fix - Prevent a fatal error in the mini-cart and checkout review-order templates when a filter hooked on woocommerce_cart_item_product returns a truthy non-product value. [#65685](https://github.com/woocommerce/woocommerce/pull/65685)
* Fix - Prevent a fatal TypeError on the HPOS Orders screen when a persistent object cache returns a corrupt order or meta cache entry: invalid entries are now discarded and re-read from the database instead of breaking the page. [#66506](https://github.com/woocommerce/woocommerce/pull/66506)
* Fix - Prevent customer history metabox warnings for CPT-backed orders. [#65921](https://github.com/woocommerce/woocommerce/pull/65921)
* Fix - Prevent duplicate wc_product_start_scheduled_sale and wc_product_end_scheduled_sale actions from piling up in Action Scheduler when concurrent processes schedule sale events for the same product. [#65709](https://github.com/woocommerce/woocommerce/pull/65709)
* Fix - Prevent email previews from showing unrelated dummy products as downloadable items. [#65865](https://github.com/woocommerce/woocommerce/pull/65865)
* Fix - Prevent embedded WooPayments business verification from hanging when the Stripe loader fails. [#65863](https://github.com/woocommerce/woocommerce/pull/65863)
* Fix - Prevent fatal error on System Status page when log directory does not exist (e.g. when logging is disabled). [#65403](https://github.com/woocommerce/woocommerce/pull/65403)
* Fix - Prevent non-rate package metadata from invalidating cached shipping rates. [#65541](https://github.com/woocommerce/woocommerce/pull/65541)
* Fix - Prevent order items from being lost when order resume fails between removing items and saving the order. [#64326](https://github.com/woocommerce/woocommerce/pull/64326)
* Fix - Prevent PHP 8.5 deprecation notices when an order tax item has no matching tax rate. [#65706](https://github.com/woocommerce/woocommerce/pull/65706)
* Fix - Prevent Product Collection filter resets from clearing lifted collection controls. [#66022](https://github.com/woocommerce/woocommerce/pull/66022)
* Fix - Refresh product archive rewrite rules after the Shop page permalink changes. [#65967](https://github.com/woocommerce/woocommerce/pull/65967)
* Fix - Register a WooCommerce-scoped Composer PSR-4 fallback autoloader so that future in-place upgrades can resolve newly-added first-party Automattic\WooCommerce classes under src/ that the in-memory Jetpack classmap snapshot would otherwise miss, preventing "class not found" fatals during the upgrade request. [#65338](https://github.com/woocommerce/woocommerce/pull/65338)
* Fix - Reject attribute slugs whose taxonomy name (with the "pa_" prefix) exceeds WordPress's 32-byte limit, instead of incorrectly counting characters. This lets users create attributes with multibyte slugs (Cyrillic, Chinese, etc.) that fit within the limit, and shows a live byte count next to the slug input so users can see how close they are to the limit before submitting. [#64159](https://github.com/woocommerce/woocommerce/pull/64159)
* Fix - Reject refund IDs in Store API order authorization to prevent a fatal when wc_get_order() returns a WC_Order_Refund. [#64568](https://github.com/woocommerce/woocommerce/pull/64568)
* Fix - Remove additional WooCommerce data when uninstalling with WC_REMOVE_ALL_DATA: the product_visibility taxonomy terms, the placeholder image attachment, and additional WooCommerce user meta. The Action Scheduler tables can also be removed by additionally defining the WC_REMOVE_ACTION_SCHEDULER constant. [#65793](https://github.com/woocommerce/woocommerce/pull/65793)
* Fix - Remove the push notification preferences, shopper list, and customer email verification user meta when uninstalling with WC_REMOVE_ALL_DATA. [#66468](https://github.com/woocommerce/woocommerce/pull/66468)
* Fix - Remove unnecessary font-weight override on the mini-cart quantity badge and use a theme-resolvable color for the count text in the checkout order summary item badge. [#65647](https://github.com/woocommerce/woocommerce/pull/65647)
* Fix - Resolve downloadable file paths and Mini Cart lazy-loaded script URLs against the configured content directory and site URL instead of a hardcoded /wp-content location, so they work on non-default WordPress directory layouts (e.g. Bedrock or a custom WP_CONTENT_DIR). [#65599](https://github.com/woocommerce/woocommerce/pull/65599)
* Fix - Resolve the local pickup tax location from the order's own shipping line instead of attaching a per-call closure to woocommerce_order_get_tax_location during cart sync. [#65603](https://github.com/woocommerce/woocommerce/pull/65603)
* Fix - Respect the attribute's custom term order when creating all product variations. [#65501](https://github.com/woocommerce/woocommerce/pull/65501)
* Fix - Restore reduced stock when an order transitions to failed, so inventory held by an order that reduced stock while on-hold (e.g. an accepted-but-pending SEPA/ACH payment) is released instead of staying reduced indefinitely. [#66256](https://github.com/woocommerce/woocommerce/pull/66256)
* Fix - Sanitize instead of texturize the email address in the StoreAPI response [#66148](https://github.com/woocommerce/woocommerce/pull/66148)
* Fix - Scope the order attribution install banner button styles to the banner, so they no longer center the content of every icon+text components button rendered on WooCommerce admin pages. [#66206](https://github.com/woocommerce/woocommerce/pull/66206)
* Fix - Security hardening: pass allowed_classes => false to unserialize() in LookupDataStore to prevent PHP Object Injection via crafted cached data. [#65426](https://github.com/woocommerce/woocommerce/pull/65426)
* Fix - Send cancelled order admin emails when pending orders are cancelled. [#65855](https://github.com/woocommerce/woocommerce/pull/65855)
* Fix - Serialize mutations of the wc_pending_batch_processes option in BatchProcessingController with a short-lived database lock and a fresh re-read, so concurrent enqueue/dequeue/remove requests no longer clobber each other and silently drop or resurrect batch processors. [#66539](https://github.com/woocommerce/woocommerce/pull/66539)
* Fix - Stop re-sending customer order email notifications when restoring orders from the trash. [#65121](https://github.com/woocommerce/woocommerce/pull/65121)
* Fix - Store API: ensure the woocommerce_default_order_status filter is always removed after OrderController::create_order_from_cart(), even if order creation throws. [#65417](https://github.com/woocommerce/woocommerce/pull/65417)
* Fix - Store API: limit and de-duplicate the attribute and taxonomy count requests accepted by the products/collection-data endpoint to prevent a single request from triggering an excessive number of database queries. [#65420](https://github.com/woocommerce/woocommerce/pull/65420)
* Fix - Store API: validate address data on the checkout-order endpoint before it is persisted, so a rejected request can no longer modify an existing order's address or totals. [#65787](https://github.com/woocommerce/woocommerce/pull/65787)
* Fix - Structured data: emit a single Offer with the exact variation price (and `inProductGroupWithID`) when a variation-specific URL is requested, instead of the parent AggregateOffer price range, fixing Google Merchant "price mismatch" disapprovals. [#66043](https://github.com/woocommerce/woocommerce/pull/66043)
* Fix - Tolerate settings section registry failures when resolving the Settings UI request context, preventing update-time fatals. [#65975](https://github.com/woocommerce/woocommerce/pull/65975)
* Fix - Updates anchor rendering logic to not show an anchor tag when product image link is disabled [#65682](https://github.com/woocommerce/woocommerce/pull/65682)
* Fix - Updates the `product_shipping_class` taxonomy to be private. [#63146](https://github.com/woocommerce/woocommerce/pull/63146)
* Fix - Use a direct filesystem instance for log, import, product feed, and transient file operations inside the uploads directory, so they no longer fail on sites that have FS_METHOD set to an FTP-based method without complete credentials. [#64666](https://github.com/woocommerce/woocommerce/pull/64666)
* Fix - Use a fixed black overlay color for the drawer instead of inheriting the theme palette. [#65579](https://github.com/woocommerce/woocommerce/pull/65579)
* Fix - Use fixed colors for the coming soon footer banner instead of inheriting them from the active theme. [#65580](https://github.com/woocommerce/woocommerce/pull/65580)
* Fix - Use HTTPS for all geolocation IP-lookup and geo-IP requests. Switch the IP-lookup services (ipify, ipecho, ident, tnedi) to HTTPS and replace the HTTP-only ip-api.com geo-IP provider with the HTTPS-based country.is, so visitor IP addresses are never sent over unencrypted connections. [#66223](https://github.com/woocommerce/woocommerce/pull/66223)
* Fix - Use the checkout hold stock setting only for core checkout stock reservations. [#66048](https://github.com/woocommerce/woocommerce/pull/66048)
* Fix - v4 Orders API: align fee/shipping `can_be_refunded` with the refund validator — compare on a tax-inclusive absolute basis (so discount/negative fee lines report refundable) and round to currency precision (so a fully-refunded line is not reported refundable on a sub-cent float residue). [#65645](https://github.com/woocommerce/woocommerce/pull/65645)
* Fix - Variation bulk action "Set scheduled sale dates": block submission when the sale end date is earlier than the sale start date, and clear sale dates submitted as blank instead of storing 1970-01-01. [#66013](https://github.com/woocommerce/woocommerce/pull/66013)
* Fix - Warn when additional checkout fields are registered before the woocommerce_init action, which can load translations too early. [#66172](https://github.com/woocommerce/woocommerce/pull/66172)
* Fix - Warn when an order status key is too long and can't be stored. [#66164](https://github.com/woocommerce/woocommerce/pull/66164)
* Fix - Improve lost connection detection on WooCommerce admin screens [#66676](https://github.com/woocommerce/woocommerce/pull/66676)
* Fix - Restore 64px product thumbnails in the Mini Cart. [#66747](https://github.com/woocommerce/woocommerce/pull/66747)
* Fix - Canonicalize non-string option values in Settings UI schemas so select and radio fields show the saved selection. [#66933](https://github.com/woocommerce/woocommerce/pull/66933)
* Fix - Convert boolean Settings UI schema values the way the client does and canonicalize visibility values alongside their controller field. [#66955](https://github.com/woocommerce/woocommerce/pull/66955)
* Fix - Preserve settings navigation when Payments sections fall back from the Settings UI. [#66907](https://github.com/woocommerce/woocommerce/pull/66907)
* Fix - Prevent WordPress personal preferences from being exposed as customer metadata. [#66840](https://github.com/woocommerce/woocommerce/pull/66840)
* Fix - Show the Save button when an experimental Settings UI page falls back to the legacy renderer. [#66980](https://github.com/woocommerce/woocommerce/pull/66980)
* Fix - Stop the HPOS order meta corruption guard from treating extension-injected virtual meta rows (a meta_key and meta_value but no meta_id) as corrupt, which purged the meta cache and logged a warning on every read. [#66837](https://github.com/woocommerce/woocommerce/pull/66837)
* Fix - Fix a fatal error on the shortcode checkout when a phone, postcode, or state validated field is registered outside the billing and shipping fieldsets. [#67107](https://github.com/woocommerce/woocommerce/pull/67107)
* Fix - Temporary deactivate persistent product status counters and rollback to WordPress API usage. [#67094](https://github.com/woocommerce/woocommerce/pull/67094)
* Fix - Add no-op WC_REST_Layout_Templates_Controller and WC_REST_Products_Catalog_Controller stubs so an in-place update from 10.9.x does not fatal when the 10.9 controller list instantiates a class whose file has already been swapped away. [#67138](https://github.com/woocommerce/woocommerce/pull/67138)
* Fix - Revert the fixed end-prices order calculation changes from PR #63744, which caused tax-inclusive stores using the woocommerce_adjust_non_base_location_prices filter to charge the net amount on block/Store API checkout [#67161](https://github.com/woocommerce/woocommerce/pull/67161)
* Fix - Revert the legacy script blocking change (#64431) that broke the classic cart and checkout on sites loading a second jQuery instance. [#67363](https://github.com/woocommerce/woocommerce/pull/67363)
* Add - Add a "Send checkout recovery email" action to the order actions dropdown so merchants can manually send the Checkout Recovery email for pending or checkout-draft orders past the 1-hour abandonment threshold. [#65136](https://github.com/woocommerce/woocommerce/pull/65136)
* Add - Add a contextual Marketplace recommendation card to the WooCommerce Orders screen, shown to eligible stores based on locally-evaluated promotion rules. [#65970](https://github.com/woocommerce/woocommerce/pull/65970)
* Add - Add a native Settings UI page provider path for registered settings sections. [#65975](https://github.com/woocommerce/woocommerce/pull/65975)
* Add - Add a new transactional abandoned cart recovery email that prompts customers to complete a pending checkout, behind the new `abandoned_cart_recovery` feature flag. [#66393](https://github.com/woocommerce/woocommerce/pull/66393)
* Add - Add a recommendation card on the Abandoned cart recovery email settings page. [#65136](https://github.com/woocommerce/woocommerce/pull/65136)
* Add - Add a resend action to the temporary-password notice on My Account so customers can request a fresh change-password email. [#65821](https://github.com/woocommerce/woocommerce/pull/65821)
* Add - Add a setting to enable or disable backorder stock notification emails, plus a woocommerce_should_send_backorder_notification filter, mirroring the existing low stock and out of stock notifications. [#65891](https://github.com/woocommerce/woocommerce/pull/65891)
* Add - Add a user profile control so admins can view and set a customer's email-confirmation status. [#65824](https://github.com/woocommerce/woocommerce/pull/65824)
* Add - Add a woocommerce_format_phone_number filter and a WC_Validation::is_phone_format() method. [#66122](https://github.com/woocommerce/woocommerce/pull/66122)
* Add - Add CurrencyPosition enum class for woocommerce_currency_pos option values and adopt it in the Store API and Marketing Campaigns REST API. [#66128](https://github.com/woocommerce/woocommerce/pull/66128)
* Add - Add customer email verification, letting shoppers securely link past guest orders to their account once they confirm ownership of their email address. [#65822](https://github.com/woocommerce/woocommerce/pull/65822)
* Add - Add DimensionUnit enum class for woocommerce_dimension_unit option values and implement it across the codebase. [#66064](https://github.com/woocommerce/woocommerce/pull/66064)
* Add - Added Tax extensions recommendations. [#65786](https://github.com/woocommerce/woocommerce/pull/65786)
* Add - Add image_size query parameter to the products and product variations REST API endpoints, allowing consumers to request a specific registered WordPress image size. [#64009](https://github.com/woocommerce/woocommerce/pull/64009)
* Add - Add option disabling filter drawer on smaller screens. [#65671](https://github.com/woocommerce/woocommerce/pull/65671)
* Add - Add OrderUtil::custom_orders_table_data_sync_is_enabled() so extensions can cheaply check whether HPOS data sync is enabled without running the expensive is_custom_order_tables_in_sync() query. [#65649](https://github.com/woocommerce/woocommerce/pull/65649)
* Add - Add refund preview endpoint (POST /wc/v4/refunds/preview) for server-side refund calculation [#65335](https://github.com/woocommerce/woocommerce/pull/65335)
* Add - Add styling for settings UI shell header badges. [#65825](https://github.com/woocommerce/woocommerce/pull/65825)
* Add - Add TaxDisplayMode enum class for woocommerce_tax_display_shop/cart option values and implement it across the codebase. [#65812](https://github.com/woocommerce/woocommerce/pull/65812)
* Add - Add the foundation for POS staff management: an experimental `point_of_sale_staff` feature flag (off by default), a flag-gated orchestrator, and the `pos_*` capability access model that keys POS access on holding any `pos_*` WP capability. No runtime surface yet; the staff endpoint, attribution, and admin UI register behind the flag in follow-up changes. [#65657](https://github.com/woocommerce/woocommerce/pull/65657)
* Add - Add theme.json support to breadcrumbs block [#65460](https://github.com/woocommerce/woocommerce/pull/65460)
* Add - Add the POS preset layer to the capability model: capability bundles for the Cashier, Manager, and Admin presets, assigned or cleared per user via `woocommerce_pos_*` capabilities (never WP roles), with the assigned preset recorded in user meta and cleaned up on uninstall. Behind the off-by-default `point_of_sale_staff` feature flag. [#65661](https://github.com/woocommerce/woocommerce/pull/65661)
* Add - Add the `woocommerce_variable_product_taxes_influence_price` filter. [#65394](https://github.com/woocommerce/woocommerce/pull/65394)
* Add - Add Webflow platform to the CLI products migrator. [#64866](https://github.com/woocommerce/woocommerce/pull/64866)
* Add - Add WeightUnit enum class for woocommerce_weight_unit option values and implement it across the codebase. [#64422](https://github.com/woocommerce/woocommerce/pull/64422)
* Add - Add woocommerce_term_recount_product_count filter to _wc_term_recount. [#64374](https://github.com/woocommerce/woocommerce/pull/64374)
* Add - Add woocommerce_validate_phone filter to allow customizing phone number validation [#65817](https://github.com/woocommerce/woocommerce/pull/65817)
* Add - Allow POS catalog product feed files to be served by enabling file access on the feed directory while preventing directory listing. [#65563](https://github.com/woocommerce/woocommerce/pull/65563)
* Add - Analytics: list failed order imports in the Import historical data section with a retry action. [#65509](https://github.com/woocommerce/woocommerce/pull/65509)
* Add - Customers can now unsubscribe from Checkout Recovery emails via a one-click link in the email footer. [#65136](https://github.com/woocommerce/woocommerce/pull/65136)
* Add - Inject default sibling-section navigation into native Settings UI page schemas that omit shell.sectionNavigation. [#65975](https://github.com/woocommerce/woocommerce/pull/65975)
* Add - Make per-line `refund_total` optional on POST /wc/v4/refunds. When omitted, the backend computes the tax-inclusive refund total from the order line item's unit price × quantity. The legacy explicit form (refund_total without quantity) is preserved for v3-style callers. [#65439](https://github.com/woocommerce/woocommerce/pull/65439)
* Add - POST /wc/v4/refunds/preview: accept refund_total per line item for partial-amount previews (quantity now optional when refund_total is provided). For the quantity and tax-inclusive refund_total forms, preview and create split tax by the line's stored total/tax ratio and round amounts identically, so a previewed amount matches the created refund to the cent. [#65645](https://github.com/woocommerce/woocommerce/pull/65645)
* Add - Register a GDPR privacy exporter and eraser for shopper lists so admin Export/Erase Personal Data tools cover saved-for-later and wishlist data. [#65251](https://github.com/woocommerce/woocommerce/pull/65251)
* Add - Schedule the abandoned cart recovery email to send 2 hours after a pending order is created, and cancel the pending send when the order leaves the pending status. [#66393](https://github.com/woocommerce/woocommerce/pull/66393)
* Update - Customer email verification now confirms via a one-time login-gated link instead of a 6-digit code. [#65971](https://github.com/woocommerce/woocommerce/pull/65971)
* Update - Deprecate the Point of Sale feature flag and remove its toggle from WooCommerce settings; POS-related functionality (settings page, product visibility, and transactional emails) is now always enabled. The flag setting remains readable via the REST API for mobile app compatibility. [#65573](https://github.com/woocommerce/woocommerce/pull/65573)
* Update - Load the WordPress Design System tokens stylesheet on WooCommerce settings pages so Settings UI styles consume real design tokens. [#66542](https://github.com/woocommerce/woocommerce/pull/66542)
* Update - Move several WooCommerce admin status notices to Site Health and show regeneration progress in status tools; deprecate the related WC_Admin_Notices/WC_Regenerate_Images notice callbacks and stop honoring the woocommerce_hide_* notice dismissal filters [#64758](https://github.com/woocommerce/woocommerce/pull/64758)
* Update - Remove @woocommerce/create-product-editor-block package [#65435](https://github.com/woocommerce/woocommerce/pull/65435)
* Update - Remove the deprecated product block editor feature, package, routes, assets, and extension APIs. [#65500](https://github.com/woocommerce/woocommerce/pull/65500)
* Update - Render settings UI section cards with WordPress Design System components behind the settings-ui feature flag. [#66456](https://github.com/woocommerce/woocommerce/pull/66456)
* Update - Replace PanelBody with ToolsPanel in All Reviews, Reviews by Category, and Reviews by Product inspector controls. [#65799](https://github.com/woocommerce/woocommerce/pull/65799)
* Update - Replace PanelBody with ToolsPanel in Stock Filter inspector controls. [#65625](https://github.com/woocommerce/woocommerce/pull/65625)
* Update - Replace PanelBody with ToolsPanel in the PageSelector component. [#64935](https://github.com/woocommerce/woocommerce/pull/64935)
* Update - Update Algeria states from 48 to 58 wilayas; also correct DZ-11 spelling. [#65385](https://github.com/woocommerce/woocommerce/pull/65385)
* Update - Update Product Filter Status block labels to use availability wording. [#65803](https://github.com/woocommerce/woocommerce/pull/65803)
* Update - Update product publish panel catalog visibility layout and extension row ordering. [#66080](https://github.com/woocommerce/woocommerce/pull/66080)
* Update - Update the Action Scheduler package to version 4.0.0. [#65790](https://github.com/woocommerce/woocommerce/pull/65790)
* Update - Update the WordPress package catalog to WordPress 6.9 package versions. [#65481](https://github.com/woocommerce/woocommerce/pull/65481)
* Update - Use the standard WordPress UI Notice for payment method eligibility notices in WooPayments onboarding. [#66016](https://github.com/woocommerce/woocommerce/pull/66016)
* Update - Settings UI: hide the shell header for pages registered at the top level of settings, which keep the classic section links and a save button at the bottom of the page. Payments drill-down pages show the header with breadcrumbs in place of the top-level settings tabs. [#66662](https://github.com/woocommerce/woocommerce/pull/66662)
* Dev - Add delivery-agnostic ProductShapeMapperInterface to the ProductFeed framework, deprecating ProductMapperInterface in its favor. [#65720](https://github.com/woocommerce/woocommerce/pull/65720)
* Dev - Add internal helper methods on Refunds\DataUtils to support the upcoming refund preview endpoint. [#65334](https://github.com/woocommerce/woocommerce/pull/65334)
* Dev - Add to Cart + Options: add extra e2e tests to cover skipped unit tests [#66118](https://github.com/woocommerce/woocommerce/pull/66118)
* Dev - Audit Action Scheduler APIs usage. [#65831](https://github.com/woocommerce/woocommerce/pull/65831)
* Dev - Bump grunt-contrib-cssmin to 4.x (clean-css 5) so the admin CSS pipeline preserves @container at-rules. [#65842](https://github.com/woocommerce/woocommerce/pull/65842)
* Dev - Deprecate the Automattic\WooCommerce\Blocks\QueryFilters class. [#65598](https://github.com/woocommerce/woocommerce/pull/65598)
* Dev - Fix product-reviews "can delete a product review" E2E flake by waiting for the trash AJAX to commit before navigating to the Trash view. [#65911](https://github.com/woocommerce/woocommerce/pull/65911)
* Dev - Fix the Blocks e2e nightly suite: mount the released plugin at the canonical `woocommerce` folder via a wp-env mapping, instead of letting wp-env name the plugin folder after the release zip (e.g. `woocommerce-trunk-nightly`), which broke the test setup's plugin-path assumptions. The generated test translations are mapped into the plugin's languages directory the same way. Also resolve the active plugin path (WC_ABSPATH) for the sample product import. [#65798](https://github.com/woocommerce/woocommerce/pull/65798)
* Dev - Force immediate analytics import mode in the analytics-data E2E spec so its orders import deterministically regardless of the store's scheduled-import default; test-only, no changes to shipped code. [#66097](https://github.com/woocommerce/woocommerce/pull/66097)
* Dev - Harden Blocks non-null assertion lint rule to error. [#66010](https://github.com/woocommerce/woocommerce/pull/66010)
* Dev - Migrate Blocks e2e leaf utils (constants, test, types, wp-cli, get-test-translation, request-utils, navigation) and content-templates into the Core e2e suite under a blocks/ namespace; test-only, no changes to shipped code. [#65628](https://github.com/woocommerce/woocommerce/pull/65628)
* Dev - Migrate Blocks e2e non-module assets (themes, test plugins, test data, lint rules) into the Core e2e suite under a blocks/ namespace; test-only, no changes to shipped code. [#65442](https://github.com/woocommerce/woocommerce/pull/65442)
* Dev - Migrate Blocks e2e page-object utils (admin, editor, frontend, local-pickup, mini-cart, performance, shipping) into the Core e2e suite under utils/blocks/; test-only, no changes to shipped code. [#65571](https://github.com/woocommerce/woocommerce/pull/65571)
* Dev - Migrate Blocks e2e specs into the Core e2e suite under tests/blocks and add a core testIgnore guard so the core e2e project does not collect them; the Blocks suite keeps running them from the new location. Test-only, no changes to shipped code. [#65670](https://github.com/woocommerce/woocommerce/pull/65670)
* Dev - Migrate offline payment settings forms to DataForm. [#65731](https://github.com/woocommerce/woocommerce/pull/65731)
* Dev - Mount E2E helper plugins as a directory and provision wp-cli.yml in-container so single-file Docker mounts no longer surface as empty files under gRPC FUSE. [#65807](https://github.com/woocommerce/woocommerce/pull/65807)
* Dev - Prepare Marketplace JSX and ref types for React 19 compatibility. [#65401](https://github.com/woocommerce/woocommerce/pull/65401)
* Dev - Remove @woocommerce/integrate-plugin package [#65434](https://github.com/woocommerce/woocommerce/pull/65434)
* Dev - Remove benign errors from the Blocks e2e build log: make provisioning idempotent (customer user and Test Helper APIs plugin) across the Core and Blocks setup paths, drop a redundant `--fields=id` from the product attribute listing, and navigate the page away before the per-test DB reset so late Store API requests stop logging false "not a valid JSON response" errors. [#65861](https://github.com/woocommerce/woocommerce/pull/65861)
* Dev - Remove deprecated Blocks bootstrap dependencies. [#65653](https://github.com/woocommerce/woocommerce/pull/65653)
* Dev - Remove redundant basic E2E smoke test; its checks are implicitly covered by other specs. [#65810](https://github.com/woocommerce/woocommerce/pull/65810)
* Dev - Remove the unused block templates admin package and PHP API. [#65503](https://github.com/woocommerce/woocommerce/pull/65503)
* Dev - Remove the unused coming soon newsletter template feature flag. [#65461](https://github.com/woocommerce/woocommerce/pull/65461)
* Dev - Rename the e2e test directory from e2e-pw to e2e and repoint all references; test-only, no changes to shipped code. [#65844](https://github.com/woocommerce/woocommerce/pull/65844)
* Dev - Set the product's comment_status via WP-CLI in the product-rating E2E specs instead of clicking product-data tabs that race against admin JS initialization; test-only, no changes to shipped code. [#66097](https://github.com/woocommerce/woocommerce/pull/66097)
* Dev - Stabilize Blocks E2E site editor saves when the save panel opens with multiple dirty entities. [#65619](https://github.com/woocommerce/woocommerce/pull/65619)
* Dev - Stabilize the non-UTC refund sales report unit test so it no longer fails depending on the time of day CI runs; test-only, no changes to shipped code. [#66113](https://github.com/woocommerce/woocommerce/pull/66113)
* Dev - Stabilize two e2e specs in the core-parallel pool against concurrent-worker pollution: customer-list (pin the customers report page size on the URL so the list assertions and CSV download stay deterministic regardless of how many customers other workers create) and create-order (wait for the line item to render before saving so the order is never persisted with a 0-quantity line). [#66093](https://github.com/woocommerce/woocommerce/pull/66093)
* Dev - tests: move coupons test coverage from e2e to php unit [#65592](https://github.com/woocommerce/woocommerce/pull/65592)
* Dev - Use idempotent checkout address helpers in checkout e2e tests. [#65548](https://github.com/woocommerce/woocommerce/pull/65548)
* Dev - Use the public postcode-validator API instead of reaching into the package's internal CJS regex map. [#65382](https://github.com/woocommerce/woocommerce/pull/65382)
* Dev - Warn when deprecated AssetDataRegistry key check arguments are explicitly provided. [#66036](https://github.com/woocommerce/woocommerce/pull/66036)
* Dev - De-flake blocks e2e tests. [#66584](https://github.com/woocommerce/woocommerce/pull/66584)
* Dev - Fix email editor E2E tests on WordPress 7.1: update the preview "open in new tab" tracking selector to the new menu item and use a single-line block edit so the Save button enables. [#67061](https://github.com/woocommerce/woocommerce/pull/67061)
* Tweak - Add aria-label to payment methods list for improved screen reader accessibility [#65201](https://github.com/woocommerce/woocommerce/pull/65201)
* Tweak - Add proper ARIA roles and scope attributes to cart table headers for screen reader accessibility (WCAG 1.3.1) [#65364](https://github.com/woocommerce/woocommerce/pull/65364)
* Tweak - Align the Data status box with the Date range filter at mid-range viewports, drop the trailing colons on both labels, use a consistent "M j at H:i" date format, and pick up WP component defaults for the Update now button and bar typography. [#64846](https://github.com/woocommerce/woocommerce/pull/64846)
* Tweak - Align the Order Edit meta boxes with WordPress 7.0 admin design and preserve the legacy order trash action surface with sentence-case copy. [#64564](https://github.com/woocommerce/woocommerce/pull/64564)
* Tweak - Always show the email Reply-to settings, regardless of whether the email block editor feature is enabled. [#65122](https://github.com/woocommerce/woocommerce/pull/65122)
* Tweak - Enable the product object caching feature by default for newly installed stores. Existing stores are unaffected and keep the opt-in default. [#65445](https://github.com/woocommerce/woocommerce/pull/65445)
* Tweak - Improve the label and description of the WooCommerce Analytics setting on the Features settings screen. [#65887](https://github.com/woocommerce/woocommerce/pull/65887)
* Tweak - Make the Abandoned cart recovery feature experimental and opt-in only; it is no longer enabled automatically on new installs. [#65521](https://github.com/woocommerce/woocommerce/pull/65521)
* Tweak - Minor enhancements to product swatches and editing Color attributes in the editor [#65693](https://github.com/woocommerce/woocommerce/pull/65693)
* Tweak - Move the "Display site visibility badge in admin bar" toggle into the Site Visibility settings tab and align the toggle with its label. [#65708](https://github.com/woocommerce/woocommerce/pull/65708)
* Tweak - Reduce the visual weight of legacy admin empty states to align with WordPress admin styling. [#64645](https://github.com/woocommerce/woocommerce/pull/64645)
* Tweak - Remove "and in reviews" from the display name description in My Account if product reviews are not active [#66233](https://github.com/woocommerce/woocommerce/pull/66233)
* Tweak - Remove the disabled use-wp-horizon feature flag. [#65491](https://github.com/woocommerce/woocommerce/pull/65491)
* Tweak - Remove the trailing colon from FilterPicker labels to match WordPress 7.0 form-field labeling. [#66482](https://github.com/woocommerce/woocommerce/pull/66482)
* Tweak - Rename Products (Beta) block to Products (Deprecated) [#65523](https://github.com/woocommerce/woocommerce/pull/65523)
* Tweak - Rename visual-attribute-color-picker script to visual-attribute-picker [#65494](https://github.com/woocommerce/woocommerce/pull/65494)
* Tweak - Restore a generic blank-state icon style so extension-supplied icon glyphs render at the refreshed 32px scale. [#66527](https://github.com/woocommerce/woocommerce/pull/66527)
* Tweak - Show WooCommerce Status and Recent Reviews dashboard widgets during store setup. [#65704](https://github.com/woocommerce/woocommerce/pull/65704)
* Tweak - Standardize copy for Product Filters descriptions. [#65925](https://github.com/woocommerce/woocommerce/pull/65925)
* Tweak - Update the Settings UI section card border radius to match DataForm styling. [#66042](https://github.com/woocommerce/woocommerce/pull/66042)
* Tweak - Abandoned cart recovery: remove a redundant order lookup on every order status transition. [#67017](https://github.com/woocommerce/woocommerce/pull/67017)
* Performance - Audit wc_product_dropdown_categories usages in admin [#66202](https://github.com/woocommerce/woocommerce/pull/66202)
* Performance - Batch-prime product image attachment caches across the products collection endpoints (Store API, REST v3, v4) and reuse the shared helper in the Store API cart. [#65436](https://github.com/woocommerce/woocommerce/pull/65436)
* Performance - Centralize wp_count_posts invocations towards products. [#65894](https://github.com/woocommerce/woocommerce/pull/65894)
* Performance - Coalesce repeated product transient deletion during REST variation batch writes. [#65591](https://github.com/woocommerce/woocommerce/pull/65591)
* Performance - Disabled counters in the category filter on the admin products page to address performance issues with large product catalogs. [#66176](https://github.com/woocommerce/woocommerce/pull/66176)
* Performance - Harden the conditions required to invoke \Automattic\WooCommerce\Internal\Utilities\ProductUtil::get_counts_for_type throughout the codebase. [#65885](https://github.com/woocommerce/woocommerce/pull/65885)
* Performance - HPOS: speed up the order admin list on large stores by rewriting multi-status order queries as per-status UNIONs. [#65663](https://github.com/woocommerce/woocommerce/pull/65663)
* Performance - Improve the performance of the analytics Products and Variations reports by batch-priming product caches. [#65468](https://github.com/woocommerce/woocommerce/pull/65468)
* Performance - Limit layered navigation count cache growth for product attributes and brands. [#65552](https://github.com/woocommerce/woocommerce/pull/65552)
* Performance - Optimized JetPack connection status retrieval on admin pages. [#65505](https://github.com/woocommerce/woocommerce/pull/65505)
* Performance - Optimized SQL generation in \Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableQuery by removing 'group by' and 'limit' clauses when they are not required. [#65413](https://github.com/woocommerce/woocommerce/pull/65413)
* Performance - Optimized the stock reservation SQL to prevent blocking order status updates. [#65325](https://github.com/woocommerce/woocommerce/pull/65325)
* Performance - Product Collection: Reduce editor bundle cost [#66150](https://github.com/woocommerce/woocommerce/pull/66150)
* Performance - Reduced the number of SQL queries on the cart and checkout pages in the store, as well as on admin pages, by adding cache priming. [#65883](https://github.com/woocommerce/woocommerce/pull/65883)
* Performance - Reduced the number of SQL queries required to fetch tax rates in the cart and during checkout. [#65558](https://github.com/woocommerce/woocommerce/pull/65558)
* Performance - Store API: skip initializing the available payment gateways on checkout requests that do not provide a payment method. [#65931](https://github.com/woocommerce/woocommerce/pull/65931)
* Performance - Update the admin to use persistent product status counters to improve performance with large product catalogs. [#65957](https://github.com/woocommerce/woocommerce/pull/65957)
* Performance - Push notifications: Improve performance of get_tokens_for_roles(): the role lookup is now restricted to users that actually own push tokens. [#66857](https://github.com/woocommerce/woocommerce/pull/66857)
* Enhancement - Add a filter to hide shipping details in email previews. [#65857](https://github.com/woocommerce/woocommerce/pull/65857)
* Enhancement - Add unique CSS classes to the order data meta-box columns: order_data_column_general, order_data_column_billing, and order_data_column_shipping. [#65859](https://github.com/woocommerce/woocommerce/pull/65859)
* Enhancement - Updated Product Image block to use larger thumbnails [#66191](https://github.com/woocommerce/woocommerce/pull/66191)
* Enhancement - `woocommerce_add_to_cart_quantity` filter now receives `$variation_id`. [#63679](https://github.com/woocommerce/woocommerce/pull/63679)
= 10.9.4 2026-07-07 =
**WooCommerce**
* Fix - Fix is_vat_exempt being not correctly applied during block checkout for logged-in users. [#66342](https://github.com/woocommerce/woocommerce/pull/66342)
= 10.9.3 2026-07-03 =
**WooCommerce**
* Fix - Fix a fatal error in WC_Email::send_notification() when a filtered mail callback returns a non-bool value. [#66219](https://github.com/woocommerce/woocommerce/pull/66219)
= 10.9.2 2026-07-02 =
**WooCommerce**
* Fix - Prevent update-time fatal errors by guarding new settings SDK classes and preserving the removed legacy settings API controller as a no-op compatibility stub. [#66081](https://github.com/woocommerce/woocommerce/pull/66081)
* Update - Enable push notifications by default and deprecate feature flag. [#66088](https://github.com/woocommerce/woocommerce/pull/66088)
= 10.9.1 2026-06-24 =
**WooCommerce**
* Fix - Remove get_entry_count() from the product feed FeedInterface to restore backward compatibility. Requiring the method broke third-party implementations (e.g. older WooCommerce Stripe Gateway versions) that implement the interface without it. The method remains available on JsonFileFeed. [#65972](https://github.com/woocommerce/woocommerce/pull/65972)
= 10.9.0 2026-06-23 =
**WooCommerce**
* Fix - Add defensive validation to order action links in order-details.php template to handle malformed entries from third-party extensions. [#64492](https://github.com/woocommerce/woocommerce/pull/64492)
* Fix - Add global HTML translate attribute to currency so it doesn't get auto translated [#62037](https://github.com/woocommerce/woocommerce/pull/62037)
* Fix - Add install_plugins capability check to the install-jp-and-wcs-plugins inbox-note action handler so the latent installer call is unreachable to users without the `install_plugins` capability. [#64428](https://github.com/woocommerce/woocommerce/pull/64428)
* Fix - Add product type guard to VariationSelectorAttribute block to prevent fatal error when rendered for non-variable products. [#64410](https://github.com/woocommerce/woocommerce/pull/64410)
* Fix - Add stock status and product status indicators to the admin order product selector so admins can see which variations are out of stock, on backorder, or disabled. [#64426](https://github.com/woocommerce/woocommerce/pull/64426)
* Fix - Add `small` to ALLOWED_TAGS to fix price suffix stripped on variable products. [#64540](https://github.com/woocommerce/woocommerce/pull/64540)
* Fix - Adopt 2px border-radius on Woo custom inputs and buttons to align with WP 7.0 [#64417](https://github.com/woocommerce/woocommerce/pull/64417)
* Fix - Allow the v4 products endpoint to filter by multiple stock statuses. [#65155](https://github.com/woocommerce/woocommerce/pull/65155)
* Fix - Announce order note save success to screen readers when adding a note from the order admin meta box, distinguishing between private notes and customer-emailed notes (WCAG 4.1.3). [#64891](https://github.com/woocommerce/woocommerce/pull/64891)
* Fix - Avoid priming transient option caches for variable products when a persistent object cache is active, which prevents unbounded growth of the notoptions cache. [#65440](https://github.com/woocommerce/woocommerce/pull/65440)
* Fix - Catalog Sorting block: prevent 404s for non-existent JS and CSS asset files. [#64682](https://github.com/woocommerce/woocommerce/pull/64682)
* Fix - Clear store_stock push notification dedup meta when product stock recovers above its threshold so future downward crossings emit a fresh push. [#64727](https://github.com/woocommerce/woocommerce/pull/64727)
* Fix - Don't leak title, price, permalink, or image for non-public products (draft, private, password-protected, etc.) in shopper-list responses. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Drop the outdated "app version needs to be 15.7" helper text from the mobile-app modal QR view and surface the underlying Jetpack error in the magic-link failure notice so support and merchants can diagnose the problem instead of hitting a generic retry message. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Fix - Fix account dropdown button height mismatch with search input in Marketplace header [#64420](https://github.com/woocommerce/woocommerce/pull/64420)
* Fix - Fix Add to Cart Button not working on Products (Beta) block [#65525](https://github.com/woocommerce/woocommerce/pull/65525)
* Fix - Fix Analytics order stats for lump-sum full refunds (e.g. order status set to Refunded) so net revenue uses product net, not the full refund total. [#64106](https://github.com/woocommerce/woocommerce/pull/64106)
* Fix - Fix array to string conversion warning in wc_query_string_form_fields() when URL contains nested query string parameters. [#64010](https://github.com/woocommerce/woocommerce/pull/64010)
* Fix - Fix attribute escaping in product gallery dialog images and remove the broken loading attribute so dialog images render eagerly as intended [#64673](https://github.com/woocommerce/woocommerce/pull/64673)
* Fix - Fix a typo in the `site_not_connected` installer error code (previously emitted as `site_not_connnected`). WooCommerce.com continues to accept both spellings, so existing sites are unaffected. [#64180](https://github.com/woocommerce/woocommerce/pull/64180)
* Fix - Fix BatchProcessingController::enqueue_processor() appending duplicate entries to the wc_pending_batch_processes option. [#65543](https://github.com/woocommerce/woocommerce/pull/65543)
* Fix - Fix categories report filtering when term_id differs from term_taxonomy_id [#64548](https://github.com/woocommerce/woocommerce/pull/64548)
* Fix - Fix Customers analytics screen failing to render when a customer record contains a country value that collides with an Array index or property name. [#64633](https://github.com/woocommerce/woocommerce/pull/64633)
* Fix - Fix handling of array input types in the dual API [#64735](https://github.com/woocommerce/woocommerce/pull/64735)
* Fix - Fix highest shipping cost shown before address entry when using Local Pickup with block checkout. Also improves shipping rate selection UX with optimistic UI updates in the order totals. [#64092](https://github.com/woocommerce/woocommerce/pull/64092)
* Fix - Fix Interactivity API hydration warning on shopper-collection rows for items without product variations. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Fix JS TypeError when product excerpt metabox is removed. [#64346](https://github.com/woocommerce/woocommerce/pull/64346)
* Fix - Fix locale leak in WC_Email_New_Order::trigger(): restore_locale() was not called when the email was skipped due to already being sent, leaving the locale set for the remainder of the request. [#64859](https://github.com/woocommerce/woocommerce/pull/64859)
* Fix - Fix PHP 8.1+ deprecation notice when passing null to preg_match in WC_Eval_Math. [#64158](https://github.com/woocommerce/woocommerce/pull/64158)
* Fix - Fix PHP warning for undefined array key fixedWidth in ProductCollection Renderer when using Fixed Width + Carousel [#64432](https://github.com/woocommerce/woocommerce/pull/64432)
* Fix - Fix report transient cache key instability caused by DateTime serialization with microseconds in get_cache_key [#64430](https://github.com/woocommerce/woocommerce/pull/64430)
* Fix - Fix responsive layout issue on Status admin screen notice buttons [#65298](https://github.com/woocommerce/woocommerce/pull/65298)
* Fix - Fix tax rate labels containing percent signs (e.g. "%15 KDV" in Turkish locale) being corrupted when stored on order items. [#64154](https://github.com/woocommerce/woocommerce/pull/64154)
* Fix - Fix typo: "recieved" corrected to "received" in code comments and strings. [#64433](https://github.com/woocommerce/woocommerce/pull/64433)
* Fix - Fix Variation Selector: Attribute Name colors not being applied in the editor [#65010](https://github.com/woocommerce/woocommerce/pull/65010)
* Fix - Fix wc_customer_bought_product() returning false for unlinked guest orders when a matching user ID is supplied. [#65531](https://github.com/woocommerce/woocommerce/pull/65531)
* Fix - Fix webhook topic validator accepting `coupon.published`, `customer.published`, `customer.restored`, and `order.published` topics that have no registered hook, causing webhooks to save as Active but never deliver. The validator now derives the default-pair allowlist from the new `WC_Webhook::get_default_topic_hooks()` static, so extensions that register hooks for those pairs via `woocommerce_webhook_topic_hooks` are honored automatically. [#64505](https://github.com/woocommerce/woocommerce/pull/64505)
* Fix - Fix `cartItemScreenReaderPrice` filter output being announced by screen readers as separate fragments instead of a single sentence. [#64480](https://github.com/woocommerce/woocommerce/pull/64480)
* Fix - Fix `customer_note` query arg being silently ignored when using HPOS order storage. [#64467](https://github.com/woocommerce/woocommerce/pull/64467)
* Fix - Hide the WordPress admin footer text on the experimental All Products dashboard. [#64705](https://github.com/woocommerce/woocommerce/pull/64705)
* Fix - Honor the configured product count color for the Mini Cart badge on the frontend when using the Interactivity API. [#64411](https://github.com/woocommerce/woocommerce/pull/64411)
* Fix - Honor `#[ArrayOf]` on query and mutation return types in the GraphQL API builder [#65235](https://github.com/woocommerce/woocommerce/pull/65235)
* Fix - Improve diagnostics for failed analytics order imports. [#64588](https://github.com/woocommerce/woocommerce/pull/64588)
* Fix - Keep product dashboard snackbar notices visible above the quick edit drawer. [#65220](https://github.com/woocommerce/woocommerce/pull/65220)
* Fix - Keep Store API visual attribute term data opt-in with `__experimental_visual`. [#65432](https://github.com/woocommerce/woocommerce/pull/65432)
* Fix - Make the payment provider setup-required error message more actionable. [#64799](https://github.com/woocommerce/woocommerce/pull/64799)
* Fix - Preserve deferred transactional email object arguments when queued through Action Scheduler. [#64820](https://github.com/woocommerce/woocommerce/pull/64820)
* Fix - Preserve the 'X' check digit in ISBN-10 identifiers entered in the GTIN/UPC/EAN/ISBN product field. The server-side sanitizer, classic editor validation, and block editor input pattern previously stripped or rejected 'X', silently truncating valid ISBN-10s such as 157249042X. [#64889](https://github.com/woocommerce/woocommerce/pull/64889)
* Fix - Prevent a `_load_textdomain_just_in_time` notice from firing on every request when the GraphQL API feature is registered. [#64881](https://github.com/woocommerce/woocommerce/pull/64881)
* Fix - Prevent the Marketplace product card title focus ring from being clipped. [#64788](https://github.com/woocommerce/woocommerce/pull/64788)
* Fix - Product data and Coupon data tabs: restore a visible keyboard focus indicator. The tabs previously suppressed the WordPress core focus ring without providing a replacement, leaving keyboard users without a perceivable indicator (WCAG 2.4.7, 2.4.11, 1.4.1). [#64890](https://github.com/woocommerce/woocommerce/pull/64890)
* Fix - Product image tooltip: set aria-label via DOM attribute instead of interpolating the translated string into the HTML template, preventing broken markup when the translation contains characters such as quotes. [#64888](https://github.com/woocommerce/woocommerce/pull/64888)
* Fix - Promote the simple-product offer's price and currency to the top of the JSON-LD offer so Google Search Console accepts the structured data. [#65123](https://github.com/woocommerce/woocommerce/pull/65123)
* Fix - Re-add the analytics full refund fix tool to Status > Tools, shown only for stores with old refund data. [#64143](https://github.com/woocommerce/woocommerce/pull/64143)
* Fix - Relax MCP `outputSchema` published for REST-derived abilities so `structuredContent` validates in MCP clients (Cursor, Claude Desktop): strip `format: date-time` and `format: uri` (WooCommerce REST dates omit timezone and URI fields can be empty), and widen every declared scalar `type` to the full JSON type union plus `null` so fields whose declared type disagrees with the controller's actual response — including ones returned as arrays or objects, like `meta_data[].display_value` — still validate. [#64787](https://github.com/woocommerce/woocommerce/pull/64787)
* Fix - Remove duplicate tfoot elements in the My Account order details template. [#64358](https://github.com/woocommerce/woocommerce/pull/64358)
* Fix - Remove unnecessary gap in Product Filters block [#64599](https://github.com/woocommerce/woocommerce/pull/64599)
* Fix - Replace developer-facing "Plugin API call failed" error with merchant-friendly copy that explains the issue and suggests next steps. [#64186](https://github.com/woocommerce/woocommerce/pull/64186)
* Fix - Replace hardcoded /wp-content path with WP_CONTENT_DIR constant. [#64376](https://github.com/woocommerce/woocommerce/pull/64376)
* Fix - Set `cartPageHasSavedForLater` from the Shopper Collection block itself so the cart "Save for later" link shows when the block is auto-injected as a hooked block (which `has_block()` does not detect). [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Shopper Collection: skip rendering and asset enqueue for logged-out shoppers. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Skip scheduling and sending the customer review-request email when the order has no reviewable items (every product has reviews disabled per-product or site-wide, or every reviewable item is already reviewed for that order). [#64960](https://github.com/woocommerce/woocommerce/pull/64960)
* Fix - Stop rendering thumbnail images in inbox notes; deprecate `Note::set_image()`, `Note::get_image()`, `Note::set_layout()`, `Note::get_layout()` and the `'thumbnail'` layout value, all of which will be removed in a future release. [#64443](https://github.com/woocommerce/woocommerce/pull/64443)
* Fix - Store API: reuse the session's pending/failed order on checkout POST retry instead of creating a duplicate. Also restore session precedence for `payment_method` in the deferred-draft response so a shopper's PATCH-time selection isn't overwritten by their saved default. [#64806](https://github.com/woocommerce/woocommerce/pull/64806)
* Fix - Store fulfillment datetimes as UTC and return them from the REST API as ISO 8601 with an explicit `Z` suffix so they render correctly on non-UTC sites. [#64260](https://github.com/woocommerce/woocommerce/pull/64260)
* Fix - Update Featured Product and Featured Category block previews in the inserter so they better match the frontend [#64206](https://github.com/woocommerce/woocommerce/pull/64206)
* Fix - Validate product_query before using in WC_Product_Data_Store_CPT. [#64360](https://github.com/woocommerce/woocommerce/pull/64360)
* Fix - Push notifications: cancel the safety-net Action Scheduler action on delivery by matching schedule and cancel on a single identity-keyed args shape, so stale actions no longer fire ~60s later (and the retry path can no longer produce duplicate pushes). [#65589](https://github.com/woocommerce/woocommerce/pull/65589)
* Fix - Fix product filters not applying when Full Page Reload is enabled in the Product Collection block. [#65601](https://github.com/woocommerce/woocommerce/pull/65601)
* Fix - Only save published products to shopper lists. [#65899](https://github.com/woocommerce/woocommerce/pull/65899)
* Fix - Fix adding to cart variable products with an 'Any' attribute from the Add to Cart + Options block when in legacy mode [#65934](https://github.com/woocommerce/woocommerce/pull/65934)
* Add - Add a "Save for later" link beneath each cart line item that saves the item to the saved-for-later shopper list and removes it from the cart on success. The link is only shown to logged-in users and is hidden in the mini-cart. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add a configurable endpoint URL to the GraphQL settings section. [#64350](https://github.com/woocommerce/woocommerce/pull/64350)
* Add - Add a configurable maximum query depth to the GraphQL settings section. [#64325](https://github.com/woocommerce/woocommerce/pull/64325)
* Add - Add after_password_reset action hook for parity with WordPress core. [#64380](https://github.com/woocommerce/woocommerce/pull/64380)
* Add - Add a merchant-configurable maximum-rating threshold to the store_review push notification, so only reviews at or below the threshold trigger a notification. Default behaviour (notify on every approved review) is unchanged. [#64565](https://github.com/woocommerce/woocommerce/pull/64565)
* Add - Add a merchant-configurable minimum-amount threshold to the store_order push notification, so only orders at or above the threshold trigger a notification. Default behaviour (notify on every enabled order) is unchanged. [#64509](https://github.com/woocommerce/woocommerce/pull/64509)
* Add - Add a metadata mechanism to the dual code+GraphQL API [#64800](https://github.com/woocommerce/woocommerce/pull/64800)
* Add - Add a native transactional email log. Each send attempt is recorded under WooCommerce → Status → Logs (source: transactional-emails), capturing the type, related order or object, send status, and recipient (WordPress username for registered users, "guest" for unrecognised addresses). Failed sends include the error reason from wp_mail_failed. [#64491](https://github.com/woocommerce/woocommerce/pull/64491)
* Add - Add an in-app confirmation flow to the mobile-app QR login: wc-admin polls a new status endpoint while the QR is on screen, transitions to a "Signed in successfully on {device}" panel after the mobile app exchanges the token, exposes an "It wasn't you? Revoke access" button, and adds a persistent "Renew code" button alongside the countdown. The Application Password is now named with the device model and date so the merchant can identify it in Users → Profile → Application Passwords. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Add an opt-in settings UI SDK path for WooCommerce settings pages. [#64387](https://github.com/woocommerce/woocommerce/pull/64387)
* Add - Add an order milestone celebration for the 1st, 100th, and 1000th paid orders. [#64679](https://github.com/woocommerce/woocommerce/pull/64679)
* Add - Add a number-matching approval step to the mobile-app QR login: after the merchant scans the QR, the mobile app shows a 3-digit number, and wc-admin asks the merchant to tap the matching value from a server-shuffled triple. A wrong tap (or the explicit "I don't recognise this device" cancel link) terminates the session permanently — defending against shoulder-surfed QR codes and leaked screenshots. Older mobile clients without the new capability flag receive 426 Upgrade Required so they can prompt for an app update. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Add a setting to toggle Apollo Automatic Persisted Queries (APQ) caching on the GraphQL settings page. [#64448](https://github.com/woocommerce/woocommerce/pull/64448)
* Add - Add a setting to toggle the ObjectCache-backed parsed-query cache on the GraphQL settings page. [#64415](https://github.com/woocommerce/woocommerce/pull/64415)
* Add - Add canonical WooCommerce domain abilities for product and order management. [#64606](https://github.com/woocommerce/woocommerce/pull/64606)
* Add - Add change-summary REST endpoint and service for surfacing block email template updates. [#64484](https://github.com/woocommerce/woocommerce/pull/64484)
* Add - Add configurable parsed query cache TTL to GraphQL settings [#64488](https://github.com/woocommerce/woocommerce/pull/64488)
* Add - Add experimental inner block protocols for product filter blocks. [#64585](https://github.com/woocommerce/woocommerce/pull/64585)
* Add - Add filters for dual API debug mode and introspection, and surface status resolver failures in debug mode. [#64729](https://github.com/woocommerce/woocommerce/pull/64729)
* Add - Add granular type- and field-level authorization to the dual code+GraphQL API [#65235](https://github.com/woocommerce/woocommerce/pull/65235)
* Add - Add native variation gallery support: each variation can now have its own ordered image set, replacing the retired Additional Variation Images extension. Includes a migrator for legacy data and a runtime fallback so existing stores keep displaying their galleries. [#64524](https://github.com/woocommerce/woocommerce/pull/64524)
* Add - Add OPcache-backed caching for parsed GraphQL queries, with fallback to the WP object cache. [#64596](https://github.com/woocommerce/woocommerce/pull/64596)
* Add - Add per-user push notification preferences REST endpoint at `/wc-push-notifications/preferences`. [#64351](https://github.com/woocommerce/woocommerce/pull/64351)
* Add - Add QR code login for the WooCommerce mobile app so eligible store managers can sign in directly without a linked WordPress.com account. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Add quick edit and bulk product actions to the experimental products app. [#64481](https://github.com/woocommerce/woocommerce/pull/64481)
* Add - Add Review drawer UI for selectively applying block email template updates. [#64497](https://github.com/woocommerce/woocommerce/pull/64497)
* Add - Add selective apply + undo REST endpoints for block email template updates. [#64497](https://github.com/woocommerce/woocommerce/pull/64497)
* Add - Add Stage 1 of the variations classic redesign: a DataViews-based Variations tab in the classic product editor, behind the product_variations_classic_redesign feature flag (default off). [#64595](https://github.com/woocommerce/woocommerce/pull/64595)
* Add - Add Stripe IPP channel check to POS order identification for email suppression. [#64029](https://github.com/woocommerce/woocommerce/pull/64029)
* Add - Add the foundation for shopper lists via new Store API endpoints under /wc/store/v1/shopper-lists. Lists are persisted per-user in usermeta. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add the logic to clear "wc_attribute_taxonomies" transient and cache when clicking on "clear transients". [#64240](https://github.com/woocommerce/woocommerce/pull/64240)
* Add - Add the store_stock push notification covering low-stock, out-of-stock, and backorder events. All three events are enabled by default and each one has its own merchant-configurable sub-flag. [#64600](https://github.com/woocommerce/woocommerce/pull/64600)
* Add - Add the `order-detail-redesign` feature flag (default off). When enabled, caps the admin Order edit screen at 1200px on wide displays. [#64669](https://github.com/woocommerce/woocommerce/pull/64669)
* Add - Add the `woocommerce/add-to-wishlist-button` block: shipped as an inner block of `woocommerce/add-to-cart-with-options` on the single-product template (block themes only). Toggles the currently configured product (parent or selected variation) in the shopper's wishlist via the shared `shopper-lists` iAPI store. Hidden for guests. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add the `woocommerce/wishlist` block: renders the shopper's wishlist via the shared `shopper-lists` Store API and iAPI store, composes the `ShopperListRenderer` shared row markup, and ships an "Add to cart" per-row action that adds the product to the cart and removes the row from the wishlist on confirmed success. The `/my-account/wishlist/` endpoint now renders this block instead of its placeholder. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add Tracks instrumentation for the block-email update flow: server-side `_available`, `_applied` (auto + selective), and `_backfill_completed` events, plus list-page `_viewed`. Also stamps the backfill-complete option on fresh installs so the divergence sweep is not permanently dormant. [#64759](https://github.com/woocommerce/woocommerce/pull/64759)
* Add - Add Tracks instrumentation to the floating header's Screen Options (gear) and Help (?) icon buttons. Fires `wcadmin_header_meta_icon_click` with `icon` and `action` (open/close) so engagement with these two icons can be measured. [#65131](https://github.com/woocommerce/woocommerce/pull/65131)
* Add - Add WC REST API v4 product filters for stock quantity ranges. [#65117](https://github.com/woocommerce/woocommerce/pull/65117)
* Add - Add WooCommerce 11.0 removal notices for the deprecated product editor feature, extension APIs, and public PHP classes. [#65333](https://github.com/woocommerce/woocommerce/pull/65333)
* Add - Add `can_be_refunded` field to v4 order and line item REST API responses. [#64162](https://github.com/woocommerce/woocommerce/pull/64162)
* Add - Add `get_entry_count()` to `FeedInterface` so product feed consumers can report the number of rows actually written to the feed (distinct from the number of products iterated by `ProductWalker`). [#64394](https://github.com/woocommerce/woocommerce/pull/64394)
* Add - Allow the shipping zones REST API endpoint to be extended [#64246](https://github.com/woocommerce/woocommerce/pull/64246)
* Add - Auto-inject the Shopper Collection block on the cart page when the shopper lists feature is enabled. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Customer Review Request: render one row per line item on the Review Order page so customers can leave distinct reviews for each variation of a variable product they bought, and surface the variation's attribute summary on the parent product's Reviews tab. [#64984](https://github.com/woocommerce/woocommerce/pull/64984)
* Add - Filter push notifications by per-user preferences so opted-out merchants don't receive disabled notification types on their devices. [#64487](https://github.com/woocommerce/woocommerce/pull/64487)
* Add - Gate shopper lists behind a new experimental flag. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Register a settings entity in the WooCommerce Blocks entities module so admin clients can read store settings via core-data. [#65127](https://github.com/woocommerce/woocommerce/pull/65127)
* Add - Send the merchant a transactional email after a successful QR mobile-app sign-in summarizing the device, OS, app version, and timestamp, with a "revoke access" link. Wrapped in a `woocommerce_qr_login_should_send_signin_email` filter so site owners can suppress the send. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Shopper Collection: add a built-in heading inner block (defaults to "Saved for later" at H2). Editable in the block editor. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Shopper Collections: add experimental wishlist support. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Surface update-available indicator in the block email editor (RSM-141) [#64675](https://github.com/woocommerce/woocommerce/pull/64675)
* Add - Wire the Shopper Collection (Saved-for-later) block to the shopper-lists Store API via a private iAPI store, with server-side rendering of saved items, optimistic remove, and Move-to-cart for simple products. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add a settings section registry so extensions can render sections in existing settings tabs with Settings UI. [#65866](https://github.com/woocommerce/woocommerce/pull/65866)
* Add - Render the Add to Wishlist Button inside the Add to Cart + Options block as the last child when the (experimental) wishlist feature is enabled, without modifying the shipped template parts. [#65820](https://github.com/woocommerce/woocommerce/pull/65820)
* Update - Add readonly variation attributes [#65255](https://github.com/woocommerce/woocommerce/pull/65255)
* Update - Add three-way diff for block email template change-summary and selective apply when the new `_wc_email_template_last_core_render` post meta is present. [#64716](https://github.com/woocommerce/woocommerce/pull/64716)
* Update - Add to Cart + Options: Variation Selector block now can use the same inner blocks as Product Filters [#64887](https://github.com/woocommerce/woocommerce/pull/64887)
* Update - Add tracking for attribute type when updating or saving product attributes [#65228](https://github.com/woocommerce/woocommerce/pull/65228)
* Update - DataViews - All Products: add quick edit panel [#64481](https://github.com/woocommerce/woocommerce/pull/64481)
* Update - Deprecate Product Editor v2 [#65333](https://github.com/woocommerce/woocommerce/pull/65333)
* Update - Don't allow adding multiple Product Filters blocks on the same page or template [#64538](https://github.com/woocommerce/woocommerce/pull/64538)
* Update - Hide the cart "Save for later" link when the user is logged out, the `cart_save_for_later` feature is disabled, or the cart page has no `woocommerce/shopper-collection` block. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Update - Move `OrderDetailRedesign` feature class to the `Internal` namespace so it can be removed without breaking backwards compatibility if the feature is not shipped. [#64669](https://github.com/woocommerce/woocommerce/pull/64669)
* Update - Refactor Product block to use isPreviewMode flag [#63270](https://github.com/woocommerce/woocommerce/pull/63270)
* Update - Remove the task list reminder bar from WooCommerce admin. The Finish setup entry in the activity panel remains as a quieter, non-obstructive alternative. The `woocommerce_task_list_reminder_bar_hidden` option is removed from the wc-admin REST options allowlist, and a one-time migration cleans it up from existing stores. `TaskList::possibly_remove_reminder_bar()` and `TaskList::REMINDER_BAR_HIDDEN_OPTION` are retained as deprecation stubs. [#64353](https://github.com/woocommerce/woocommerce/pull/64353)
* Update - Rename 'Select' attribute type to 'Text' in all user-facing strings [#64570](https://github.com/woocommerce/woocommerce/pull/64570)
* Update - Rename CartCheckoutUtils::is_overriden_by_custom_template_content() to is_overridden_by_custom_template_content(). The misspelled name is preserved as a deprecated alias for backwards compatibility. [#64461](https://github.com/woocommerce/woocommerce/pull/64461)
* Update - Replaces PanelBody with ToolsPanel in the Coming Soon block [#64768](https://github.com/woocommerce/woocommerce/pull/64768)
* Update - Require a wc_store_api Nonce header on shopper-lists item writes. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Update - Update admin modal styles to keep them more consistent [#64265](https://github.com/woocommerce/woocommerce/pull/64265)
* Update - Update product filter color handling to use block and global styles. [#64586](https://github.com/woocommerce/woocommerce/pull/64586)
* Update - Update the WooCommerce ability category description to cover extension abilities. [#64934](https://github.com/woocommerce/woocommerce/pull/64934)
* Update - Enable the push notifications feature by default. [#65572](https://github.com/woocommerce/woocommerce/pull/65572)
* Update - Add styles for the settings UI number spin control (hide the native spinner, position the +/- buttons). [#65729](https://github.com/woocommerce/woocommerce/pull/65729)
* Update - Update settings UI layout to the agreed design values: 720px container width, 16px spacing between stacked fields, and 24px between cards. [#65729](https://github.com/woocommerce/woocommerce/pull/65729)
* Update - Rename the settings UI script handle from wc-settings-ui-sdk to wc-settings-ui (never shipped in a release). [#65893](https://github.com/woocommerce/woocommerce/pull/65893)
* Dev - Add E2E tests for block email template update propagation. [#64817](https://github.com/woocommerce/woocommerce/pull/64817)
* Dev - Add embedded product variation links to the WC REST API v4 products endpoint. [#64566](https://github.com/woocommerce/woocommerce/pull/64566)
* Dev - Add extra flexibility to the authentication and authorization stages of the dual code+GraphQL API. [#64647](https://github.com/woocommerce/woocommerce/pull/64647)
* Dev - Add extra flexibility to the HTTP status code computation of the dual code+GraphQL API. [#64699](https://github.com/woocommerce/woocommerce/pull/64699)
* Dev - Add Interactivity API packages to the WordPress minimum-version dependency catalog. [#65405](https://github.com/woocommerce/woocommerce/pull/65405)
* Dev - Address CodeRabbit review feedback on the Back in Stock Notifications alpha and apply small follow-on cleanups: extract email-link action tokens into `EmailActionController` constants, remove the pre-WP-6.8 hasher compatibility shim now that WooCommerce requires WordPress 6.8, delete the in-tree sprint scratch docs (`SPRINT.md`, `CODERABBIT-TRIAGE.md`, `CODERABBIT-TRIAGE-RAW.md`) ahead of merge, and fix the assorted CR-flagged bugs (cancel-action copy-paste, split verification/unsubscribe keys, guard unreadable notifications in retention and privacy erasers, repair admin create-form option tags, correct background-processor operator precedence, rename typo filter, drop unused sprintf arg). [#64329](https://github.com/woocommerce/woocommerce/pull/64329)
* Dev - Add unit test coverage for the products and coupons GraphQL API commands. [#65194](https://github.com/woocommerce/woocommerce/pull/65194)
* Dev - Add WooPayments onboarding business details regression tests. [#65357](https://github.com/woocommerce/woocommerce/pull/65357)
* Dev - Auto-apply the current core block template render to woo_email posts classified as core_updated_uncustomized after a plugin upgrade. Batched via Action Scheduler so the upgrade request is not blocked. Posts edited by the merchant are left untouched. [#64450](https://github.com/woocommerce/woocommerce/pull/64450)
* Dev - Bump mockery/mockery dev dependency to ^1.6.10 to silence PHP 8.4 implicit-nullable deprecation warnings emitted on every request when opcache is disabled. [#64873](https://github.com/woocommerce/woocommerce/pull/64873)
* Dev - Comment: Add unit tests for the experimental GraphQL infrastructure [#64479](https://github.com/woocommerce/woocommerce/pull/64479)
* Dev - Correct @since tags on push notification preference filtering methods introduced in 10.9.0. [#65380](https://github.com/woocommerce/woocommerce/pull/65380)
* Dev - Define the `__i18n_text_domain__` identifier used by the email editor package as `"woocommerce"` in the admin and blocks webpack builds so strings continue to extract and translate under the `woocommerce` text domain. [#64356](https://github.com/woocommerce/woocommerce/pull/64356)
* Dev - Dev: swap unmaintained Suin PSR-4 sniff for Slevomat to keep PHPCS working on PHP 8.5. [#64875](https://github.com/woocommerce/woocommerce/pull/64875)
* Dev - Document new gallery_image_ids field on /wc/v3/products/<product_id>/variations endpoint (added in #64524). [#65290](https://github.com/woocommerce/woocommerce/pull/65290)
* Dev - e2e tests: Fix missing baseURL guard in restApi fixture [#65520](https://github.com/woocommerce/woocommerce/pull/65520)
* Dev - Export shared payment method icons and `getCommonIconProps` from `@woocommerce/blocks-checkout`. [#64617](https://github.com/woocommerce/woocommerce/pull/64617)
* Dev - Extract shared authorize_as_authenticated logic from the push notifications REST controllers into a new AuthorizesPushNotificationRequests trait. [#65380](https://github.com/woocommerce/woocommerce/pull/65380)
* Dev - Fix MCP provider test Abilities API registry bootstrap. [#65223](https://github.com/woocommerce/woocommerce/pull/65223)
* Dev - Fix PHPUnit assertions for deferred email queue object round trips and Store API checkout failed-payment retries. [#65226](https://github.com/woocommerce/woocommerce/pull/65226)
* Dev - Fix typos in code: linkToDescrption, unkown-status, identifer. [#64882](https://github.com/woocommerce/woocommerce/pull/64882)
* Dev - Fix typos in comments and docblocks. [#64950](https://github.com/woocommerce/woocommerce/pull/64950)
* Dev - fix unit test env setup [#65341](https://github.com/woocommerce/woocommerce/pull/65341)
* Dev - Improve payment setup fallback test coverage and translator context. [#64860](https://github.com/woocommerce/woocommerce/pull/64860)
* Dev - Monorepo: address circular dependencies surfaced by SWC TDZ. [#64797](https://github.com/woocommerce/woocommerce/pull/64797)
* Dev - Move GraphQL infrastructure classes used by autogenerated code out of the `Internal` namespace into `Api\Infrastructure` [#65151](https://github.com/woocommerce/woocommerce/pull/65151)
* Dev - Move TypeScript type-checking from the build to a new `lint:lang:types` script. Builds now emit types and JS without type-checking. [#65168](https://github.com/woocommerce/woocommerce/pull/65168)
* Dev - Pass ShopperList and ShopperListItem objects directly to their Store API schemas instead of round-tripping through to_array(); no JSON response shape change. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Product Collection E2E: close the global inserter before choosing a collection so hover previews do not block the placeholder controls. [#65393](https://github.com/woocommerce/woocommerce/pull/65393)
* Dev - Reduce variability in payment gateway is_available implementations. [#64386](https://github.com/woocommerce/woocommerce/pull/64386)
* Dev - Refresh PHPStan baseline to reflect changes from PR 64406. [#64543](https://github.com/woocommerce/woocommerce/pull/64543)
* Dev - Remove Legacy REST API settings section, admin notices, auto-install logic, and UI nudges from WooCommerce core. The Legacy REST API extension continues to work if manually installed. [#64076](https://github.com/woocommerce/woocommerce/pull/64076)
* Dev - Remove the stale experimental iAPI runtime feature flag and custom runtime build path. [#65404](https://github.com/woocommerce/woocommerce/pull/65404)
* Dev - Remove the unused settings editor package and related feature flag paths. [#65316](https://github.com/woocommerce/woocommerce/pull/65316)
* Dev - Saved for Later: split standalone block from the Shopper Collection variation; shared shopper-lists REST + iAPI domain remains reusable for future list-type blocks. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Saved for Later tests: reset the LegacyProxy `is_cart()` mock in a `finally` block so it can't leak into later tests sharing the same process. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Shopper lists: extract the shared row markup (image, name, price, remove badge, variation overlay) into a `ShopperListRenderer` helper and a `_shopper-lists/item` SCSS partial. Saved for Later now composes the helper; the same scaffold is what the upcoming Wishlist block will reuse. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Surface an "Update available" indicator on the email list page that links into the editor with a deep-link review parameter so merchants can see which transactional emails have customizations diverging from the current core template. [#64547](https://github.com/woocommerce/woocommerce/pull/64547)
* Dev - Switch `Taxonomy` type imports in product collection taxonomy controls from `@wordpress/core-data/src/entity-types` to the package's public root export. [#65386](https://github.com/woocommerce/woocommerce/pull/65386)
* Dev - Trap `wp_safe_redirect()` in `EmailActionControllerTests` so PHPUnit no longer silently halts mid-suite on the Back in Stock Notifications redirect tests. [#65207](https://github.com/woocommerce/woocommerce/pull/65207)
* Dev - Updates internal references to REST API documentation. [#64720](https://github.com/woocommerce/woocommerce/pull/64720)
* Dev - Use %i placeholder for table name in set_customer_first_order() SQL query. [#64435](https://github.com/woocommerce/woocommerce/pull/64435)
* Dev - Wire verification and confirmation emails for the Back in Stock Notifications alpha: dispatch the verify email when double opt-in is required on signup, dispatch the confirmation email on successful verification, add a rate-limited frontend resend endpoint, fix the admin Resend verification button to actually send, and apply standard UTM parameters to all notification email links. [#64348](https://github.com/woocommerce/woocommerce/pull/64348)
* Dev - Add a smoke test for the settings UI feature flag off state. [#65575](https://github.com/woocommerce/woocommerce/pull/65575)
* Dev - Add NOX onboarding critical-flow documentation and E2E coverage. [#65582](https://github.com/woocommerce/woocommerce/pull/65582)
* Dev - Move an inline comment to its own line in wc_customer_bought_product() to satisfy PHPCS (no functional change). [#65590](https://github.com/woocommerce/woocommerce/pull/65590)
* Dev - Surface Settings UI fallback through wc_doing_it_wrong. [#65587](https://github.com/woocommerce/woocommerce/pull/65587)
* Tweak - Add a new standalone wc-admin page at /mobile-app-login for merchants who already have the Woo mobile app installed and want to sign in via QR code scan. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Address security review findings on the Task 7 QR login flow: add a database-backed atomic claim to /qr-login-scan to prevent two concurrent scans from both writing a fresh challenge (the loser's session_id was silently orphaned), bind /qr-login-session-status grant delivery to proof of token knowledge via a required token_hash parameter, and clear the plaintext token from React state once the scan is in. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Align embedded admin notice padding with WordPress 7.0. [#64809](https://github.com/woocommerce/woocommerce/pull/64809)
* Tweak - Align order preview action button border, radius, and height with WordPress 7.0 secondary button style. [#64354](https://github.com/woocommerce/woocommerce/pull/64354)
* Tweak - Align Settings UI SDK embed styling with the settings card design. [#65567](https://github.com/woocommerce/woocommerce/pull/65567)
* Tweak - Align Woo admin primary text (#2c3338 → #1e1e1e / $gray-900) and placeholder text (#646970 → #757575 / $gray-700) colors with WordPress 7.0 admin gray scale, using SCSS tokens. [#64280](https://github.com/woocommerce/woocommerce/pull/64280)
* Tweak - Always show the QR direct login as the primary path in the mobile app modal, with the WordPress.com magic link available as a secondary CTA when the user has a linked WordPress.com account. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Defer focus ring widths to WordPress's --wp-admin-border-width-focus variable so Woo's keyboard focus indicators adopt the density-responsive behavior (2px default, 1.5px retina) that WP core ships. [#64249](https://github.com/woocommerce/woocommerce/pull/64249)
* Tweak - Expose the wc-visual attribute type through WooCommerce feature settings instead of the wc-admin beta feature list. [#65169](https://github.com/woocommerce/woocommerce/pull/65169)
* Tweak - Fix misspelled words in data-stores.md ("hydates" → "hydrates") and style-guide.md ("understable" → "understandable"). [#64230](https://github.com/woocommerce/woocommerce/pull/64230)
* Tweak - Improve the error shown on the QR mobile-app login screen when application passwords are disabled: drop the "ask a site administrator" copy (the merchant hitting this flow is already an admin or shop manager) and replace it with an inline link to the WordPress application-passwords documentation so they can figure out which constant or plugin disabled them. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Left-align the QR number-match cancel row and the modal FAQ paragraph so they match the rest of the "Sign into the app" step content. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Link the meta box border-radius bridge CSS to its upstream Trac ticket so future maintainers know when to remove it. [#64454](https://github.com/woocommerce/woocommerce/pull/64454)
* Tweak - Log mailer failures from the QR sign-in notification email via `wc_get_logger()` instead of swallowing the exception silently, so a misconfigured mailer is observable rather than invisible. The exchange response is still never blocked by mail delivery. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Move logic to init chips colors to the Chips inner block [#64887](https://github.com/woocommerce/woocommerce/pull/64887)
* Tweak - Order notes meta box: clarify note visibility (visibility label, dynamic CTA, customer-note header, email template link, customer-note delete confirmation) and modernize bubble styling for WP admin alignment. [#64476](https://github.com/woocommerce/woocommerce/pull/64476)
* Tweak - Polish the floating WC Admin header across Home and Settings: store icon for View store / Preview store, even icon spacing, fix the user-options click race, align title typography / colour / padding to WordPress design tokens, and remove a bunch of one-off overrides that were drifting from the rest of the wp-admin chrome. [#64885](https://github.com/woocommerce/woocommerce/pull/64885)
* Tweak - Polish the QR number-match cancel control: replace the single red link with a row that pairs descriptive text ("I don't recognise this device") with a secondary "Cancel login" button, and re-center the tile row so it visually aligns with the heading on both modal and standalone surfaces. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Prevent widows in store alerts message body copy with text-wrap: pretty. [#64453](https://github.com/woocommerce/woocommerce/pull/64453)
* Tweak - Promote the post-sign-in confirmation to a third step in the mobile-app modal flow. Once the QR code is exchanged the modal advances past the magic-link section and FAQ to a dedicated "Signed in successfully" step with a larger heading, the device summary, and a primary "Revoke access" button that opens a confirmation dialog before deleting the Application Password. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Refresh the floating WC Admin header to consolidate Screen options, Help, Activity, and Finish setup into a single icon-only tab group, removing the duplicate page title that previously appeared on top of wp-admin's own H1 on classic admin screens. [#64643](https://github.com/woocommerce/woocommerce/pull/64643)
* Tweak - Remove Facebook for WooCommerce from the onboarding wizard plugin rotation. [#64562](https://github.com/woocommerce/woocommerce/pull/64562)
* Tweak - Remove the disabled product editor template system feature flag. [#65387](https://github.com/woocommerce/woocommerce/pull/65387)
* Tweak - Remove the disabled product pre-publish modal feature flag. [#65383](https://github.com/woocommerce/woocommerce/pull/65383)
* Tweak - Remove the obsolete 'Product reviews have moved!' notice from the Comments screen. [#65110](https://github.com/woocommerce/woocommerce/pull/65110)
* Tweak - Reorder Product Data tabs to put Variations above Attributes when the product variations classic redesign feature is enabled. [#65108](https://github.com/woocommerce/woocommerce/pull/65108)
* Tweak - Replace hardcoded admin blue colors with WP admin theme color CSS custom properties so Woo inherits the active color scheme [#64196](https://github.com/woocommerce/woocommerce/pull/64196)
* Tweak - Shopper Collection: declare the atomic product-image, product-price and product-button stylesheets as style dependencies so their CSS is enqueued on the frontend whenever the block renders, instead of relying on duplicated/missing rules. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: drop the redundant editor stylesheet and rely on the frontend one for both the editor and the frontend. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: hide the empty-state message until items have appeared in the list during the current page session. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: own the grid layout (custom `columnCount` attribute + `.columns-N` class) and ship Product-Collection-equivalent responsive behavior. Items now reflow to fewer columns on narrow viewports instead of shrinking uniformly. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: surface mutation errors via the store-notices banner instead of an in-list error row, and disable the affected row's controls while the request is in flight. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Show a clearer, actionable message when a plugin install fails during the upgrader step. [#64397](https://github.com/woocommerce/woocommerce/pull/64397)
* Tweak - Show parent gallery extras alongside single-image variations in the Product Gallery block. [#65465](https://github.com/woocommerce/woocommerce/pull/65465)
* Tweak - Tokenize hardcoded grays across Woo admin React client. Remove redundant onboarding checkbox and text input border overrides (inherit Gutenberg's WP 7.0 defaults for unchecked, checked, and focused states), darken marketplace promo text for improved readability, and tokenize remaining scattered gray hexes. [#64276](https://github.com/woocommerce/woocommerce/pull/64276)
* Tweak - Update destructive action link color on API Keys and Webhooks settings pages to match WordPress 7.0's updated error red. [#64203](https://github.com/woocommerce/woocommerce/pull/64203)
* Tweak - Update destructive action link color on Shipping Zone, Shipping Class, Shipping Method, and Shipping Provider list tables to match WordPress 7.0's updated destructive red. [#64204](https://github.com/woocommerce/woocommerce/pull/64204)
* Tweak - Update the useQRLoginToken admin hook to handle the capability-based permission errors surfaced by the mobile-app QR login endpoint. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Use the NOTICE log level (instead of INFO) for transactional email entries with status `disabled` or `skipped`, so admins can distinguish "normal but significant" non-send outcomes from routine successful sends. [#64859](https://github.com/woocommerce/woocommerce/pull/64859)
* Performance - Enhance the efficiency and reliability of stock reservation processes during checkout. [#64475](https://github.com/woocommerce/woocommerce/pull/64475)
* Performance - Improve order edit page performance by resolving milestone easter egg orders with a bounded HPOS ID query instead of hydrating order objects. [#65258](https://github.com/woocommerce/woocommerce/pull/65258)
* Performance - Optimized the order and customer save workflows during checkout using StoreAPI. [#64392](https://github.com/woocommerce/woocommerce/pull/64392)
* Performance - Optimize slow SQL and high CPU usage by DB in product filter utility. [#65119](https://github.com/woocommerce/woocommerce/pull/65119)
* Performance - Reduce database queries when listing product categories or brands via REST, and when rendering the Product Categories List block with images, by priming thumbnail attachment caches. [#65320](https://github.com/woocommerce/woocommerce/pull/65320)
* Performance - Reduce database queries when listing product variations and products via the REST API by priming attachment post caches before iterating over images. [#65271](https://github.com/woocommerce/woocommerce/pull/65271)
* Performance - Reduced the frequency of wc_get_product and wc_get_order calls during checkout to improve performance. [#64418](https://github.com/woocommerce/woocommerce/pull/64418)
* Performance - Reduced the number of SQL queries on the shop, cart, and checkout pages in the store, as well as on the products page in the admin area, by adding missing cache priming. [#65276](https://github.com/woocommerce/woocommerce/pull/65276)
* Performance - Review and optimize the SQL queries used in product filters to improve performance. [#65141](https://github.com/woocommerce/woocommerce/pull/65141)
* Performance - Updated order line item product caching to leverage the product object caching feature. [#65508](https://github.com/woocommerce/woocommerce/pull/65508)
* Enhancement - Add ariaLabel to attribute, status, and taxonomy product filter items for improved screen reader accessibility [#64693](https://github.com/woocommerce/woocommerce/pull/64693)
* Enhancement - Better UX when WooCommerce mobile-app sign-in is unavailable because application passwords are disabled. wc-admin now probes a new `/qr-login-availability` REST endpoint up-front and renders a permanently-disabled card (with a "Why am I seeing this?" expander listing typical causes) instead of optimistically mounting the QR component, spinning, and only then showing a generic error. The structural `application_passwords_unavailable` ERROR-state suppresses the "Try again" retry button since retrying cannot change the site's AP configuration. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Enhancement - Email Logger: add a private order note for every transactional email send or failure tied to a WC_Order, making the event visible directly on the order admin page. [#65247](https://github.com/woocommerce/woocommerce/pull/65247)
* Enhancement - Migrate the Catalog Sorting block to use Interactivity API [#62854](https://github.com/woocommerce/woocommerce/pull/62854)
* Enhancement - Store API: defer checkout draft order creation to place-order time, eliminating orphaned `wc-checkout-draft` rows from page views and form interactions. Adds `woocommerce_store_api_checkout_update_draft` action for PATCH-time observation and `woocommerce_store_api_checkout_order_created` action when the order is first materialised. [#64155](https://github.com/woocommerce/woocommerce/pull/64155)
* Enhancement - Track transactional email outcomes: log when emails are disabled (is_enabled() false) or skipped (no recipient) in addition to the existing send-attempt logging. Adds a defensive instanceof guard in WC_Email_New_Order::trigger() before updating order meta on a successful send. [#64859](https://github.com/woocommerce/woocommerce/pull/64859)
* Enhancement - Use the customer's first name (billing first name, falling back to WordPress first name, then username) in the greeting of the new account and reset password emails. [#65270](https://github.com/woocommerce/woocommerce/pull/65270)
= 10.8.1 2026-05-27 =
**WooCommerce**
* Fix - Fix a fatal error during in-place upgrade to 10.8.0 caused by the new DefaultCustomerAddress enum being referenced from class-wc-settings-general.php before the in-process autoloader classmap is refreshed. [#65359](https://github.com/woocommerce/woocommerce/pull/65359)
* Fix - Fix WooPayments onboarding business type dropdown crash. [#65345](https://github.com/woocommerce/woocommerce/pull/65345)
= 10.8.0 2026-05-26 =
**WooCommerce**
* Fix - Add periodic cleanup for place-order debug log files and dangling order meta that the existing batch processor doesn't cover. [#63756](https://github.com/woocommerce/woocommerce/pull/63756)
* Fix - Adds a fallback path to the plugin file during plugin activation step. Prevents `unknown_filename` error when trying to activate a plugin during the auto-installation flow. [#63796](https://github.com/woocommerce/woocommerce/pull/63796)
* Fix - Add __next40pxDefaultSize prop to SelectControl components to resolve deprecated size warning on WP 7.0+. [#63847](https://github.com/woocommerce/woocommerce/pull/63847)
* Fix - Add __nextHasNoMarginBottom prop to dashboard-charts interval SelectControl to resolve deprecation warning. [#63843](https://github.com/woocommerce/woocommerce/pull/63843)
* Fix - Clarify tax inclusion/exclusion in Orders REST API schema descriptions and add total_tax field to inline refund data. [#63692](https://github.com/woocommerce/woocommerce/pull/63692)
* Fix - Customer Account: visual fixes of newly added dropdown [#64073](https://github.com/woocommerce/woocommerce/pull/64073)
* Fix - Do not update theme support option or queue rewrite rule flush when running in WP-CLI or cron contexts, preventing hosts that run WP-CLI with --skip-themes from corrupting the shop page rewrite rules. [#64117](https://github.com/woocommerce/woocommerce/pull/64117)
* Fix - Ensure value attribute is updated when selecting autocomplete address [#63524](https://github.com/woocommerce/woocommerce/pull/63524)
* Fix - Fix 404 requests for category-title and category-description block frontend scripts [#63945](https://github.com/woocommerce/woocommerce/pull/63945)
* Fix - Fix: missing handling for null meta keys/values in POST/PUT endpoints [#63971](https://github.com/woocommerce/woocommerce/pull/63971)
* Fix - Fix account password field showing validation error immediately when "Create an account" checkbox is checked on checkout. [#64064](https://github.com/woocommerce/woocommerce/pull/64064)
* Fix - Fix address autocomplete branding logo not rendering in block checkout due to sanitizeHTML stripping img tags [#63985](https://github.com/woocommerce/woocommerce/pull/63985)
* Fix - Fix address autocomplete dropdown appearing after browser autofill on checkout [#63902](https://github.com/woocommerce/woocommerce/pull/63902)
* Fix - Fix Add to Cart + Options grouped product child quantity inputs to respect each child product's own constraints on WordPress 6.8 [#64571](https://github.com/woocommerce/woocommerce/pull/64571)
* Fix - Fix a `_load_textdomain_just_in_time` notice for the `woocommerce` domain on WordPress 6.7+ caused by the new dual code / GraphQL API checking its feature flag too early during plugin load. [#64332](https://github.com/woocommerce/woocommerce/pull/64332)
* Fix - Fix Cart/Checkout blocks not displaying product images with non-ASCII filenames. [#63763](https://github.com/woocommerce/woocommerce/pull/63763)
* Fix - Fix Cart and Checkout block crash caused by WordPress emoji detection script corrupting React DOM when product names contain emoji characters. [#64072](https://github.com/woocommerce/woocommerce/pull/64072)
* Fix - Fix colour picker swatch height to match WP 7.0 input height on Emails settings tab. [#63814](https://github.com/woocommerce/woocommerce/pull/63814)
* Fix - Fix command palette command registration on WooCommerce admin pages by loading the command scripts in admin and preserving settings/analytics command hydration. [#64164](https://github.com/woocommerce/woocommerce/pull/64164)
* Fix - Fix core profiler shipping_partner_impression tracking event reporting wrong country when plugins step is reached via direct navigation or page refresh. [#64133](https://github.com/woocommerce/woocommerce/pull/64133)
* Fix - Fix Coupon Code block search to include coupons in all default statuses (draft, future, pending, private, publish), not just published ones [#63933](https://github.com/woocommerce/woocommerce/pull/63933)
* Fix - Fix customer history "Total orders" tooltip to dynamically reflect excluded order statuses instead of using hardcoded text. [#64036](https://github.com/woocommerce/woocommerce/pull/64036)
* Fix - Fix CustomerHistory metabox to query real-time order data (HPOS) instead of analytics tables, ensuring accurate customer order count and spend data regardless of analytics sync status. [#63715](https://github.com/woocommerce/woocommerce/pull/63715)
* Fix - Fix DB update admin note not reappearing after being dismissed by the user. [#63657](https://github.com/woocommerce/woocommerce/pull/63657)
* Fix - Fix duplicate wc_customer_lookup rows when a guest registers via delayed account creation on the order confirmation page. [#63989](https://github.com/woocommerce/woocommerce/pull/63989)
* Fix - Fixed a fatal error where urldecode() received an array in wc_product_canonical_redirect() when running on PHP 8 or higher. [#63723](https://github.com/woocommerce/woocommerce/pull/63723)
* Fix - Fixed featured products not showing on multisite. [#63204](https://github.com/woocommerce/woocommerce/pull/63204)
* Fix - Fix email editor styling regressions: logo/title font competition, inconsistent bold in order totals, and incorrect content indentation in block emails. [#63974](https://github.com/woocommerce/woocommerce/pull/63974)
* Fix - Fixes "Additional Information" tab content being cut off on mobile devices. [#63255](https://github.com/woocommerce/woocommerce/pull/63255)
* Fix - Fix excessive express payment button spacing in Safari on the block cart page by switching from block layout to flexbox with explicit gap. [#64074](https://github.com/woocommerce/woocommerce/pull/64074)
* Fix - Fix fatal error on shop page when a product attribute taxonomy used in Product Filters block is deleted. [#63982](https://github.com/woocommerce/woocommerce/pull/63982)
* Fix - Fix fatal TypeError when Product Collection block offset or perPage is an empty string. [#64012](https://github.com/woocommerce/woocommerce/pull/64012)
* Fix - Fix Hidden product search visibility [#63181](https://github.com/woocommerce/woocommerce/pull/63181)
* Fix - Fix HPOS data cache cross-bleed between order data store subclasses [#64067](https://github.com/woocommerce/woocommerce/pull/64067)
* Fix - Fix insufficient color contrast for Select2 placeholder text to meet WCAG 2.2 AA requirements. [#63751](https://github.com/woocommerce/woocommerce/pull/63751)
* Fix - Fix is_checkout/is_cart cache poisoning causing 404 on checkout endpoints when called before main query is ready [#63966](https://github.com/woocommerce/woocommerce/pull/63966)
* Fix - Fix locale filter breaking address forms when hiding fields. Country is now enforced as always visible and required since it is the lookup key for locale resolution. Also fixes state field not being hideable by locale in classic checkout, and fixes address card displaying stale values for hidden fields. [#63928](https://github.com/woocommerce/woocommerce/pull/63928)
* Fix - Fix logo image inheriting unintended margin-right from global img rule in improved email design. [#64137](https://github.com/woocommerce/woocommerce/pull/64137)
* Fix - Fix Mini-cart does not update or open when adding through legacy events [#64152](https://github.com/woocommerce/woocommerce/pull/64152)
* Fix - Fix moment-timezone console errors in WooCommerce Admin by using WordPress core's bundled moment-timezone instead of a stripped copy [#64201](https://github.com/woocommerce/woocommerce/pull/64201)
* Fix - Fix Product Results Count block not updating when filtering products with the Interactivity API. [#63969](https://github.com/woocommerce/woocommerce/pull/63969)
* Fix - Fix Product SKU not visible for variable products inside Product Collections [#63990](https://github.com/woocommerce/woocommerce/pull/63990)
* Fix - Fix Product Summary "Upgrade now (just this block)" button not working in the Site Editor. [#63937](https://github.com/woocommerce/woocommerce/pull/63937)
* Fix - Fix product title with $ breaking Add to cart with options [#63653](https://github.com/woocommerce/woocommerce/pull/63653)
* Fix - Fix RTL text alignment in email order details table headers by replacing inline styles with RTL-aware CSS classes. [#63921](https://github.com/woocommerce/woocommerce/pull/63921)
* Fix - Fix scheduled import preference lost after analytics option rename in 10.5.0. [#63808](https://github.com/woocommerce/woocommerce/pull/63808)
* Fix - Fix scheduled sale actions leaving lookup table data stale [#63856](https://github.com/woocommerce/woocommerce/pull/63856)
* Fix - Fix setup wizard TypeError on first site load by reading site title from wcSettings instead of core-data entity record. [#63929](https://github.com/woocommerce/woocommerce/pull/63929)
* Fix - Fix some input misalignment in Settings on WP 7.0 [#64145](https://github.com/woocommerce/woocommerce/pull/64145)
* Fix - Fix SQL error when searching with empty or exclusion-only terms by falling back to default ordering instead of relevance. [#63760](https://github.com/woocommerce/woocommerce/pull/63760)
* Fix - Fix Store API products endpoint allowing transient bloat via arbitrary product IDs in the `related` query parameter. [#63846](https://github.com/woocommerce/woocommerce/pull/63846)
* Fix - Fix two typos in available-slot-fills.md — remove duplicate word and correct wrong article. [#64228](https://github.com/woocommerce/woocommerce/pull/64228)
* Fix - Fix unauthenticated access to guest order fulfillments via REST API. [#64130](https://github.com/woocommerce/woocommerce/pull/64130)
* Fix - Fix validation error message overlapping the advanced cost help text in Flat Rate shipping method settings. [#63398](https://github.com/woocommerce/woocommerce/pull/63398)
* Fix - Inherit font color in Checkout block saved addresses [#64148](https://github.com/woocommerce/woocommerce/pull/64148)
* Fix - Log get_order() exceptions to WC Logger for easier debugging. [#64347](https://github.com/woocommerce/woocommerce/pull/64347)
* Fix - My Account: navigation items have unified padding [#63769](https://github.com/woocommerce/woocommerce/pull/63769)
* Fix - Normalise filter query vars before hashing cache keys so equivalent filter combinations (e.g. filter_color=red,blue vs blue,red) share the same cache entry. [#64041](https://github.com/woocommerce/woocommerce/pull/64041)
* Fix - Only add valueAddedTaxIncluded to structured data when taxes are enabled (#63266) [#63304](https://github.com/woocommerce/woocommerce/pull/63304)
* Fix - Pass `tested` and `icons` fields from WooCommerce.com update-check API response into the `update_plugins` site transient, allowing WordPress to display compatibility info and extension icons on the Updates page. [#63986](https://github.com/woocommerce/woocommerce/pull/63986)
* Fix - Prevent a fatal error in the cart template when a filter on `woocommerce_cart_item_product` returns a non-product value, by moving the product name lookup inside the existing product validity check. [#64252](https://github.com/woocommerce/woocommerce/pull/64252)
* Fix - Prevent empty quantity output markers in order email templates. [#63878](https://github.com/woocommerce/woocommerce/pull/63878)
* Fix - Prevent fatal errors in email footer placeholder replacement when third-party filters return non-string values. [#64056](https://github.com/woocommerce/woocommerce/pull/64056)
* Fix - Prevent fatal error when product attribute data is malformed [#63953](https://github.com/woocommerce/woocommerce/pull/63953)
* Fix - Remove confusing error notice when shipping tour completion flag fails to save. [#64466](https://github.com/woocommerce/woocommerce/pull/64466)
* Fix - REST API: prevent PUT /wc/v(2|3)/orders/{id} from converting non-shop_order records into orders. [#64050](https://github.com/woocommerce/woocommerce/pull/64050)
* Fix - Restore case-insensitive coupon lookups on databases with case-sensitive collations. [#63800](https://github.com/woocommerce/woocommerce/pull/63800)
* Fix - Restore the Shipping task on US, CO, and MX stores by adding them back to the home-screen auto-zone whitelist. [#64560](https://github.com/woocommerce/woocommerce/pull/64560)
* Fix - Schedule sale events when sale date meta is written directly, so sales activate on time for importers and integrations that bypass WooCommerce CRUD. [#64140](https://github.com/woocommerce/woocommerce/pull/64140)
* Fix - Skip unnecessary DELETE queries in update_line_items_from_cart when order ID is 0. [#63890](https://github.com/woocommerce/woocommerce/pull/63890)
* Fix - Store Notices: Remove margins from empty Store Notices container [#63749](https://github.com/woocommerce/woocommerce/pull/63749)
* Fix - Strip sensitive fields (downloads, COGS, purchase note) from V4 products REST API response for users without product management capabilities. [#63895](https://github.com/woocommerce/woocommerce/pull/63895)
* Fix - Suppress harmless duplicate key database errors logged during WooCommerce table creation on update. [#64188](https://github.com/woocommerce/woocommerce/pull/64188)
* Fix - Use default cursor in Product Gallery large image when it's not clickable [#63956](https://github.com/woocommerce/woocommerce/pull/63956)
* Fix - Add row layout data to the WooCommerce Shipping partner suggestion so the card renders correctly in row / vertical placements. [#64593](https://github.com/woocommerce/woocommerce/pull/64593)
* Fix - Fix PHP 8.5 fatal error when unsetting string offsets in StoreApi AbstractSchema [#64670](https://github.com/woocommerce/woocommerce/pull/64670)
* Fix - Prevent re-entrant order reads triggered by cached refund objects. [#64657](https://github.com/woocommerce/woocommerce/pull/64657)
* Fix - Revert PR 62843 which added checkout evidence validation to WC_Order::payment_complete() [#64687](https://github.com/woocommerce/woocommerce/pull/64687)
* Fix - Cancel the delayed Customer Review Request email when the order leaves `completed` for any status, and refuse to send if the order is no longer in an eligible status at trigger time. [#64786](https://github.com/woocommerce/woocommerce/pull/64786)
* Fix - Fix Add to Cart + Options steppers not working on extension quantity inputs [#64847](https://github.com/woocommerce/woocommerce/pull/64847)
* Fix - Prevent invalid cache prefixes from causing fatal errors on the My Account orders page. [#64870](https://github.com/woocommerce/woocommerce/pull/64870)
* Fix - Restore the meta_value column to the meta_key_value index on the wc_orders_meta table to fix a performance regression. [#65162](https://github.com/woocommerce/woocommerce/pull/65162)
* Add - Add a GraphQL settings section under Advanced with a toggle for the GET endpoint. [#64293](https://github.com/woocommerce/woocommerce/pull/64293)
* Add - Add an offline banner to WooCommerce admin that appears when the browser loses its connection, and surface a clear notice when save requests fail silently due to network loss. [#64334](https://github.com/woocommerce/woocommerce/pull/64334)
* Add - Add auto-generation mode to the coupon code email block, allowing users to configure coupon rules that generate unique codes at send time. [#64342](https://github.com/woocommerce/woocommerce/pull/64342)
* Add - Add optional customer note field to fulfillment updated email notification. [#63855](https://github.com/woocommerce/woocommerce/pull/63855)
* Add - Add woocommerce_email_order_details_heading and woocommerce_email_display_order_number filters to the email order details template. [#63898](https://github.com/woocommerce/woocommerce/pull/63898)
* Add - Export Skeleton component via PaymentMethodInterface components prop for payment gateway extensions. [#63788](https://github.com/woocommerce/woocommerce/pull/63788)
* Add - Introduce the dual code + GraphQL API for WooCommerce [#63772](https://github.com/woocommerce/woocommerce/pull/63772)
* Add - Add a new "Review request" transactional email that invites customers to review the products they purchased. Disabled by default and configurable under WooCommerce → Settings → Emails. [#64624](https://github.com/woocommerce/woocommerce/pull/64624)
* Add - Add a `/review-order/{id}/?key={order_key}` URL and a tokenized, read-only landing page for the Customer Review Request feature, plus the public `wc_get_review_order_url()` helper. The page is read-only; form controls land in a follow-up. [#64628](https://github.com/woocommerce/woocommerce/pull/64628)
* Add - Add the accessible 5-star rating control used by the Review Order page. Native radio inputs with keyboard navigation (arrows, Home, End), dynamic caption, and visible focus ring; filterable labels via `woocommerce_review_order_rating_labels`. [#64689](https://github.com/woocommerce/woocommerce/pull/64689)
* Add - Add the accessible 5-star rating control used by the Review Order page. Native radio inputs with keyboard navigation (arrows, Home, End), dynamic caption, and visible focus ring; filterable labels via `woocommerce_review_order_rating_labels`. [#64701](https://github.com/woocommerce/woocommerce/pull/64701)
* Add - Add the per-item review form row on the Review Order page: linked product title, thumbnail, accessible star rating, review textarea, and an extensions hook (`woocommerce_review_order_form_fields`). Submit button is gated on at least one rating being selected. Narrow-viewport layout stacks the row vertically below 600px. [#64701](https://github.com/woocommerce/woocommerce/pull/64701)
* Add - Schedule the Review request email via Action Scheduler so it fires automatically a configurable number of days after an order is completed, and cancel the pending send when the order is cancelled, refunded, trashed or deleted. [#64625](https://github.com/woocommerce/woocommerce/pull/64625)
* Add - Add the AJAX submission handler that turns the Review Order form into product reviews — one verified-buyer comment per rated row, per-row outcome, `comment_moderation` honoured. [#64805](https://github.com/woocommerce/woocommerce/pull/64805)
* Add - Exclude fully-refunded line items from the customer Review Order page so customers can't review products they no longer own. [#64840](https://github.com/woocommerce/woocommerce/pull/64840)
* Add - Pre-fill the Review Order form with the customer's existing review for this order, scoped per-order so repeat purchases of the same product get a fresh empty row. [#64832](https://github.com/woocommerce/woocommerce/pull/64832)
* Add - Render an empty-state thank-you view on the customer Review Order page when no actionable rows remain (every eligible item is already reviewed or skipped because reviews are disabled). [#64840](https://github.com/woocommerce/woocommerce/pull/64840)
* Update - Add a woocommerce/product-context iAPI store for use in Add to Cart with Options [#63208](https://github.com/woocommerce/woocommerce/pull/63208)
* Update - Add to Cart Button: open external products link in a new tab [#63970](https://github.com/woocommerce/woocommerce/pull/63970)
* Update - Bump @wordpress/* dependencies to the wp-6.8 minimum across the admin, blocks, email-editor, product-editor, and settings-editor packages. [#64114](https://github.com/woocommerce/woocommerce/pull/64114)
* Update - Exclude checkout-draft orders from default REST API order queries (status=any). API consumers that rely on checkout-draft orders appearing in unfiltered order listings will need to explicitly request them via `status=checkout-draft`. [#63743](https://github.com/woocommerce/woocommerce/pull/63743)
* Update - Improve messages in the Reviews Form block when users can't leave reviews [#64004](https://github.com/woocommerce/woocommerce/pull/64004)
* Update - Internalize the webonyx GraphQL package [#64317](https://github.com/woocommerce/woocommerce/pull/64317)
* Update - Introduce new 'Create value' modal in variable product editor [#64251](https://github.com/woocommerce/woocommerce/pull/64251)
* Update - Make the GraphQL engine externally usable [#64390](https://github.com/woocommerce/woocommerce/pull/64390)
* Update - Migrate all interactive blocks from the old `woocommerce/product-data` store to the new `woocommerce/products` store. [#63662](https://github.com/woocommerce/woocommerce/pull/63662)
* Update - Migrate deferred transactional email sending to Action Scheduler [#63832](https://github.com/woocommerce/woocommerce/pull/63832)
* Update - Modify the meta_key_value in wp_wc_orders_meta to only track the meta_key column [#63897](https://github.com/woocommerce/woocommerce/pull/63897)
* Update - Replace 'Return to Cart' link with a cart icon in the checkout header [#63678](https://github.com/woocommerce/woocommerce/pull/63678)
* Update - Shorten the email editor reset action label from "Reset content to default" to "Reset" for consistency with site template resets and to reduce i18n overhead. [#63828](https://github.com/woocommerce/woocommerce/pull/63828)
* Update - Update copy on the activate payments step in NOX [#63919](https://github.com/woocommerce/woocommerce/pull/63919)
* Update - Show all country-relevant shipping partner recommendations on the settings page even when one of the partners is already installed. [#64629](https://github.com/woocommerce/woocommerce/pull/64629)
* Update - Stamp the new `_wc_email_template_last_core_render` and `_wc_email_backfilled` post meta during email template sync so 10.9's three-way diff change-summary has a base reference on 10.8-era posts. [#64728](https://github.com/woocommerce/woocommerce/pull/64728)
* Update - Update version requirements to WordPress 6.9. [#65211](https://github.com/woocommerce/woocommerce/pull/65211)
* Dev - Add internal WCEmailTemplateSyncRegistry helper that resolves block email templates participating in template update propagation via their @version header. No runtime behaviour change yet. [#64261](https://github.com/woocommerce/woocommerce/pull/64261)
* Dev - Add server-side POST /woocommerce-email-editor/v1/emails/{id}/reset endpoint that atomically rewrites a woo_email post to its current core template render and stamps sync meta (version, source hash, synced-at, status=in_sync). [#64355](https://github.com/woocommerce/woocommerce/pull/64355)
* Dev - Backfill template sync metadata onto pre-existing block email posts during upgrade so the divergence detector can classify legacy installs safely. [#64364](https://github.com/woocommerce/woocommerce/pull/64364)
* Dev - Detect divergence between generated block email posts and their source templates after plugin updates, classifying each post as in-sync, core-updated-uncustomized, or core-updated-customized. [#64328](https://github.com/woocommerce/woocommerce/pull/64328)
* Dev - Fix workflow path filters to correctly re-run when workflow files change. [#63935](https://github.com/woocommerce/woocommerce/pull/63935)
* Dev - Improve repeated WooCommerce admin and blocks production builds by using webpack filesystem cache outside watch mode. [#64080](https://github.com/woocommerce/woocommerce/pull/64080)
* Dev - Introduce a new performance skill focused on effectively using option cache priming APIs. [#63720](https://github.com/woocommerce/woocommerce/pull/63720)
* Dev - Introduces and implements constants for default customer address options in the WooCommerce plugin codebase. [#64091](https://github.com/woocommerce/woocommerce/pull/64091)
* Dev - Introduces and implements constants for order item types in the WooCommerce plugin codebase. [#63863](https://github.com/woocommerce/woocommerce/pull/63863)
* Dev - Introduces and implements constants for tax based on options in the WooCommerce plugin codebase. [#64104](https://github.com/woocommerce/woocommerce/pull/64104)
* Dev - Monorepo: complete migration to @woocommerce/internal-style-build/webpack-rtl-plugin [#64161](https://github.com/woocommerce/woocommerce/pull/64161)
* Dev - Monorepo: refresh DependencyExtractionWebpackPlugin for compatibility with filesystem cache, admin build cleanup. [#64111](https://github.com/woocommerce/woocommerce/pull/64111)
* Dev - QAO-185: add bridge aggregator for blocks e2e migration. [#64179](https://github.com/woocommerce/woocommerce/pull/64179)
* Dev - Reduce WooCommerce Blocks non-production build time by using a single Terser compression pass outside production. [#64081](https://github.com/woocommerce/woocommerce/pull/64081)
* Dev - Remove the search personal skills part from AGENTS.md [#63900](https://github.com/woocommerce/woocommerce/pull/63900)
* Dev - Replaced patched `@wordpress/data` types with opt-in internal package types. [#63483](https://github.com/woocommerce/woocommerce/pull/63483)
* Dev - Skip unnecessary extension suggestion lookup for offline payment methods in enhance_payment_gateway_details(). [#63930](https://github.com/woocommerce/woocommerce/pull/63930)
* Dev - Stamp sync meta on generated block email posts (version, source hash, synced-at) for emails whose templates expose a parseable @version header. No runtime behaviour change for emails outside the sync registry. [#64287](https://github.com/woocommerce/woocommerce/pull/64287)
* Dev - Update webpack configuration [#64250](https://github.com/woocommerce/woocommerce/pull/64250)
* Dev - Upgrade pnpm from 9.15.0 to 10.33.0 with supply chain security settings. [#63964](https://github.com/woocommerce/woocommerce/pull/63964)
* Dev - Gate the Customer Review Request feature behind a FeaturesController flag (off by default). The host page is created lazily on the first request after the feature is enabled, not on plugin install. [#64895](https://github.com/woocommerce/woocommerce/pull/64895)
* Dev - Make `WC_Email_Customer_Review_Request_Test` self-contained for the `customer_review_request` feature gate so `test_is_registered_with_wc_emails` doesn't depend on incidental test ordering. [#64895](https://github.com/woocommerce/woocommerce/pull/64895)
* Tweak - Add "role": "content" to editable block attributes (product-sku, product-reviews-pagination-next, product-reviews-pagination-previous) for WordPress 7.0 contentOnly pattern editing compatibility. [#63977](https://github.com/woocommerce/woocommerce/pull/63977)
* Tweak - Add 8px border-radius to editor meta boxes and product description to align with WP 7.0 dashboard widget styling [#64191](https://github.com/woocommerce/woocommerce/pull/64191)
* Tweak - Add translatable “(incl. tax)” / “(excl. tax)” labels to product price fields depending on WooCommerce tax settings. [#62044](https://github.com/woocommerce/woocommerce/pull/62044)
* Tweak - Align order edit page address Select2 dropdowns (Country/Region, State/County) with WordPress 7.0 input height and padding so they match sibling text inputs. [#64451](https://github.com/woocommerce/woocommerce/pull/64451)
* Tweak - Align settings page input padding, Select2 single/multi-select text padding and border-radius, and shipping zone name/regions controls with WordPress 7.0 native form-control sizing. [#64445](https://github.com/woocommerce/woocommerce/pull/64445)
* Tweak - Encapsulate product lookup table refresh behind a dedicated public method [#64093](https://github.com/woocommerce/woocommerce/pull/64093)
* Tweak - Remove a border-left-color override on Woo's legacy admin notice container so "updated" notices inherit WordPress 7.0's success palette instead of the admin theme color. [#64470](https://github.com/woocommerce/woocommerce/pull/64470)
* Tweak - Replace remaining hardcoded admin blues in legacy Select2 and address autocomplete stylesheets with var(--wp-admin-theme-color) so borders and hover/focus states adopt the merchant's admin color scheme. [#64468](https://github.com/woocommerce/woocommerce/pull/64468)
* Tweak - Show a clear error message when users without plugin install permissions attempt to install plugins, instead of a generic failure message [#64187](https://github.com/woocommerce/woocommerce/pull/64187)
* Tweak - Show clearer errors when a test email fails to send. [#64286](https://github.com/woocommerce/woocommerce/pull/64286)
* Tweak - Show country name instead of country code in checkout address validation [#64008](https://github.com/woocommerce/woocommerce/pull/64008)
* Tweak - Update hardcoded border-radius on three legacy admin custom buttons (addons, setup wizard, helper) from 3–4px to 2px to align with the WordPress 7.0 admin radius. [#64446](https://github.com/woocommerce/woocommerce/pull/64446)
* Tweak - Update myPOS payment gateway icon to match design library [#64138](https://github.com/woocommerce/woocommerce/pull/64138)
* Tweak - Update the Blueprint settings error notice background to match the WordPress 7.0 admin notice spec (#fcf0f0). [#64469](https://github.com/woocommerce/woocommerce/pull/64469)
* Tweak - Vertically centre Product / Coupon Data panel labels and help-tip icons with 40px inputs on WordPress 7.0. [#64458](https://github.com/woocommerce/woocommerce/pull/64458)
* Tweak - Hide the duplicate page title heading on the Customer Review Order page so the shortcode body's heading is the only H1 visitors and screen readers encounter. [#64849](https://github.com/woocommerce/woocommerce/pull/64849)
* Performance - Add 3s timeout to DataSourcePoller HTTP calls and skip redundant remote fetches in wc_admin_daily when transients are fresh. [#63738](https://github.com/woocommerce/woocommerce/pull/63738)
* Performance - Add missing `_prime_post_caches()` calls in AJAX downloadable product search, scheduled sales processing, and Recent Reviews widget to batch-load post data and reduce individual database queries. [#63773](https://github.com/woocommerce/woocommerce/pull/63773)
* Performance - Add missing `_prime_post_caches()` calls in grouped product structured data, grouped product add-to-cart template, and download permissions adjuster to batch-load child product data to reduce individual database queries. [#63797](https://github.com/woocommerce/woocommerce/pull/63797)
* Performance - A new index has been added to the wc_orders table to improve the performance of order resolution by transaction ID. [#64025](https://github.com/woocommerce/woocommerce/pull/64025)
* Performance - A new index has been added to the `wc_reserved_stock` table to maintain stock reservation performance during peak sales events. [#63864](https://github.com/woocommerce/woocommerce/pull/63864)
* Performance - Avoid duplicate `get_block_type_style()` call in `AbstractBlock::register_block_type()` by caching the result in a local variable. [#64256](https://github.com/woocommerce/woocommerce/pull/64256)
* Performance - Improved cache warmup for the `woocommerce_refresh_order_count_cache` action to increase efficiency. [#63753](https://github.com/woocommerce/woocommerce/pull/63753)
* Performance - Lazy-load _used_by post meta in WC_Coupon to avoid loading all usage records into memory on construction. [#63755](https://github.com/woocommerce/woocommerce/pull/63755)
* Performance - Limit wc_translate_user_roles() to the default-domain contextual gettext hook. [#64078](https://github.com/woocommerce/woocommerce/pull/64078)
* Performance - Optimize SQL performance in the wc_customer_bought_product function. [#63995](https://github.com/woocommerce/woocommerce/pull/63995)
* Performance - Prime featured image caches on product archive pages to reduce SQL queries during rendering. [#63877](https://github.com/woocommerce/woocommerce/pull/63877)
* Performance - Products: reduced the number of SQL queries required to populate cart data in StoreApi. [#63850](https://github.com/woocommerce/woocommerce/pull/63850)
* Performance - Reduced the number of SQL queries needed to populate cart data in StoreApi. [#64088](https://github.com/woocommerce/woocommerce/pull/64088)
* Performance - Reduced the number of SQL queries required to handle order collections in both the storefront and REST interfaces. [#63768](https://github.com/woocommerce/woocommerce/pull/63768)
* Performance - Reduce the number of database queries on the classic cart page by priming post and image caches in `woocommerce_cross_sell_display()`. [#64085](https://github.com/woocommerce/woocommerce/pull/64085)
* Performance - Reduce the number of database queries on the product edit screen by priming attachment caches before rendering the product gallery meta box. [#64089](https://github.com/woocommerce/woocommerce/pull/64089)
* Performance - Reduce the number of database queries on the single product page by priming attachment caches in the StoreApi ProductSchema `get_images()` method. [#64100](https://github.com/woocommerce/woocommerce/pull/64100)
* Performance - Reduce the number of database queries when listing products via the REST API by priming attachment post caches in `get_images()`. [#64070](https://github.com/woocommerce/woocommerce/pull/64070)
* Enhancement - Add 'product.published' webhook topic than runs when a product is published. [#63555](https://github.com/woocommerce/woocommerce/pull/63555)
* Enhancement - Add checkout evidence validation to prevent unintended order completion for orders without checkout context [#62843](https://github.com/woocommerce/woocommerce/pull/62843)
* Enhancement - Add to Cart + Options: render 3rd-party product types quantity inputs with steppers [#62893](https://github.com/woocommerce/woocommerce/pull/62893)
* Enhancement - Allow extensionCartUpdate's overwriteDirtyCustomerData option to accept an object with per-address control ({ shipping_address?: boolean, billing_address?: boolean }) in addition to a boolean. [#64032](https://github.com/woocommerce/woocommerce/pull/64032)
* Enhancement - Cap cached filter combinations to limit transient growth from bot enumeration. [#64039](https://github.com/woocommerce/woocommerce/pull/64039)
* Enhancement - My Subscriptions: show "Managed by host" or "Managed by agency" in the expiry column for host plan and agency subscriptions. [#63925](https://github.com/woocommerce/woocommerce/pull/63925)
* Enhancement - Align the Customer Review Order page with the Figma design: ship the functional state gaps, swap to theme-aware classes, and route the customer to a thank-you view in place after any successful submission. [#64867](https://github.com/woocommerce/woocommerce/pull/64867)
= 10.7.0 2026-04-14 =
**WooCommerce**
* Fix - Added try/catch guards to store notices to prevent fatal errors when context is missing. [#63402](https://github.com/woocommerce/woocommerce/pull/63402)
* Fix - Add missing session methods to StoreApi SessionHandler for compatibility with WC_Session_Handler. [#63606](https://github.com/woocommerce/woocommerce/pull/63606)
* Fix - Add nonce verification to `product_ordering` and `term_ordering` AJAX handlers to prevent CSRF. [#63422](https://github.com/woocommerce/woocommerce/pull/63422)
* Fix - Address deprecation warnings in feedback button. [#63554](https://github.com/woocommerce/woocommerce/pull/63554)
* Fix - Always show radio for payment methods on checkout. [#63351](https://github.com/woocommerce/woocommerce/pull/63351)
* Fix - Fix - Show 'Billing address' instead of 'Billing and shipping address' when Local Pickup is selected and shipping is forced to the billing address. [#58220](https://github.com/woocommerce/woocommerce/pull/58220)
* Fix - Fix a bug with the Store Email personalization tag that caused it to always return the admin email instead of using the `get_from_address` method from the email object context [#63605](https://github.com/woocommerce/woocommerce/pull/63605)
* Fix - Fix add to cart not working on stale nonces on cached pages [#62892](https://github.com/woocommerce/woocommerce/pull/62892)
* Fix - Fix a small punctuation issue at the LYS page. [#63874](https://github.com/woocommerce/woocommerce/pull/63874)
* Fix - Fix attribute matching for non-ASCII characters in product CSV importer [#62963](https://github.com/woocommerce/woocommerce/pull/62963)
* Fix - Fix attribute terms REST API writing menu_order to wrong meta key. [#63390](https://github.com/woocommerce/woocommerce/pull/63390)
* Fix - Fix cart: prevent false "Quantity changed to 1" notices and add optimistic removal feedback [#63403](https://github.com/woocommerce/woocommerce/pull/63403)
* Fix - Fix Cart and Checkout block editor detection for post-new.php and other custom editor contexts. [#63759](https://github.com/woocommerce/woocommerce/pull/63759)
* Fix - Fix console warnings in the editor when using cart and checkout blocks. [#63541](https://github.com/woocommerce/woocommerce/pull/63541)
* Fix - Fix customer note email preview using wrong note text and missing newline support in admin order note personalization tag. [#63459](https://github.com/woocommerce/woocommerce/pull/63459)
* Fix - Fix Customers Reports advanced filters (email, username, name) by consolidating autocompleter customer IDs into customers/customers_exclude params in the Controller, and add customers_exclude support. [#63232](https://github.com/woocommerce/woocommerce/pull/63232)
* Fix - Fix dashboard status widget not showing after task list completion by adding a DeprecatedOptions bridge for woocommerce_task_list_complete. [#63522](https://github.com/woocommerce/woocommerce/pull/63522)
* Fix - Fix duplicate "Fulfillment updated" order notes caused by redundant save_meta_data() call in OrderFulfillmentsRestController. [#63544](https://github.com/woocommerce/woocommerce/pull/63544)
* Fix - Fixed sold individually validation on shortcode cart and checkout pages. Products marked as "Sold Individually" after being added to cart now have quantity automatically reduced to 1 with correct totals calculation. [#62293](https://github.com/woocommerce/woocommerce/pull/62293)
* Fix - Fixes issue where actions for shipping extension in onboarding didn't display. [#63348](https://github.com/woocommerce/woocommerce/pull/63348)
* Fix - Fix extra padding on analytics tables, dashboard charts, leaderboards, and store alerts on WordPress 7.0 by setting Card/CardBody size to "none". [#63826](https://github.com/woocommerce/woocommerce/pull/63826)
* Fix - Fix floating point precision error in REST API v4 refund amount validation that caused valid refunds to be rejected. [#63667](https://github.com/woocommerce/woocommerce/pull/63667)
* Fix - Fix fulfillment created email subject and heading to use correct plural form when shipment contains multiple items. [#63765](https://github.com/woocommerce/woocommerce/pull/63765)
* Fix - Fix incorrect new hook names in deprecated filter hooks mapping for order refund amount and reason. [#56511](https://github.com/woocommerce/woocommerce/pull/56511)
* Fix - Fix insufficient color contrast for status indicators on the System Status page to meet WCAG 2.2 AA requirements. [#63746](https://github.com/woocommerce/woocommerce/pull/63746)
* Fix - Fix insufficient colour contrast in Dashboard Status widget link text to meet WCAG 2.2 AA requirements. [#63521](https://github.com/woocommerce/woocommerce/pull/63521)
* Fix - Fix invalid JSON Schema in MCP tool definitions: convert date-time type to proper string+format, deduplicate enum values, handle mixed/action/unrecognized types, normalize array types, recursively sanitize nested schemas, sanitize output schemas, and strip boolean required from nested properties. [#63811](https://github.com/woocommerce/woocommerce/pull/63811)
* Fix - Fix math expressions being rejected in the flat rate shipping cost field [#63453](https://github.com/