Additional security enhancements

Security improvements for this release improve compliance with the latest security best practices.

  • Changes to the behavior of non-generated cache keys:

    • Non-generated cache keys for blocks now include prefixes that differ from prefixes for keys that are generated automatically. (Non-generated cache keys are keys that are set through template directive syntax or the setCacheKey or setData methods.)
    • Non-generated cache keys for blocks now must contain only letters, digits, hyphens (-), and underscore characters (_).
  • Limitations on the number of auto-generated coupon codes. Magento Open Source now limits the number of coupon codes that are automatically generated. The default maximum is 250,000. Merchants can use the new Code Quantity Limit configuration option (Stores > Settings:Configuration > Customers > Promotions) to prevent potentially overwhelming the system with many coupons.

  • Optimization of the default Admin URL generation process. The generation of the default Admin URL has been optimized for increased randomness, which makes generated URLs less predictable.

  • A new full-page cache configuration setting can help to mitigate the risks associated with the HTTP {BASE-URL}/page_cache/block/esi endpoint. This endpoint supports unrestricted, dynamically loaded content fragments from Commerce layout handles and block structures. The new Handles params size configuration setting sets the value of this endpoint’s handles parameter, which determines the maximum allowed number of handles per API. The default value of this property is 100. Merchants can change this value from the Admin (Stores > Settings:Configuration > System > Full Page Cache > Handles params size). See Configure the Commerce application to use Varnish.

  • Added Subresource Integrity (SRI) support to comply with PCI 4.0 requirements for verification of script integrity on payment pages. Subresource Integrity (SRI) support provides integrity hashes for all JavaScript assets residing in the local filesystem. The default SRI feature is implemented only on the payment pages for the Admin and storefront areas. However, merchants can extend the default configuration to other pages. See Subresource Integrity in the Commerce PHP Developer Guide.

  • Changes to Content Security Policy (CSP)—Configuration updates and enhancements to Adobe Commerce Content Security Policies (CSPs) to comply with PCI 4.0 requirements. For details, see Content Security Policies in the Commerce PHP Developer Guide.

    • The default CSP configuration for payment pages for Commerce Admin and storefront areas is now restrict mode. For all other pages, the default configuration is report-only mode. In releases prior to 2.4.7, CSP was configured in report-only mode for all pages.

    • Added a nonce provider to allow execution of inline scripts in a CSP. The nonce provider facilitates the generation of unique nonce strings for each request. The strings are then attached to the CSP header.

    • Added options to configure custom URIs to report CSP violations for the Create Order page in the Admin and the Checkout page in the storefront. You can add the configuration from the Admin or by adding the URI to the config.xml file.

      NOTE
      Updating the CSP configuration to restrict mode might block existing inline scripts on the payment pages in the Admin and storefront, which causes the following browser error when a page loads: Refused to execute inline script because it violates the following Content Security Policy directive: "script-src. Fix these errors by updating the whitelist configuration to allow required scripts. See Troubleshooting in the Commerce PHP Developer Guide.
  • Native rate limiting for payment information transmitted through REST and GraphQL APIs. Merchants can now configure rate limiting for the payment information transmitted using REST and GraphQL. This added layer of protection supports prevention of carding attacks and potentially decreases the volume of carding attacks that test many credit card numbers at once. This is a change in the default behavior of an existing REST endpoint. See Rate limiting.

  • The default behavior of the isEmailAvailable GraphQL query and the (V1/customers/isEmailAvailable) REST endpoint has changed. By default, the APIs now always return true. Merchants can enable the original behavior by setting the Enable Guest Checkout Login option in the Admin to yes, but doing so can expose customer information to unauthenticated users.

Platform enhancements

Platform upgrades for this release improve compliance with the latest security best practices.

Magento Open Source 2.4.7 includes the following platform upgrades:

  • PHP 8.3 compatibility. This release introduces support for PHP 8.3. Magento Open Source now supports both PHP 8.3 and 8.2. PHP 8.2 will be supported until its End of Service (EOS) date in December 2025. After December 2025, all merchants running 2.4.7 deployments should migrate to PHP 8.3.

