Commit a2563bbb3d3 for woocommerce
commit a2563bbb3d3bd3f8c750667af50d0ed9306287b7
Author: woocommercebot <30233865+woocommercebot@users.noreply.github.com>
Date: Tue Aug 4 22:06:07 2026 +0530
Update changelog.txt after 11.0.0 (#67388)
diff --git a/changelog.txt b/changelog.txt
index 704baad17b3..3294a8b6aa1 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,5 +1,286 @@
== Changelog ==
+= 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**