Magento Open Source 2.4.7 is still compatible with PHP 8.1 for upgrade purposes only. PHP 8.1 is not supported and not recommended. Magento Open Source 2.4.7 core code, all bundled extensions, and all Adobe-owned extensions and SaaS services are compatible with PHP 8.3.

  • RabbitMQ 3.13 support. This release is compatible with the latest version of RabbitMQ 3.13. Compatibility remains with RabbitMQ 3.11 and 3.12, which is supported through August 2024 and December 2024 respectively, but Adobe recommended using Magento Open Source 2.4.7 only with RabbitMQ 3.13.

  • Composer 2.7.x. Compatibility with Composer 2.2.x remains.

  • Varnish cache 7.4 support. This release is compatible with the latest version of Varnish Cache 7.4. Compatibility remains with the 6.0.x and 7.2.x versions, but we recommended using Magento Open Source 2.4.7 only with Varnish Cache version 7.4 or version 6.0 LTS.

  • Elasticsearch 8.11 compatibility

  • OpenSearch 2.12 and OpenSearch 1.3 support

  • Redis 7.2

  • The extjs library has been replaced with the latest version of jsTree.

  • jquery/fileUpload library has been removed.

All JavaScript libraries and NPM dependencies in Magento Open Source core code have been updated to the latest available versions. All Laminas library dependencies have been updated to the latest version that are compatible with PHP 8.3.

Additional upgrades

  • The Commerce UPS XML API gateway has been migrated to the new Commerce UPS REST API to support updates that UPS is making to their API security model. (UPS is implementing an OAuth 2.0 security model (bearer tokens) for all APIs.) All previous Commerce UPS XML APIs have been removed from the Magento Open Source 2.4.7 code base.

  • The Magento Open Source integration with FedEx has been migrated from legacy FedEx WSDL Web Services to the latest FedEx RESTful APIs. FedEx Web Services Tracking, Address Validation, and Validate Postal Codes WSDLS will be retired in May 2024.

  • Added support for the new USPS Ground Advantage shipping method. This is an out-of-box integration with USPS’s new shipping method, USPS Ground Advantage, which was released July 2023. This new integration can be used to retrieve shipping rates and schedule deliveries and returns through the USPS shipping service. The USPS Ground Advantage shipping method replaces these shipping methods, which were retired when the USPS Ground Advantage shipping method was released:

    • USPS Retail Ground
    • First-Class Package Service
    • Parcel Select Ground
  • Temando shipping modules have been removed from the core Magento Open Source code base. This feature was deprecated in Magento Open Source 2.4.4.

Performance and scalability enhancements

Magento Open Source 2.4.7 includes the following enhancements to Magento Open Source performance and scalability:

  • Enhanced indexer management. The new indexer:set-status command supports the dynamic management of indexer status. Admin users can use this command to change indexer status to suspended, invalid, or valid. This feature is particularly useful for managing system performance during extensive bulk operations, such as product imports or updates, by allowing control over when indexers are automatically triggered by the system’s cron jobs. See Manage the indexers.

  • Product listing page for complex products with many options. Load time has improved for product listing pages that include complex products with over 100 options. The performance of GraphQL requests to list products by category has also improved.

  • Sales rule performance improvements. Improved performance of enterprise deployments with many (approximately 100,000) active sales rules. Enterprise deployments that heavily implement promotions often deploy many active cart rules. These types of enterprise deployments running Magento Open Source 2.4.7 will not see any performance degradation related to the number of configured cart price rules during checkout operations.

  • Faster save operations of store-level configurations for deployments with many stores. Saving configuration settings in deployments with more than 500 stores can be time-consuming. The new Async Config module enables asynchronous configuration save operations by running a cron job that uses a consumer to process the save operation in a message queue. AsyncConfig is disabled by default.

  • Faster generation of the config cache for large configurations. The bin/magento cache:clean config command now pre-warms the config cache when the config cache is enabled. This reduces the downtime required to generate the config cache for large configurations. Configuration save operations no longer clean the config_scopes cache before writing data to the cache, which also reduces the time that other requests are locked out while config data is being written.

Braintree

  • Vaulted PayPal and Pay Later Changes—Logged-in customers who have previously vaulted/stored their PayPal account have the option to pay with:

    • Pay Now (without having to log into their PayPal account, the user can pay with their default card)
    • Pay with a different funding source
    • Pay with a different account
    • PayPal Pay Later or PayPal Credit button
  • 3DS support for Google Pay—Included 3DS verification support for the Google Pay non-tokenized cards. See the Braintree documentation for more information.

  • Vault Apple Pay Payments—Allow logged-in customers to vault/store their Apple Pay payments to their Commerce store account to use on future transactions. This reduces the number of steps on checkout and creates a faster checkout experience for the returning customer.

  • Vault Google Pay Payments—Allow logged-in customers to vault/store their Google Pay payments to their Commerce store account to use on future transactions. This reduces the number of steps on checkout and creates a faster checkout experience for the returning customer.

  • Vault Venmo Payments—Allow logged-in customers to vault/store their Venmo accounts to their Commerce store account to use on future transactions. This reduces the number of steps on checkout and creates a faster checkout experience for the returning customer.

  • Vault ACH Payments—Allow logged-in customers to vault/store their ACH payments to their Commerce store account to use on future transactions. This reduces the number of steps on checkout and creates a faster checkout experience for the returning customer.

  • Express Payment buttons at the top of checkout—To encourage a faster checkout experience, we’ve introduced Express Payment options at the beginning of the checkout. Customers can now pay by PayPal, PayPal Pay Later, Apple Pay, and Google Pay Express payments.

  • Braintree release notes and Support links within the Admin Configuration—Merchants can now directly link from the Commerce Admin to Braintree support and release notes online.

  • GraphQL support for all Braintree payment methods except Venmo—More configurations are exposed in the GraphQL API. This is particularly useful for headless applications.

  • Vaulting payments in account area—Logged-in customers can now vault/store new credit/debit cards and PayPal accounts in the Customer account area. Previously, customers could only vault/store when saving their payments for later use when completing a transaction on the checkout, now they can vault new credit/debit cards and PayPal accounts without needing to create a new transaction.

  • Frictionless Transactions—Frictionless transactions accelerate the payment process by reducing the number of customer clicks/steps to complete an online credit/debit card transaction. Previously (when 3DS was enabled), every customer was 3DS challenged. With the new Frictionless Transactions feature, customers are only challenged for 3DS when the bank requests it. This reduces cart abandonment, increases conversion rates, and leads to more sales.

  • Dispute webhooks—When a customer disputes a transaction in Braintree, the dispute status is now passed on to Commerce. It is searchable in the Sales > Order grid and attached to each order.

GraphQL

Magento Open Source 2.4.7 includes enhanced GraphQL caching abilities, GraphQL schema support for custom attributes, support for headless order cancellation, and improved resolver caching.

  • More flexible cart management. The clearCart mutation now clears the contents of a specified shopping cart in a single action. It replaces the clearCustomerCart mutation, which has been deprecated.

  • Improvements in create cart mutations. The createGuestCart mutation has been added to replace the deprecated createEmptyCart mutation. Previously, if you used createEmptyCart, you could not determine whether the cart was for a guest or logged-in customer.

  • Order items now include product images. OrderItemInterface exposes product images, which permits images to be associated with ordered products and load more efficiently. GitHub-32369

  • Expanded support for resolver caching. The following GraphQL query resolvers are now cacheable in the GraphQL Resolver Results cache, which improves performance when queries are submitted with POST requests:

    • Magento\CustomerGraphQl\Model\Resolver\Customer::resolve
    • Magento\CustomerGraphQl\Model\Resolver\CustomerAddress::resolve
    • Magento\CustomerGraphQl\Model\Resolver\IsSubscribed::resolve
    • Magento\CatalogGraphQl\Model\Resolver\Product\MediaGallery::resolve
  • Support for order cancellation. The cancelOrder mutation allows a customer to cancel an order, passing its identifier and a cancellation reason.

  • Enhanced support for custom attributes. GraphQL custom attribute support has been enhanced by enriching API data to support all attribute types. The GraphQL EAV attributes schema now supports extending customer attributes and customer address objects in the Admin and retrieving them using GraphQL. Specific areas of enhancement include:

    • extended/added custom attributes support to specific areas such as customer and customer address
    • added caching for custom attributes
    • enhanced existing custom attributes support for products
  • Enhanced GraphQL caching capabilities improve page load speed. Caching capability has been added to these queries, improving the speed of page load time for most PWA pages:

  • Improved GraphQL parser performance. GraphQL parser performance has been improved by reducing the number of times the parse method is called per request. It is now called once. Previously, the parser was called at least three times.

New fields for existing mutations

  • Added the quickorder_active field to the storeConfig and availableStores queries. This field indicates whether the quick order feature is enabled.

  • Added the following fields to the setBillingAddressOnCart and setShippingAddressesOnCart mutations:

    • fax
    • middlename
    • prefix
    • suffix

New queries and mutations

Deprecated queries and mutations

Inventory Management

Inventory Management (v1.2.7) provides tools to manage product inventory. This community-developed feature is bundled with Adobe Commerce and Magento Open Source core code.

Magento Open Source Extension metapackage

This release includes the Magento Open Source Extension metapackage v1.0.0, which automatically bundles select Magento Open Source extensions with this core release. The version of this extension that is included in this metapackage is installed when composer update is run, simplifying the process of upgrading the extension when upgrading to the latest core release. This extension maintains an independent release schedule.

The Magento Open Source Extension metapackage for Magento Open Source 2.4.7 includes these extensions:

Future versions of this extension metapackage will contain additional extensions.

PWA Studio

PWA Studio v14.0 is compatible with Magento Open Source 2.4.7-beta1. It includes multiple enhancements to improve accessibility. For information about bug fixes, see PWA Studio releases. See Version compatibility for a list of PWA Studio versions and their compatible Magento Open Source core versions.

Web API framework

This release introduces two new REST endpoints that provide a workaround for a limitation with the REST API GET and POST V1/products/attributes endpoints. These endpoints return the same value for the is_filterable attribute for both the Filterable(with results) and Filterable(no results) options of the Use in Layered Navigation option. (The is_filterable attribute property is of type Boolean, which does not permit setting this property to Filterable(no results).)

Two new REST endpoints have been implemented as a workaround:

  • PUT /V1/products/attributes/{attributeCode}/is-filterable/{isFilterable}. Path parameters: attributeCode (String) and isFilterable (int values are: 0 is No; 1 is Filterable (with results); 2 is Filterable (no results)).
  • GET /V1/products/attributes/{attributeCode}/is-filterable. Path parameters: attributeCode (String).

Fixed issues

We have fixed hundreds of issues in the Magento Open Source 2.4.7 core code. A subset of the fixed issues included in this release is described below.

Installation, upgrade, deployment

  • Unnecessary cache manipulation has been removed from the set-up process. Previously, Magento Open Source wrote its configuration to disk unnecessarily when bin/magento setup:db-data:upgrade or bin/magento setup:upgrade was run, which caused issues with som modules during setup. GitHub-38124
  • Deployment issues due to insufficient memory and large tables have been resolved. The bin/magento setup:upgrade command no longer fails due to memory-exceeded errors that are related to large MySQL tables.
  • bin/magento setup:install now completes successfully after app/etc/config.php has been deleted. Previously, the missing file was not regenerated during installation, and Magento Open Source threw an error. GitHub-37805
  • bin/magento setup:upgrade has been refactored to run successfully when installing a new module that installs both tables and associated mview indexers. GitHub-37304
  • Database restoration no longer fails due a delimiter error. Previously, Magento Open Source threw this error when bin/magento setup:rollback --db was executed: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'delimiter' at line 1, query was: delimiter ;;.
  • The bin/magento setup:upgrade command no longer fails with this type of MySQL memory limit-related error: PHP Fatal error: Allowed memory size of 4294967296 bytes exhausted (tried to allocate 20480 bytes). Multi-select attribute migration has been optimized to consume less memory during setup:upgrade.
  • Generating a database backup now works as expected from both the Admin and command line. Previously, Magento Open Source threw this error: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'delimiter' at line 1, query was: delimiter ;;.
  • Running setup:config:set without specifying the --lock-db-prefix parameter no longer erases the current value from the env.php file.
  • Varnish configuration has been updated to prevent guest users from accessing cached content related to other customer groups.
  • bin/magento setup:upgrade now completes successfully when installing a new module that installs both tables and associated mview indexers.
  • bin/magento setup:upgrade now displays a more informative error message when a message queue topic does not include a topic name. GitHub-34246
  • bin/magento setup:upgrade now displays a more informative error message when merged XML files are invalid. The error message now includes the filename.

Admin UI

  • Charts are now successfully disabled by default on the dashboard. GitHub-38430
  • The Admin Sales menu now displays submenus correctly. Previously, the column break did not work correctly, and some submenus were not displayed. GitHub-37812
  • Select dropdown menu options are now visible on Admin Content > Pages when multiple pages are selected in the grid. GitHub-35386
  • Corrected the path to the default value of system/dashboard/enable_charts in configuration settings. Charts are now displayed in the Admin as expected. GitHub-37668
  • Corrected display issue with Admin Customer grids. Previously, grid columns were not completely contained within the displayed page.
  • Hover colors are now applied as expected on the rows of Admin static grids. GitHub-35358
  • The checkout workflow no longer displays a warning when a shopper enters a postal code for Greece that does not contain a blank space. GitHub-36676
  • The Admin It's time to change your password link now redirects to the Change Admin Password page as expected. GitHub-37902
  • Page title suffixes are now included in both the title tag and the meta title tag for product pages. GitHub-37680
  • The product stock status condition is now correctly applied for related products rules.
  • The Login as Customer button is now displayed correctly on mobile devices.
  • Adobe Commerce no longer displays the Admin Add new customer group button if the logged-in admin user lacks permission to add a new customer group.
  • An admin user with restricted permissions can now save a child product whose parent product is assigned to a different scope. Previously, Commerce invalidated the cache for a parent product that was not assigned to the scope in which the child product was changed.
  • Admin users can now successfully switch between Admin filter views without view data being corrupted or lost. GitHub-37529

Bundle products

  • The customerCart query now returns all applied discounts on bundle products as expected. Previously, the total discounts that were applied to a bundle product were returned as zero.
  • Product detail pages now display the correct price for bundle products for which a 100% discount has been applied. Previously, Magento Open Source did not apply a 100% discount to bundle product prices.
  • Cart price rules are now applied to product bundles instead of to each child product for dynamic-priced bundled products.
  • Corrected an error that occurs when you use the POST V1/shipment endpoint to create a shipment containing a bundle product. The endpoint now adds items as expected and no longer returns this error: The shipment couldn't be saved.
  • You can now use the GET V1/shipment/ API route to create a shipment with a bundle product when the product has the together shipment type set. Bundle products are also now validated based on their shipment type property.
  • Shoppers can now edit the quantity of a bundle product in their storefront shopping cart. Previously, Adobe Commerce did not handle null values for ItemId when products were edited in the storefront shopping cart and displayed an error. GitHub-37696
  • Bundle products can now be successfully added to an Admin order using SKUs that contain a slash (/) character. Previously, admin users could not use this method to add products to an Admin order, and Magento Open Source threw a JavaScript error.
  • Admin users can now set decimal default values for newly added bundle options when Qty Uses Decimal is enabled for the corresponding simple product. Previously, decimal values could be set only for saved selections.
  • Optimized performance for saving bundle products with a large number of options
  • Bundle products are now successfully imported without duplicating SKUs in product options. Previously, Magento Open Source created multiple duplicate SKUs in product options when you imported bundle products with duplicate entries.
  • Bundle product price is now calculated properly when one of the products in the bundle is out of stock. Previously, if a product that was part of the bundle were out of stock, it was removed from the price calculation.
  • Bundle products are now displayed as out of stock when the last of their required child products are bought. Previously, bundle products were displayed as in-stock on the storefront when their simple products were out of stock.
  • Performance issues when adding bundle products with non-required options to the cart using the addBundleProductsToCart mutation have been resolved.
  • The categoryList query now returns all bundle options as expected when the Show out-of-stock products configuration setting is enabled. Previously, out-of-stock options were not included in the query response.
  • Bundle products created with POST V1/products now succeed when catalog price scope is set to website. Previously, an integrity constraint violation occurred. GitHub-35595

Cache

  • Categories are now visible to shoppers in stores where the cache is set to Fastly CDN (Caching Application=Fastly CDN). This affected both guest shoppers and registered customers.
  • Cache cookies after login are now the same after browsing the website. Previously, the login controller sent the wrong cache cookie, and pages might have been cached multiple times.
  • Responses from GraphQL GET operations on CMS pages that contain CMS blocks are now cleared as expected in Fastly cache. Subsequent schedule updates now show accurate, update content for these pages.
  • Page cache is now cleared as expected for a parent product when one of its child products has been saved from the Admin. A plugin check has been introduced to reach cache invalidation for configurable variants, similar to other product types, irrespective of indexer state (scheduled or real time). Previously, prices were not updated properly on the storefront after a configurable variation was updated from the Admin.
  • Added a caching mechanism for AWS credentials. A credentials provider now uses the Commerce cache to cache credentials retrieved from AWS for EC2 configuration.
  • The plugin whose purpose is to add the configurable cache tag when a simple product associated with a configurable product is saved now works as expected. All relevant configurable cache tags are removed as expected when a simple product is updated by POST V1/products. Previously, not all prices were updated on the storefront, and caches had to be manually cleared. GitHub-36726

Cart and checkout

  • Magento Open Source now optimizes performance by not loading user-specific quote data when generating full-page cacheable pages such as Product Details Pages (PDP) and CMS pages when persistent cart is enabled. Previously, the system would unnecessarily load user-specific session and quote data during the generation of these pages, which affected performance.
  • Custom address custom attributes are now saved as expected in the database. Previously, attribute values that were saved in the database were prepended with attribute code.
  • Generation of cart rules filter text for product attributes has been improved. Individual products are no longer loaded multiple times.
  • Magento Open Source now displays an informative error message when an error occurs during checkout and no longer returns the shopper to an earlier checkout step. Previously, the shopper was returned to the shipping page.
  • The cart query no longer returns shipping method and address for virtual carts. Previously, when a cart contained both physical and virtual products, and all physical products were removed, the cart query response continued to include shipping information.
  • Magento Open Source now displays informative messages when an add-to-cart action is triggered. Previously, the The requested qty is not available was not always displayed as needed on the storefront.
  • Checkout page load times have been improved for customers with large address books. Magento Open Source now processes only the number of customer addresses specified in the Customer Addresses Limit setting. Previously, Magento Open Source loaded the entire address book.
  • Product quantity can now be changed in the cart as expected for in-stock items when one item is out of stock. Previously, shoppers could not change product quantity of any items when one was out of stock.
  • The AdvancedSalesRule product attribute filter now works correctly with the decimal attribute backend type. As a result, the cart rules with Coupon Type set to No Coupon now work as expected.
  • The full amount of a whole cart discount is now applied as expected to carts that contain both bundle and configurable products.
  • Customer Section cookies now honor the cookie’s domain setting. Previously, the mini cart was not updating as expected in stores that contained subdomains, even though the session was shared.
  • Shipping an order to multiple addresses no longer triggers an error during region ID processing.
  • Fixed-discount amounts that are applied at the cart level are now correct.GitHub-37496
  • Coupons are now applied successfully to an order when a shopper applies the coupon after selecting the flat rate shipping method where a cart price rule with shipping method set as a condition applies. Previously, the cart page displayed the Coupon is Not valid error, and the coupon was not applied. GitHub-34866
  • Coupons are now applied successfully to an order when a shopper applies the coupon after selecting the flat rate shipping method where a cart price rule with shipping method set as a condition applies. Previously, the cart page displayed the Coupon is Not valid error, and the coupon was not applied. GitHub-34866
  • The My billing and shipping address are the same checkbox now remains checked by default when a shopper uses Chrome autocomplete to fill in their shipping address and then clicks Next before the shipping methods block is reloaded. GitHub-33725
  • The applied_rule_ids value in the quote_item table now includes a correct list of applied rule IDs. Previously, this value contained only the last applied rule ID.
  • Mini-cart and customer data in local storage now resets when a session is removed from the server. Previously, this data still appeared when the session file was removed.
  • Discrete carts are no longer mistakenly merged from the Admin when persistent cart is enabled.
  • The cart tax and shipping estimator now accurately reflect the default destination configuration. Previously, when you configured default tax destination calculation settings and specified State/Region and ZIP, only the ZIP value was shown in the cart under Estimate Tax and Shipping. This resulted from Magento Open Source setting the region ID to undefined before invoking the conditional statement that set the default region ID from the Admin.
  • Magento Open Source no longer throws this error during checkout when persistent shopping cart is enabled: Invalid state change requested. Previously, when this error was thrown, multiple orders with the same quote_id were occasionally created.
  • The mini cart now displays bundle product prices that reflect cart tax configuration settings. Previously, the mini cart always included taxes in the prices of bundle products.
  • The shipping estimate provided from the cart page is now accurate. collectShippingRates is now set only once. Previously, the shipping estimate was duplicated. GitHub-36648
  • The cart query no longer returns an error when a product in the specified cart is out of stock. Previously, shoppers using this query to make a purchase could not complete their purchase when an item was out of stock, and their checkout page was blank.
  • Guest API requests to POST V1/guest-carts/<cartId>/shipping-information no longer return a cancel status if the page reloads during login in a mobile environment. Previously, Magento Open Source threw a 500 error and logged this exception: TypeError: Argument 2 passed to Magento\CustomerCustomAttributes\Model\Plugin\ProcessCustomerShippingAddressCustomAttributes::beforeSaveAddressInformation() must be of the type string, null given.
  • Free shipping eligibility is now calculated as expected when the Subtotal (Excl. Tax) condition for cart rules is applied. GitHub-36760
  • The cart query now returns the correct tier pricing for a product. GitHub-29655
  • Informative error messages have been added to the checkout page to guide shoppers when the application of a coupon on the shipping page conflicts with the selected shipping method. Previously, a message told shoppers to return to the previous page.
  • The authentication popup is now initialized only when it is needed instead of whenever guest checkout is enabled. It is now initialized when the guest shopper tries to proceed to checkout, and guest checkout is disabled. GitHub-30672