You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Patch code and release notes were published on September 18, 2018 and last revised September 21.
We are pleased to present Magento Commerce 2.2.6. This release includes 25 critical enhancements to product security, over 150 core code fixes and enhancements, and over 350 community-submitted pull requests.
Although this release includes these security enhancements, no confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions, so we recommend that you upgrade your Magento software to the latest version as soon as possible.
See Magento Security Center for a comprehensive discussion of these issues. All exploitable security issues fixed in this release (2.2.6) have been ported to 2.1.15, 1.14.3.10, and 1.9.3.10, as appropriate.
Highlights
In addition to 25 critical security fixes, look for the following highlights in this release:
Core code highlights
This release includes significant performance improvements to the core Magento code:
Substantial improvements to performance
Performance-tuning enhancements focus on catalog indexing and include:
* Category product indexer logic has been optimized, and re-indexing time has decreased up to 98%, from 40 minutes to one minute for 100,000 categories. Previously, when your store contained many categories (100,0000), Magento could take up to 40 minutes to re-index product catalogs.
* The `catalog:image:resize` command execution time has been reduced by up to 90% in the release. However, this improvement necessitates these additional steps after upgrading your Magento instance to 2.2.6:
* Remove `pub/media/catalog/product/cache` . (Removing this folder frees up space.)
* Run `bin/magento catalog:image:resize` to generate a new image cache. (This step is necessary because we’ve changed the path to cached images and must remove the previously cached images.)
* The catalog rule re-indexing operation has been optimized, and the average re-indexing time (which depends on rule conditions) has improved by more than 80%. Previously, a full catalog rule re-index operation on a medium B2C store took more than 20 minutes.
* The catalog price indexer is now scoped and multithreaded, which improves the performance of layered navigation, search, and indexing actions for Magento instances with multiple websites and stores. This makes it possible to parallelize catalog price indexing by websites and customer groups. To re-index in parallel mode, add the `MAGE_INDEXER_THREADS_COUNT` environment variable to `env.php`.
* The time required to load category or product pages for products that are configured with many attributes (more than 500) has been significantly reduced. Refactoring the logic for product attribute retrieval has resulted in a reduction of load time of almost 90% for scenarios with a large number of product attribute sets. (Performance will not noticeably improve for deployments with only one attribute set configured with 500 attributes. However, deployments with many attribute sets that contain only a few attributes will show significant performance improvement. For example, a deployment with 100 attribute sets, each of which contains 50 attributes, might see a 40-90% reduction in load time.)
* The time required to load a store’s home page has been reduced noticeably when the top menu contains many categories. (Load time is still affected by the number of categories and the structure of the top menu.)
* Merchants can now improve store performance by disabling Magento Report functionality. A new configuration setting (**System Configuration:** **General** > **Reports** > **General Options**) allows merchants to disable Magento Reports, which is recommended practice if a merchant's business function does not require this capability.
Improvements to the reliability and ease of the checkout process
* A shopping cart’s contents remain constant even when the checkout page is repeatedly reloaded. Previously, if a customer reloaded the checkout page several times, Magento emptied the shopping cart, and the customer could not place the order. (This problem primarily affected stores running on HTTPS.)
* Refreshing the checkout page no longer deletes the shipping address when a guest checks out. Previously, when the persistent shopping cart was enabled, refreshing the checkout page affected information entered into form fields for a guest checkout.
* The speed at which Magento places an order is no longer affected by how many shipping methods are available. Previously, when a customer placed an order for which multiple shipping methods were available, Magento took more than 20 seconds to place the order.
Additional enhancements
* Configurable products are now sorted by visible prices as expected. Previously, sorting a catalog by price produced sort results that included the prices of out-of-stock products and disabled child products.
* Magento no longer sends duplicate delete requests as a result of an unstable Internet connection. Previously, unintentional mass deletion of products sometimes occurred as a result of an unstable Internet connection.
Magento Cloud highlights
We've added a Docker Compose configuration to the Cloud ece-tools repository for deploying a local development environment.
Merchants can now change store locales without the exporting and importing configuration process.
A new workflow lets merchant add a robots.txt file and generate a sitemap.xml file for a single domain configuration without requiring a change to the infrastructure.
Merchants can now define multiple locales for each theme using the new SCD_MATRIX environment variable, which reduces the amount of theme files to deploy.
Zero-downtime deployment has been implemented through a “connection holding” capability, which ensures no lost connections or site unavailability, providing smooth shopper experience even during deployments involving database schema changes.
We've fixed an issue that caused downtime between the deploy and post-deploy phase. Now, the post_deploy phase begins immediately after the deploy phase ends.
Community contribution highlights
Highlights of community contributions include fixes that improve checkout flow and the sorting of simple products:
Customers can now successfully complete an order when it contains a configurable product with an option that is deleted after the product has been placed in the shopping cart. Previously, the shopping cart could not load the shopping cart after the configurable option was deleted. Thanks to community member jonshipman! GitHub-15467
Magento now maintains the default sort order for products (“newest first”) when you upgrade your Magento deployment. Previously, after upgrade, the default product order in categories changed from “newest first” to “oldest first”. Thanks to community member Danny Verkade! GitHub-15627
Merchants can now successfully change the applied theme setting for a store view (Content > Design > Configuration). Thanks to community member Daniel Ruf! GitHub-14968
Magento loads pages faster because it no longer redundantly calculates product taxes when loading category pages. Thanks to community member Jeroen! GitHub-14941
Core bundled extension highlights
This release includes many enhancements to our core bundled extensions:
Amazon Pay
Enhancements to Amazon Pay include these features:
Implementation of the Magento payment provider gateway, which provides developers a mechanism for integrating stores with payment providers.
Improved handling of virtual products.
New entry in the Admin that allows Amazon Pay to be displayed in the list of payment options.
Combined Synchronous, if possible and Asynchronous settings for authorization mode into one setting. Current settings are now Immediate (previously Synchronous) and Automatic (a combination of the previous Synchronous, if possible and Asynchronous).
dotmailer
Enhancements to dotmailer include these new features:
You can now request and capture the consent of customers and guests using dotmailer’s new Consent Insight.
You can import only those Magento contacts who have opted in (customer subscribers, guest subscribers, and other subscribers).
A warning alerts you when you are about to sync non-subscribers into a dotmailer account.
Improvements have been made to the retry process that results after a failed attempt to access EDC.
Klarna
Enhancements to Klarna include support for these new features:
The Klarna Payments section now includes a link to Klarna automated onboarding and account sign in.
If an approved order is later identified as fraudulent, Klarna notifies the merchant and requests that they try to stop the order from being delivered. In addition, Klarna attempts to cancel the order automatically by sending notification to the merchant. See Managing Your Account for more information.
Shipping and discount order lines have been added to order management calls.
Klarna now passes shipping details in capture requests.
The Klarna API now returns the name and logo URL to use for each payment method instead of hard-coding the payment method names into the module.
For more information on these new features, see Klarna.
Magento Shipping
Batch Processing provides merchants with the ability to
Specify and modify packages and experiences for orders assigned to a batch
Book shipments for a batch
Print all packing slips and printing labels for the batch
New Shipment Reference field associates bookings between a carrier and a customer
Magento Social
Magento has removed the Magento Social Facebook integration, and no longer supports the extension.
In addition to security enhancements, this release contains the following functional fixes.
Installation, setup, and deployment
* You can now use the `app:config:status` command to check whether configuration propagation is up-to-date. (This fix restores this command, which was inadvertently deleted in a previous release.) *Fix submitted by [Pieter Hoste](https://github.com/hostep) in pull request [15174](magento/magento2#15174. [GitHub-14104](magento/magento2#14104)
* The `app:config:dump` command now has an argument that supports dumping only the specified settings that are required to prepare static content on a build system, not all system settings. This new option (`config-types`) makes it possible to dump scopes and themes automatically (which are needed for a build system) while managing system settings manually using `config:set --lock-config`. *Fix submitted by [Juan Alonso](https://github.com/jalogut) in pull request [12410](magento/magento2#12410. [GitHub-11396](magento/magento2#11396)
* Configuration backend models are now populated as expected with all fieldset data, which makes it possible to access all configured values from a current group. [GitHub-16712](magento/magento2#16712)
* The `magento-deploy-ignore` setting in `composer.json` now works as expected. Previously, files specified in this setting were overwritten during deployment.
* The `timestamp` fields in `oauth_nonce` now include indexes to avoid deadlocks while erasing old records. *Fix submitted by [Carlos Lizaga](https://github.com/KarlDeux) in pull request [13328](magento/magento2#13328. [GitHub-10346](magento/magento2#10346)
* Sorting has been disabled in the `glob` and `scandir` functions to improve performance. *Fix submitted by [Leandro F. L.](https://github.com/lfluvisotto) in pull request [16052](magento/magento2#16052.
* The `nginx.config.sample` file no longer includes an option for PHP 5.x. (Magento 2.2.x is not compatible with PHP 5.x.) *Fix submitted by [Sean Breeden](https://github.com/sean-wcb) in pull request [16883](magento/magento2#16883.
* Autoloading performance has improved on production environments as a result of the reduction in `file_exists` calls. *Fix submitted by [Pieter Hoste](https://github.com/hostep) in pull request [16435](magento/magento2#16435.
* Setting deploy mode to production mode by using the `--skip-compilation` flag no longer clears generated code in `generated/code/` and `generated/metadata/`. *Fix submitted by [platformvaimo](https://github.com/platformvaimo) in pull request [16211](magento/magento2#16211.
* We've made two changes to `Magento/Config` module: `Magento/Config/Test/Unit/Block/System/Config/Form/Field/ImageTest.php::testGetElementHtmlWithValue()` method no longer references a invalid backend model, and the anonymous function no longer has an unused `$data` in `Magento/Config/Model/Config/Importer.php`. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15511](magento/magento2#15511.
* The upgrade check implemented during setup now indicates success if the latest version of Magento is already installed. Previously, the message indicated that the latest product version was already installed was presented as error. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [15012](magento/magento2#15012.
* The **Add Block Names to Hints** configuration setting has been renamed to **Add Block Class Type to Hints**. *Fix submitted by [Chris Pook](https://github.com/chris-pook) in pull request [14939](magento/magento2#14939.
* The `cron:run` command now reads `cron/enabled` configuration setting and if this value is set to **1** (the default value), then the `cron:run` command will execute. A value of **0** determines that `cron:run` will not be executed, and prompts Magento to send the customer email indicating that `cron` is disabled.
* New command-line interface (CLI) commands support setting and showing indexer dimension modes:
* Amazon Pay no longer appears as an option during checkout when a customer selects **Check Out with Multiple Addresses**. Previously, Magento displayed Amazon Pay as an option, even though Amazon Pay does not support multishipping.
* You can now change and save Amazon Pay configuration settings from **Configuration** > **Sales** > **Payment Methods** > **Amazon Pay** when deploying Magento in a Cloud environment. Previously, Magento did not save changed settings.
B2B
* Company blocked warnings are no longer included in the source code. Previously, source code included these warning strings, which search indexers detected and treated as text.
* Category pages now display as expected all products whose SKUs contain either single or double quotation marks. Previously, Magento threw an error when trying to set pricing and structure on a shared catalog when product SKUs contained these characters.
* In multisite environments, you can now save the address of a company that is allowed only on the non-primary website. Previously, if a merchant tried to save a company address from the default website, Magento displayed this error, `Invalid value of "UA" provided for the `country_id` field`.
* Access to the Companies resource can now be explicitly set on the Roles Resources page in Admin. Previously, this resource was available only to top-level administrators with all resources selected.
* Magento now displays the correct product total price value on all websites in a B2B deployment. Previously, Magento did not apply cart price rules for product prices on non-primary websites, but instead displayed the product price assigned to products on the primary website to all websites.
* When **Website Restrictions** are set to **Private Sales: Login Only**, access to the storefront is now restricted to customers who log in, and merchants can still create new companies in the Admin. Previously, when a merchant tried to create a company when this setting was enabled, Magento threw this error, `Can not register new customer due to restrictions are enabled`.
* Configurable products can now be added to the requisition list directly from the Category page.
* The `beforeSave` method on Braintree `CountryCreditCard` class now has a statement that supports `app:config:import`. Previously, Magento threw an exception during import if it encountered an empty field in the Braintree configuration file. *Fix submitted by [Mateusz Lerczak](https://github.com/bmxmale) in pull request [14829](magento/magento2#14829.
* Guests can now view products as expected when shared catalogs are enabled. Previously, if a merchant added a product when shared catalogs were enabled, guest users could not view the product, even when shared catalogs were later disabled.
* Company administrators can now use Quick Order to buy products. Previously, when a company administator tried to use Quick Order to buy products, Magento displayed this error: `The SKU was not found in the catalog`.
* You can now successfully search for products when the **Shared Catalog** setting is enabled.
Bundle products
* Magento now successfully imports bundle products. Previously, bundle products were not visible in the product catalog, and were listed as out-of-stock on the storefront.
* The `Magento_Bundle` module name has been added to the relevant template files to meet Magento standard coding format. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [15825](magento/magento2#15825.
* The `option` variable has been renamed to `quoteItemOption` to improve code readability in `app/code/Magento/Bundle/Model/Product/Type.php`. *Fix submitted by [Leandro F. L.](https://github.com/lfluvisotto) in pull request [16143](magento/magento2#16143.
* Magento now accurately displays the status of bundle product stock when **Add to Cart** is enabled for bundle products. Previously, bundle products with the **User Defined** field unchecked could not be back ordered as expected.
* The breadcrumbs component no longer relies on the `mageMenu` widget. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [15178](magento/magento2#15178. [GitHub-14987](magento/magento2#14987)
* The `data-container` class name is now based on view mode. *Fix submitted by [Sunil](https://github.com/sunilit42) in pull request [15350](magento/magento2#15350. [GitHub-15319](magento/magento2#15319)
* Breadcrumbs now work as expected when a product name contains quotation marks. Previously, the breadcrumbs on the product details page caused this syntax error to be thrown, `SyntaxError: Unexpected token x in JSON`. *Fix submitted by [Jignesh Baldha](https://github.com/jignesh-baldha) in pull request [15347](magento/magento2#15347. [GitHub-15037](magento/magento2#15037)
* Disabling a product now removes it from the flat index as expected. *Fix submitted by [Mr. Lewis](https://github.com/lewisvoncken) in pull request [15019](magento/magento2#15019. [GitHub-14966](magento/magento2#14966)
* The success message that Magento displays when a customer adds a product to the compare list now contains a link to the comparison list. *Fix submitted by [Andreas von Studnitz](https://github.com/avstudnitz) in pull request [13862](magento/magento2#13862.
* Cache problems no longer occur when currencies are used without a currency symbol. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15902](magento/magento2#15902.
* Catalog component blocks now contain correct return type suggestions, and typos have been corrected where needed in the PHPDocs. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15913](magento/magento2#15913.
* Widget cache errors that resulted in one widget being loaded twice on the storefront have been resolved. *Fix submitted by [Alexandr Kozyr](https://github.com/AlexandrKozyr) in pull request [12764](magento/magento2#12764. [GitHub-4389](magento/magento2#4389)
* Magento no longer makes redundant requests on the 'customer data' on the checkout page. *Fix submitted by [Andrey Bezyazychnyy](https://github.com/andrewbess) in pull request [14314](magento/magento2#14314. [GitHub-13765](magento/magento2#13765)
* Administrators with permission to change product names on one website only cannot change product names on any other sites. Previously, an administrator with permission to change a product name on one site only could change product names on all websites in a multisite deployment.
* Administrators with limited privileges can now save products as expected.
* Magento now uses the current date as expected when setting the start date for a special price. Previously, Magento set the start date for a special price a few years in the future, which prevented the special price for being active.
* Magento now reliably displays category images on the custom store view level. Previously, the category image on custom store view level alternately disappeared and appeared after every save operation.
* Magento no longer removes downloadable product links after an attribute is updated.
* Extra POST requests are no longer sent if the **Synchronize widget products with backend storage** option is set to **yes**.
* You can now create a product date attribute that contains a day value than exceeds 12 (in the format dd/mm/yyyy). Previously, when you created a product attribute with a default date specifying a day greater than 12, Magento did not save the attribute, but instead displayed this error, `Invalid default date`.
* You can now use the `Magento\Catalog\Model\ProductRepository` class to assign a product to one website as expected. Previously, using this class to save a product assigned the product to all existing websites, not just the specified one.
* Images now load as expected on the product display page (PDP) when the image name contains double quotation marks.
* The SEO-friendly URL for the Category page now works as expected.
* The **Use Default Value** checkboxes in the design section of the category page are now enabled by default as expected.
* Customers can now use the **Add Product By SKU** button to add configurable products to a sales order.
* Empty dropdown or swatch type product attributes are no longer visible on the product page.
* Attributes that have empty values across all products being compared are not displayed as rows in the comparison table. Previously, Magento displayed these attributes with an N/A value on the Compare Products page.
* The Catalog page now displays breadcrumbs as expected.
* Tiered pricing and quantity increments now work as expected with decimal-based inventories.
* Magento now updates the `catalog_category_product_index` table as expected after a category is deleted.
* Customizable options are now configured the same for all websites to which a product is added. Previously, when a merchant added a product with customizable options to an additional site, the options were corrupted.
* The **Use default value** option is no longer unchecked unless the user overrides the value of the attribute in the store view scope. Previously, after creating an item, if the user changed to store view scope and did not make any modifications to the item's attributes and only clicked **Save**, most of the attributes that were set as **Use default value** became unchecked.
* Category product indexer logic has been optimized, and re-indexing time has been noticeably reduced. Previously, when you had many categories (100,000), Magento could take up to 40 minutes to re-index product catalogs.
* Widget selection by Enabled Products no longer causes a fatal error on a storefront when the **Flat Product** is configured.
* Merchants can now change the `status` and `update` attributes from the product page. Previously, Magento returned a 404 page when bulk enabling or disabling products in the Admin with a restricted user role that is limited to a specific website.
* Magento now maintains the default setting for a product's `status` attribute when you create a new product. Previously, when creating a new product after changing the default option from Enabled to Disabled for this attribute, the status is incorrectly set to enabled by default.
* The print preview of product comparison results (that is, the page of results that Magento produces when you click **Compare** after selecting two or more products) now displays as expected. Previously, only a subset of page elements was displayed.
* Magento now maintains the correct dates in the results of filtering the Admin Product Grid Filter: Set Product as New from Date. [GitHub-11517](magento/magento2#11517)
* As you type additional characters into the text field for a product's custom option, the hint showing the number of characters left before reaching the maximum now decreases as expected.
* Merchants can now set custom option fixed prices with negative values in the Admin. [GitHub-7333](magento/magento2#7333)
* You can now unset a category image on the store-view level when the image is defined on all store views.
* The Catalog Products List widget can now display products on the storefront that have specific attributes.
* The shopping cart now correctly displays images of configurable products that have only size options (that is, no color options). Previously, when a customer added a configurable product that had only size options to her shopping cart, the shopping cart did not display the expected product image. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [16863](magento/magento2#16863. [GitHub-16843](magento/magento2#16843)
* Magento now throws an exception as expected when a user tries to submit a product review without selecting a star rating. Previously, if a user submitted a product review without selecting a star rating, Magento assigned a one-star rating.
* Magento now successfully displays product prices in currencies without minor units if the price amount is less then the number group size. [GitHub-11711](magento/magento2#11711)
* Magento now displays the correct price on the product page for storefronts running Japanese locales. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15909](magento/magento2#15909. [GitHub-11711](magento/magento2#11711)
* Magento now correctly saves the value of a product's custom options. Previously, Magento saved all objects by using the same value object for all values. *Fix submitted by [Jeroen Van Leusden](https://github.com/JeroenVanLeusden) in pull request [13569](magento/magento2#13569. [GitHub-5067](magento/magento2#5067)
* Magento now displays the product name as browser title as expected. Previously, the meta title tag was missing, which prevented Magento from displaying the product name. *Fix submitted by [Riccardo Tempesta](https://github.com/phoenix128) in pull request [15532](magento/magento2#15532. [GitHub-15501](magento/magento2#15501)
* Magento now maintains the default products sort order of “newest first” when you upgrade your Magento deployment to 2.2.4. Previously, after upgrade, the default products order in categories changed from “newest first” to “oldest first”. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [15629](magento/magento2#15629. [GitHub-15627](magento/magento2#15627)
* Links on product pages are now linkable as expected. Previously, when Magento displayed a product page, none of the provided links were clickable. *Fix submitted by [simonjanguapa](https://github.com/simonjanguapa) in pull request [15687](magento/magento2#15687. [GitHub-15393](magento/magento2#15393)
* Deprecated methods in Message Manager have been replaced with valid methods. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [16924](magento/magento2#16924.
* Array short syntax usage has been standardized in these files: `app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php`, `app/code/Magento/GroupedProduct/Test/Unit/Model/ProductTest.php`, and `setup/src/Magento/Setup/Module/Di/Code/Reader/FileScanner.php`. *Fix submitted by [Leandro F. L.](https://github.com/lfluvisotto) in pull request [16880](magento/magento2#16880.
* The error message that Magento displayed when a duplicate error key occurred during product import has been improved. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16389](magento/magento2#16389.
* We've removed the direct use of the object manager when saving Admin attribute sets. *Fix submitted by [AnshuMishra17](https://github.com/AnshuMishra17) in pull request [16217](magento/magento2#16217.
* Breadcrumb JSON configuration has been moved to the view model and serialized using the Magento JSON serializer. *Fix submitted by [Diederick Bruin](https://github.com/diedburn) in pull request [15521](magento/magento2#15521.
* `row_id` has been added to the flat action indexer, ensuring that index values are not set to `0` for new products when using index on save. Previously, if you used `\Magento\Framework\Api\SearchCriteriaBuilder`, and the flat `product row_id` is set to `0`, Magento did not show the product in the `getList` of the `ProductRepository`. *Fix submitted by [Mr. Lewis](https://github.com/lewisvoncken) in pull request [15010](magento/magento2#15010.
* Magento no longer inserts redundant links to the homepage into breadcrumbs on the product page. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [14994](magento/magento2#14994.
* Magento now correctly displays product information for products that have a negative price as a custom option. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [15202](magento/magento2#15202.
* Product names can now contain a double quotation mark character (`"`). Previously, when a product name contained this character, Magento threw a JavaScript error. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [15162](magento/magento2#15162.
* Administrators who lack access to the CatalogRule module can now perform operations as expected in the Admin cart price rule edit page. *Fix submitted by [Neos2007](https://github.com/Neos2007) in pull request [14886](magento/magento2#14886.
* Magento now updates product options and quantity by checking the item ID when updating a cart that contains configurable products with different options. *Fix submitted by [Nitin Khalasi](https://github.com/nit-it) in pull request [14765](magento/magento2#14765.
* Product meta descriptions no longer contain unnecessary HTML tags. *Fix submitted by [David Windell](https://github.com/davidwindell) in pull request [14538](magento/magento2#14538.
* Attributes that have empty values across all products being compared are not displayed on the Compare Products page as rows in the comparison table. Previously, these attributes were displayed with a value of **N/A**.
* Magento now maintains the correct dates in the results of filtering the Admin Product Grid Filter: Set Product as New from Date. [GitHub-11517](magento/magento2#11517)
* Company Admin can now use Quick Order to buy products. Previously, when a company administator tried to use Quick Order to buy products, Magento displayed this error: `The SKU was not found in the catalog`.
CAPTCHA
* Customers can now successfully log in when guest checkout is disabled and CAPTCHA is enabled. Previously, Magento threw the `Provided form does not exist` error when a customer tried to log in under these conditions.
* CAPTCHA validation now works when the **Website Restrictions** setting is enabled.
* The `\Magento\Captcha\Observer\CaptchaStringResolver` class is now covered by unit tests. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16065](magento/magento2#16065. [GitHub-14966](magento/magento2#14966)
* The `CheckRegisterCheckoutObserver` class is now covered by unit tests. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16160](magento/magento2#16160.
* The `\Magento\Captcha\Observer\CheckGuestCheckoutObserver` class is now covered by unit tests. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16680](magento/magento2#16680.
* Autocomplete for CAPTCHA inputs has been disabled. *Fix submitted by [Denis Belevtsov](https://github.com/denistrator) in pull request [17114](magento/magento2#17114.
* Integration tests now check that customer login attempts are removed after a successful login or account details edit. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16306](magento/magento2#16306.
* Integration tests now check that administrator login attempts are removed after a successful login or account details edit. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16300](magento/magento2#16300.
* The `CheckGuestCheckoutObserver` class is now covered by unit tests. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16680](magento/magento2#16680.
Cart and checkout
* Placeholders for the password field no longer suggest that a password is optional. Previously, the placeholder for the password field in the checkout page suggested that the password was optional, but after validation, Magento indicated that the password field was mandatory. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [16379](magento/magento2#16379. [GitHub-16378](magento/magento2#16378)
* The dropdown toggle icon on the shopping cart now works as expected. Previously, the arrow did not change direction as expected when you toggled the Discount or Tax options. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [15991](magento/magento2#15991.
* The shopping cart icon on the checkout page on mobile screens now displays hover color and regular color as expected. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16002](magento/magento2#16002.
* Customers are not unexpectedly logged out if the customers hits the F5 key twice during checkout. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [14428](magento/magento2#14428. [GitHub-4301](magento/magento2#4301), [GitHub-12362](magento/magento2#12362), [GitHub-13427](magento/magento2#13427)
* The **Purchased Order Form** button is now correctly aligned. *Fix submitted by [Neeta Kangiya](https://github.com/neeta-wagento) in pull request [15331](magento/magento2#15331. [GitHub-15334](magento/magento2#15334)
* The **Purchased Order Form** button is now visible. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15372](magento/magento2#15372. [GitHub-15334](magento/magento2#15334)
* Magento no longer displays duplicate element IDs on the Checkout page. *Fix submitted by [Julien ANQUETIL](https://github.com/julienanquetil) in pull request [15585](magento/magento2#15585. [GitHub-13415](magento/magento2#13415)
* During the payment step of checkout, a customer can now successfully deselect the **Billing save-in address book** checkbox in a selected payment method other than the default method. *Fix submitted by [Rakesh Gangani](https://github.com/rakesh-gangani) in pull request [15344](magento/magento2#15344. [GitHub-13692](magento/magento2#13692)
* The `.block-minicart` element on the mini cart dropdown menu no longer has an empty class. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [14715](magento/magento2#14715. [GitHub-14669](magento/magento2#14669)
* Customers can now add configurable products to their shopping cart when Magento is running on Internet Explorer 11.x.
* The free shipping cart price rule now works as expected when the UPS shipping method is enabled. Previously, UPS Ground shipping method was not available for free shipping at checkout when the UPS shipping method was enabled.
* Cart price rule condition values now handle commas as expected.
* Free shipping coupons now work as expected with Table Rates shipping. Previously, Magento displayed this message when a customer tried to use a free shipping coupon: `Sorry, no quotes are available for this order`. [GitHub-8172](magento/magento2#8172)
* Magento now displays correct store view prices for cases when a merchant uses a CSV file to add products by SKU from the Admin.
* A merchant can successfully use SKU values that contain capital letters to add a product to a cart from the Admin.
* Refreshing the checkout page no longer deletes the shipping address when a guest checks out. Previously, when the persistent shopping cart was enabled, refreshing the checkout out page affected information entered into form fields for a guest checkout.
* The speed at which Magento places an order is no longer affected by how many shipping methods are available. Previously, when a customer placed an order for which multiple shipping methods were available, Magento took more than 20 seconds to place the order.
* Magento now maintains browser history as expected when a user navigates from the checkout contact information page to the checkout payment information page. Previously, when a user tried to retrace her steps after landing on the payment information page, Magento did not return them to the checkout contact information page, but instead landed on a product page.
* Magento now displays a message when a gift card card is removed during checkout.
* Guest orders placed with gift cards can now be canceled.
* A shopping cart’s contents remains constant even when the Checkout page is repeatedly reloaded. Previously, if a customer reloaded the checkout page several times, Magento emptied the shopping cart and the customer could not place the order. (This problem primarily affected stores running on HTTPS.)
* The message that Magento displays when a customer has successfully added a product to his shopping cart now contains a link to the cart. *Fix submitted by [Andreas von Studnitz](https://github.com/avstudnitz) in pull request [13904](magento/magento2#13904.
* The Update button now behaves the same whether product quantity is manually edited or changed by JavaScript. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [14935](magento/magento2#14935.
* Magento no longer displays the infinite checkout loader when a module that is loading makes a `require` call, but the dependency is not returned (typically due to network error). *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [14874](magento/magento2#14874.
* The minicart quantity label no longer has a fixed length. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [14716](magento/magento2#14716.
* Double-clicking on the **Proceed to checkout** button from the minicart no longer returns an empty shopping cart.
Cleanup
Our community contributors have made many helpful, minor corrections to spelling and code syntax throughout the code base.
Spelling corrections
* Corrected misspelling of `formatedPrice` throughot the code base. *Fix submitted by [Arnoud Beekman](https://github.com/arnoudhgz) in pull request [16726](magento/magento2#16726.
* Corrected return message from `ProductRuleTest.php`. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16721](magento/magento2#16721.
* Replaced the `proccessAdditionalValidation` method with `processAdditionalValidation`. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [16414](magento/magento2#16414.
* Corrected misspelling in `SynonymGroupRepositoryInterface`. *Fix submitted by [AnshuMishra17](https://github.com/AnshuMishra17) in pull request [16711](magento/magento2#16711.
* Corrected misspelling in library file. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16495](magento/magento2#16495.
* Corrected punctuation in the message displayed on **CONTENT** > **Design** > **Configuration**. *Fix submitted by [Erik Hansen](https://github.com/erikhansen) in pull request [16489](magento/magento2#16489.
* Correct misspellings in Model and library files. *Fix submitted by [Namarata](https://github.com/sanganinamrata) in pull request [16230](magento/magento2#16230.
* Corrected misspelling in `_exportAddressses` method name. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15275](magento/magento2#15275.
* Corrected misspelling in comments for `addTaxPercents()` in `app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php`. *Fix submitted by [AnshuMishra17](https://github.com/AnshuMishra17) in pull request [15431](magento/magento2#15431.
* Corrected misspelling in `abstract.js`. *Fix submitted by [Vitaliy](https://github.com/VitaliyBoyko) in pull request [15411](magento/magento2#15411.
* Corrected misspellings in `app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/AbstractSidebar.php`, `app/code/Magento/Ui/view/base/web/js/form/components/fieldset.js`, `app/code/Magento/Ui/view/base/web/js/form/components/group.js`, `setup/pub/angular-sanitize/angular-sanitize.js`, and `setup/pub/angular-sanitize/angular-sanitize.min.js.map`. *Fix submitted by [Danny Verkade](https://github.com/dverkade) in pull request [15715](magento/magento2#15715.
* Corrected misspelling in `app/code/Magento/Catalog/Model/Product/Type/AbstractType.php`. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15519](magento/magento2#15519.
* Corrected misspellings in Multishipping and User modules. *Fix submitted by [Anna Völkl](https://github.com/avoelkl) in pull request [15513](magento/magento2#15513.
* Corrected a misspelling in function comment in `app/code/Magento/Paypal/Model/Api/Nvp.php` *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [15302](magento/magento2#15302.
* Corrected misspellings in PHPDocs and comments. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15293](magento/magento2#15293.
* Corrected typo in method name `_getCharg[e]ableOptionPrice`. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15276](magento/magento2#15276.
* Corrected typo in database column comment in `app/code/Magento/Catalog/Setup/InstallSchema.php`. *Fix submitted by [Vitaliy](https://github.com/VitaliyBoyko) in pull request [15291](magento/magento2#15291.
* Corrected misspelling in the name of private method `\Magento\Catalog\Console\Command\ImagesResizeCommand::getUniq[ue]ImageIndex`. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15282](magento/magento2#15282.
* Corrected typo in the `\Magento\Framework\Image::open` exception message. *Fix submitted by [Tom Richards](https://github.com/t-richards) in pull request [15269](magento/magento2#15269.
* Corrected misspelling in `ResourceModel\Coupon.php:updateSpecificCoupons`. *Fix submitted by [Stephen Biston](https://github.com/sjb9774) in pull request [14891](magento/magento2#14891.
* Corrected typo in the name of the `\Magento\Framework\App\Request\Http::removeRepitedSlashes` method. *Fix submitted by [Igor Tripolskiy](https://github.com/olmer) in pull request [15256](magento/magento2#15256.
* Corrected misspelling in `app/code/Magento/CatalogSearch/Block/Advanced/Form.php`. *Fix submitted by [Jeevan M R](https://github.com/jee1mr) in pull request [15053](magento/magento2#15053.
* Corrected misspelling in `.less` files. *Fix submitted by [Kalpesh Mehta](https://github.com/kalpmehta) in pull request [15023](magento/magento2#15023.
* Removed double occurrence of 'it' from sentences and corrected minor grammar error. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16240](magento/magento2#16240.
* Fixed typo in `app/code/Magento/Checkout/etc/webapi.xml`. *Fix submitted by [Markus Haack](https://github.com/mhaack) in pull request [15845](magento/magento2#15845.
* Corrected misspelling in `file-uploader.js` and `storage-manager.js`. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15888](magento/magento2#15888.
* Corrected misspelling in `scripts.js`. *Fix submitted by [Ledian Hymetllari](https://github.com/ledian-hymetllari) in pull request [15878](magento/magento2#15907.
* Corrected grammar error in the "What is this" tooltip for the Braintree vault tool tip. *Fix submitted by [kreativedev](https://github.com/kreativedev) in pull request [17151](magento/magento2#17151.
* Renamed `_requesetd` to `_requested` in `app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js`. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [16971](magento/magento2#16971.
* Removed double occurrences of words from `Magento_Catalog`, `Magento_Customer`, `Magento_Downloadable`, `Magento_Sales`, and `lib` and `dev` test function comments. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16977](magento/magento2#16977.
* Correct misspelling in method name and result in these files: `dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php` and `dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertCityBasedShippingRateChanged.php`. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15297](magento/magento2#15297.
Minor corrections to code and code formatting
* Removed extra spaces from `Magento/Ui`. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [16872](magento/magento2#16872.
* Improved code formatting. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16821](magento/magento2#16821.
* Removed comments and unnecessary spaces. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [16748](magento/magento2#16748.
* Removed space before ending sentence throughout code base. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16717](magento/magento2#16717.
* Removed unnecessary spaces in `app/code/Magento/Catalog/Pricing/Price/ConfiguredRegularPrice.php`. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [15129](magento/magento2#15129.
* Removed double occurrences of words from the lib and dev test function comments and from these modules: `Magento_Catalog`, `Magento_Customer`, `Magento_Downloadable`, and `Magento_Sales`. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16644](magento/magento2#16644.
* Removed double occurrences from `jQuery`, Angular JS files and the `Magento_Setup` module's scan function's comment. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16581](magento/magento2#16581.
* Removed extra space from the value of the `is_required` XML node in `SynonymGroup.xml`. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16557](magento/magento2#16557.
* Minor corrections to code throughout the code base. *Fix submitted by [Grayson](https://github.com/GraysonChiang) in pull request [16841](magento/magento2#16841.
* Removed unused data from `app/code/Magento/Ui/Model/Export/ConvertToCsv.php` and `app/code/Magento/Ui/Model/Export/ConvertToXml.php`. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16524](magento/magento2#16524.
* Removed unnecessary translations for label and comment tags and added missing translation strings. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [16090](magento/magento2#16090.
* Removed redundant plug-in information (`dev:di:info`). *Fix submitted by [Alexander Shkurko](https://github.com/Coderimus) in pull request [16474](magento/magento2#16474.
* Removed redundant semicolon from these files: `app/code/Magento/Tax/Model/Sales/Total/Quote/CommonTaxCollector.phpMagento/Multishipping/Test/Unit/Block/Checkout/SuccessTest.php` and `app/code/Magento/Tax/Model/Sales/Total/Quote/CommonTaxCollector.php`. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15594](magento/magento2#15594.
* Corrected errors in method description in `app/code/Magento/Config/Block/System/Config/Form.php`, `app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php`, and `app/code/Magento/Customer/Model/Session.php`. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15549](magento/magento2#15549.
* Removed extra space and formatted the code in `app/code/Magento/Captcha/i18n/en_US.csv`. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15552](magento/magento2#15552.
* Removed the redundant `else` statement in `app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php`. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [15435](magento/magento2#15435.
* Fixed misplaced bracket in `Option/Type/Text.php`. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [16566](magento/magento2#16566.
* Removed a duplicate line and added comment in `app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Discount.php`. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15362](magento/magento2#15362.
* Removed unused variable in `lib/web/css/source/lib/variables/_typography.less`. *Fix submitted by [Vitaliy](https://github.com/VitaliyBoyko) in pull request [15386](magento/magento2#15386.
* Corrected variable names in `LockAdminUserWhenEditingIntegrationTest` and `AssertCityBasedShippingRateChanged`, among others. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15294](magento/magento2#15294.
* Corrected property name in `dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Backend/ControllerAclTest.php`. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15292](magento/magento2#15292.
* Removed non-existing argument from the constructor's comment block in `app/code/Magento/Translation/Block/Html/Head/Config.php` and added space where needed in `app/code/Magento/Translation/Model/Json/PreProcessor.php`. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [15249](magento/magento2#15249.
* Removed redundant close tag from `app/code/Magento/Review/view/frontend/templates/view.phtml`. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [14928](magento/magento2#14928.
* Removed extra spaces from a key-value pair in the `en_US.csv`language file. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [14896](magento/magento2#14896.
* Cleaned up `foreach` and `break` statements in `app/code/Magento/Rule/Model/Condition/AbstractCondition.php`. *Fix submitted by [Thomas Klein](https://github.com/thomas-blackbird) in pull request [14609](magento/magento2#14609.
* Corrected grammar in `README.md`. *Fix submitted by [Stanislav Idolov](https://github.com/sidolov) in pull request [14844](magento/magento2#14844.
* Corrected type hints in `Webapi/Controller/Soap/Request/Handler.php` and `Webapi/Model/Plugin/GuestAuthorization.php. Also corrected case in property annotation in `Soap\Server.php` and added undefined property `_appState in `Controller\Soap.php`. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [16626](magento/magento2#16626.
* Corrected `Magento\Webapi\Model\Soap\Fault::toXml()` method invocation in `Soap\FaultTest.php`. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [16626](magento/magento2#16626.
* We've removed an unused class from the `lib/_forms.less` file. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [15791](magento/magento2#15791.
* We've removed unnecessary CSS code from `_actions-toolbar.less`. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [15789](magento/magento2#15789.
* We've removed the unnecessary double semicolon from the style sheets. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [15795](magento/magento2#15795.
* We've removed the unused code from `docs.less`. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [15871](magento/magento2#15871.
* Removed extraneous negative margin on product list and product list items. *Fix submitted by [Steven de Jong](https://github.com/StevenGuapaBV) in pull request [15936](magento/magento2#15936. [GitHub-15308](magento/magento2#15308)
* Indentation issues with LESS files have been resolved. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15811](magento/magento2#15811.
* The syntax for before-after operators in LESS files has been corrected. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16181](magento/magento2#16181.
* Redundant keywords have been removed from miscellaneous files. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16182](magento/magento2#16182.
* We've corrected misspellings in the comment section of `OrderFixture.php`. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16183](magento/magento2#16183.
* Unnecessary leading and trailing spaces have been removed from the customer account login page email field. *Fix submitted by [Piyush Dankhara](https://github.com/dankhrapiyush) in pull request [15365](magento/magento2#15365. [GitHub-6058](magento/magento2#6058)
* Unnecessary leading and trailing spaces have been removed from fields in the customer account create and login forms. *Fix submitted by [Piyush Dankhara](https://github.com/dankhrapiyush) in pull request [16192](magento/magento2#16192. [GitHub-6058](magento/magento2#6058)
* Unnecessary leading and trailing spaces have been removed from fields in newsletter, forgot password, checkout login and email to a friend forms. *Fix submitted by [Piyush Dankhara](https://github.com/dankhrapiyush) in pull request [16564](magento/magento2#16564. [GitHub-6058](magento/magento2#6058)
* Unnecessary leading and trailing spaces have been removed from fields in the customer confirmation form. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16595](magento/magento2#16595. [GitHub-6058](magento/magento2#6058)
* Removed unnecessary commented code from these files: `app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php`, `app/code/Magento/Sales/Model/Order/Creditmemo.php`, `lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php`, and `lib/internal/Magento/Framework/Model/ResourceModel/Db/Relation/ActionPool.php`. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [17077](magento/magento2#17077.
* Removed unnecessary spaces from the price value in `app/code/Magento/Catalog/view/base/templates/product/price/amount/default.phtml`. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [17027](magento/magento2#17027.
* Remove unused comments from `_initDiscount()` function. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [17002](magento/magento2#17002.
* Corrected misspellings in multiple files, including `app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main/Tree/Attribute.php`, `app/code/Magento/Catalog/view/adminhtml/web/js/product/weight-handler.js`, `app/code/Magento/Signifyd/Test/Unit/Controller/Webhooks/HandlerTest.php`, `app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js`, and `dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetCmsPageLink.php`. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16980](magento/magento2#16980.
* Corrected formatting of the JavaScript code in the `app/code/Magento/Ui/view/base/templates/control/button/split.phtml` and `app/code/Magento/Ui/view/base/web/js/grid/controls/button/split.jstemplate` files. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [14967](magento/magento2#14967.
* Removed redundant `@throws` hinting and unused import for `AdvancedPricingImportExport` module classes. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15872](magento/magento2#15872.
* Added missing PHPDoc to methods throughout the code base. *Fix submitted by [Leandro F. L.](https://github.com/lfluvisotto) in pull request [16215](magento/magento2#16215.
* Fixed mismatches in case between class and method name spellings. *Fix submitted by [Leandro F. L.](https://github.com/lfluvisotto) in pull request [16141](magento/magento2#16141.
* Removed an unnecessary comma from the `translate` attribute in `app/code/Magento/Sales/etc/adminhtml/system.xml`. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15615](magento/magento2#15615.
CMS content
* Page layout issues that resulted from incorrect module sequence have been corrected. Previously, the `Magento_theme` module was loaded too late, which resulted in unexpected display issues.
* Corrected use statements and return values in `AggregationInterface`. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [14893](magento/magento2#14893.
Configurable products
* Customers can now successfully complete checkout when their order contains a configurable product with a configurable option. Previously, customers could not check out when there is a configurable product in the cart with a configurable option, which is now deleted, shopping cart could not be loaded. *Fix submitted by [jonshipman](https://github.com/jonshipman) in pull request [15468](magento/magento2#15468. [GitHub-15467](magento/magento2#15467)
* Magento now displays the manufacturer attribute on the Admin on the Catalog page for configurable products. Previously, Magento displayed these attributes on the simple products catalog page, but not on the configurable products catalog page.
* Configurable products are now sorted by only visible prices as expected. Previously, sorting a catalog by price resulted in sort results that included the prices of out-of-stock products and disabled child products.
* When two simple products of a configurable product have different prices, Magento now uses the lowest price as the default price on the product detail page. Previously, if one of the simple products had price=0, Magento did not use it as the default. *Fix submitted by [Torrey Tsui](https://github.com/torreytsui) in pull request [16540](magento/magento2#16540.
* The missing check for a `false` value has been added to `ConfiguredRegularPrice`. Previously, when the parent method returned false, Magento threw this fatal error: `NOTICE: PHP message: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Magento\Catalog\Pricing\Price\ConfiguredOptions::getItemOptionsValue() must be of the type float, boolean given, called in /app/vendor/magento/module-catalog/Pricing/Price/ConfiguredRegularPrice.php on line 74 and defined in /app/vendor/magento/module-catalog/Pricing/Price/ConfiguredOptions.php:24`. *Fix submitted by [Tibor Kotosz](https://github.com/tkotosz) in pull request [15129](magento/magento2#15129.
* Fixed the DocBlock for `hasInvoices()`, `hasShipments()`, and `hasCreditmemos()` in `app/code/Magento/Sales/Model/Order.php`. *Fix submitted by [Lyzun Oleksandr](https://github.com/nuzil) in pull request [16554](magento/magento2#16554.
* Fixed type hints and docs for the Downloadable Samples block. *Fix submitted by [Björn Kraus](https://github.com/nuzil) in pull request [16408](magento/magento2#16408.
Cookies
* Magento now responds to a customer accepting a cookie notice by simply hiding the notice. Previously, Magento reloaded the entire site when a user accepted the cookie notice. *Fix submitted by [Torben Höhn](https://github.com/torhoehn) in pull request [16890](magento/magento2#16890.
Customer account
* Magento no longer logs out a customer after a successful password change.
* Magento no longer displays the State/Province instead of the State field on U.S. customer address forms.
* Customer attributes are now correctly validated on the Admin Order form. Previously, Magento validated attributes\length after an order has been submitted, but not on the Admin Order form.
* Customers no longer lose their session when they switch stores on different domains.
* Non-U.S. and non-Canadian addresses that are displayed in the **Address Book summary** field now display the State/Province values as expected if that information was provided.
* The checkout page no longer displays custom address attributes when **Show on frontend** is set to **no**.
* Magento now displays the default value for a new Customer attribute that is created from the Admin. Previously, Magento set this value to **no** by default.
* Administrators can see all customers when the **Share Customer Accounts** value is set to Global.
* User login email validation no longer fails if the field contains a leading or trailing space on Internet Explorer 11.x. *Fix submitted by [Piyush Dankhara](https://github.com/dankhrapiyush) in pull request [15365](magento/magento2#15365. [GitHub-6058](magento/magento2#6058)
* Customer accounts are now unlocked as expected after a password reset. *Fix submitted by [Andrea Gaspardo](https://github.com/andreagaspardo) in pull request [15255](magento/magento2#15255. [GitHub-15534](magento/magento2#15534)
* Magento no longer changes the format of Date of Birth information when this field is enabled on the Create New Customer Account page, and an existing customer tries to re-register. *Fix submitted by [KaushikChavda](https://github.com/KaushikChavda) in pull request [15272](magento/magento2#15272.
* When saving a customer group, Magento now copies extension attributes to the new data model that is returned. Previously, this action was not completed, and Magento behaved unpredictably. *Fix submitted by [Joseph Maxwell](https://github.com/JosephMaxwell) in pull request [16254](magento/magento2#16254.
* The `customer.account.dashboard.info.extra` block has been moved to contact information from the newsletter section in `app/code/Magento/Customer/view/frontend/templates/account/dashboard/info.phtml`. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [14923](magento/magento2#14923.
Directory
* You can now configure different Allowed Countries for default and store scopes. *Fix submitted by [Oleksandr Kravchuk](https://github.com/swnsma) in pull request [16693](magento/magento2#16693.
dotmailer
The ROI tracking feature now tracks order events properly.
The importer now works as expected.
Catalog sync now syncs all products across all created collections when it is configured to sync on the store level.
The validation process for new subscribers no longer permits subscribers to be enrolled multiple times into the new subscriber program.
Unexpected errors during subscriber or customer creation no longer occur.
* A merchant can now successfully create a new user and displays the appropriate welcome message. Previously, Magento threw an error during the creation of a customer or subscriber, although the new user/subscriber was created.
EAV
* Magento now displays the fixed product tax attribute label as expected according to the specified store view.
* Magento now correctly renders multiselect product attributes with a custom source model in `adminhtml`. Previously, the selected value was saved the first time in the `catalog_product_entity_varchar` table, and the attribute was added to the `eav_attribute` table, but the selected options were not highlighted against the attribute.
Frameworks
* `@api` annotation has been added to the `magento/framework` component of the Filter Group and Sort Order classes. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [16845](magento/magento2#16845.
* `app/code/Magento/Theme/etc/di.xml` now uses `Translate` instead of `TranslateInterface`. *Fix submitted by [Wouter Samaey](https://github.com/woutersamaey) in pull request [17124](magento/magento2#17124.
* Classes with methods that contain variadic arguments can be also used in proxy classes. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [16080](magento/magento2#16080.
* The annotation in `_toOptionArray - lib\internal\Magento\Framework\Data\SearchResultProcessor.php` has been corrected. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [15892](magento/magento2#15892.
* Scheduled XML sitemap generation now works as expected. Previously, you could schedule sitemap generation (**Admin** > **Store** > **Configuration** > **Catalog** > **XML sitemap**), but Magento would not generate the sitemap. *Fix submitted by [James Halsall](https://github.com/jameshalsall) in pull request [14822](magento/magento2#14822. [GitHub-5768](magento/magento2#5768)
* In multi-site deployments, a customer requesting a password reset on a non-default store should receive the password reset email from the non-default, not the primary, store. Previously, this password reset email was sent from the default store. *Fix submitted by [Rodrigo Mourão](https://github.com/rodrigowebjump) in pull request [14800](magento/magento2#14800. [GitHub-5726](magento/magento2#5726)
* The `trigger_recollect` quote attribute no longer causes a time out. *Fix submitted by [Philipp Sander](https://github.com/philippsander) in pull request [14719](magento/magento2#14719. [GitHub-9580](magento/magento2#9580)
* `Framework\Math\Random` now uses PHP 7.x features, including `random_bytes` and `random_int`.
* The `catalog:image:resize` command execution time has been reduced by up to 90% in the release. However, this improvement necessitates these additional steps after upgrading your Magento instance to 2.2.6:
* Remove `pub/media/catalog/product/cache`. (Removing this folder frees up space.)
* Run `bin/magento catalog:image:resize` to generate a new image cache. (This step is necessary because we’ve changed the path to cached images and must remove the previously cached images.)
* We've fixed a display error that occurred when both a Critical Admin Notification and Release Notification window were opened.
* Changes that were made to file permissions for `lib/internal/Magento/Framework/View/Asset/Merged.php` and its associated test that were made in an earlier release have been reverted. *Fix submitted by [Ihor Sviziev](https://github.com/ihor-sviziev) in pull request [16937](magento/magento2#16937.
* The constructor in `Magento\Webapi\Model\Soap\Fault.php` now assigns `$exception->getOriginator()` to `_soapFaultCode` instead of to the dynamical property `_soapCode`. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15515](magento/magento2#15515.
* Corrected annotation in `_toOptionArray` in `lib/internal/Magento/Framework/Data/Collection/AbstractDb.php`. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15336](magento/magento2#15336.
* The invoice table now displays the correct shipping and handling for a partial items invoice. *Fix submitted by [Ankur Raiyani](https://github.com/ankurvr) in pull request [14795](magento/magento2#14795.
* The return values from the `usort` and `value_compare_func` function now matches the PHP documentation for these functions. *Fix submitted by [luke-denton-aligent](https://github.com/luke-denton-aligent) in pull request [14726](magento/magento2#14726.
* MySQL adapter can now reconnect successfully when using a nonstandard port. Previously, Magento threw this error, `Port must be configured within host parameter`. *Fix submitted by [Julien ANQUETIL](https://github.com/julienanquetil) in pull request [14753](magento/magento2#14753.
Application framework
* You can now manually add a parameter to `app/etc/env.php: user_admin_email`. When an administrator is created, Magento sends an email to default store's email and, if present, to the email address defined in `user_admin_email`.
* Magento now removes unneeded PDF files after generation. Previously, Magento saved a copy of every generated invoice PDF in `/var`. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16401](magento/magento2#16401. [GitHub-3535](magento/magento2#3535), [GitHub-14517](magento/magento2#14517)
* Logs now indicate when Magento is in maintenance mode, which will help the debugging process. *Fix submitted by [Ethan Yehuda](https://github.com/Ethan3600) in pull request [16840](magento/magento2#16840.
JavaScript framework
* `lib/web/mage/dropdowns.js` no longer fails when autoclose is set to **true**. *Fix submitted by [Brian LaBelle](https://github.com/brian-labelle) in pull request [15499](magento/magento2#15499. [GitHub-15469](magento/magento2#15469)
* You can now view an entire zoomed product image in Fotorama fullscreen from the FireFox browser. Previously, the image jumps and the user cannot view all portions of the image. [GitHub-7978](magento/magento2#7978)
Web API framework
* The `array_push `function has been added to the list of forbidden functions. *Fix submitted by [Leandro F. L.](https://github.com/lfluvisotto) in pull request [16144](magento/magento2#16144.
* A generated admin API token no longer expires immediately. Previously, when you created a token for an Admin user and have set **Admin Token Lifetime (hours))** to empty, Magento denied access because the token immediately expired. *Fix submitted by [Maikel Martens](https://github.com/krukas) in pull request [15598](magento/magento2#15598. [GitHub-15564](magento/magento2#15564)
* The `GET /V1/returns?searchCriteria` endpoint retrieves `tracks` arrays as expected.
* The `GET /V1/returns/:id` endpoint retrieves `tracks` arrays as expected.
* `catalogProductAttributeRepository` now returns the `frontend_labels` value as expected.
Cache framework
* Magento no longer throws an exception when deploying static content on a deployment where Redis is used for cache management. See "Redis and static-content deployment" in [Redis troubleshooting](https://devdocs.magento.com/guides/v2.2/cloud/trouble/redis-troubleshooting.html) for more information. [GitHub-9287](magento/magento2#9287)
* When a layout is loaded from the cache, Magento now repopulates the list of applied layout handles to prevent any chance of a layout handle being reapplied later. *Fix submitted by [Scott Buchanan](https://github.com/scottsb) in pull request [12314](magento/magento2#12314.
Dashboard
* The dashboard now displays the correct order amount on orders when deploying Magento on multiple storefronts with different currencies. *Fix submitted by [Ankur Raiyani](https://github.com/ankurvr) in pull request [15661](magento/magento2#15661. [GitHub-15660](magento/magento2#15660)
* Magento now uses the correct amounts when creating a credit memo for an order that was placed using store credit, a gift card, or reward points.
* Magento no longer sends duplicate delete requests as a result of an unstable Internet connection. Previously, unintentional mass deletion of products sometimes occurred as a result of an unstable Internet connection.
* You can now successfully save a product video for one store view in deployments that have several store views. Previously, when you saved a product video for one store view, Magento saved it for all store views, although customers could play the video on the original store only.
* Customer data is now fully loaded after restarting the browser during an unexpired user session. Previously, the `section_data_ids` section of the session cookie was not properly completed. [GitHub-14912](magento/magento2#14912)
* We've fixed an issue with unoptimized SQL queries in customer segments. Previously, the customer segment was not saved, and MySQL crashed.
* When a customer creates a product review, the link to the product from the review in the customer's **My Account** > **My Product Review** is now SEO friendly.
* The My Invitations page now accurately displays the reward points amount in numbers. Previously, this page displayed the special character `%` instead of numbers.
* The Enterprise Reward refund logic no longer permits administrators to grant double refunds.
* We moved the `isAllowed` method from `AccessChangeQuoteControl` to a separate service to optimize the logic that supports using recurrent payments in combination with pre-ordered products. *Fix submitted by [Jeroen Van Leusden](https://github.com/JeroenVanLeusden) in pull request [12566](magento/magento2#12566.
* The attribute checking logic has been optimized by reducing redundant checks. *Fix submitted by [Freek Vandeursen](https://github.com/FreekVandeursen) in pull request [11554](magento/magento2#11554.
* Magento no longer validates customer address attribute value length when the minimum/maximum length fields are not displayed on the Admin.
* The dropdown menu is now positioned as expected under the link on the UI Component listing. *Fix submitted by [Ankur Raiyani](https://github.com/ankurvr) in pull request [15661](magento/magento2#15661. [GitHub-15660](magento/magento2#15660)
* The timestamp field now includes indexes, which reduces the chances of deadlocks that can occur while erasing old records. *Fix submitted by [Carlos Lizaga](https://github.com/KarlDeux) in pull request [13328](magento/magento2#13328. [GitHub-10346](magento/magento2#10346)
* `setCateroryIds([])` has been corrected to `setCategoryIds([])` throughout the test suites. *Fix submitted by [Neeta Kangiya](https://github.com/neeta-wagento) in pull request [15621](magento/magento2#15621. [GitHub-15590](magento/magento2#15590)
* Menus with nested elements now align correctly. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15645](magento/magento2#15645. [GitHub-7897](magento/magento2#7897)
* An administrator can now successfully download a PDF or export data immediately after log in. Previously, an administrator could not download a PDF or export data successfully after log in, but was redirected to the Admin dashboard. *Fix submitted by [Riccardo Tempesta ](https://github.com/phoenix128) in pull request [15539](magento/magento2#15539. [GitHub-15510](magento/magento2#15510)
* Merchants can now apply styling by changing LESS variables in the Luma theme as expected. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15734](magento/magento2#15734. [GitHub-15608](magento/magento2#15608)
* Added a service configuration setting—Send Adminhtml and Frontend as Separate Apps—to collect and send separate data for frontend and adminhtml applications for New Relic reporting. See [New Relic Reporting]( https://docs.magento.com/m2/ce/user_guide/reports/new-relic-reporting.html?Highlight=New%20Relic%20service). *Fix submitted by [Max Chadwick](https://github.com/mpchadwick) in pull request [12935](magento/magento2#12935.
* Table alias prefixes in field mappings for customer group filter and sorting processors that were previously missing have been restored. Previous to this restoration, Magento threw this error when a merchant opened **Admin** > **Customers** > **All Customers**: `SQL Error: ambiguous column 'customer_group_id' in 'All customers' page in admin when extension attribute table is joined`. *Fix submitted by [Maksim Gopey](https://github.com/Radio) in pull request [15826](magento/magento2#15826.
* `.limiter` now has the same parent selectors as `.pages`, which prevents clashes between styles and layouts. Previously, `.limiter` float was too generic. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [15878](magento/magento2#15878.
* The default `FormElementDependenceController` configuration is now extended by custom configuration rather than overridden. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [16001](magento/magento2#16001.
* `inline-block` issues with space and font-size in the Name form have been resolved. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [16048](magento/magento2#16048.
* Alignment and layout issues on home and category pages of the Hot Seller section have been resolved. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [15893](magento/magento2#15893. [GitHub-15213](magento/magento2#15213)
* Updated old font formats of the default fonts (`woff` and `woff2`). *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [15870](magento/magento2#15870. [GitHub-15213](magento/magento2#15213)
* We've corrected the return type of methods and typos in `CategoriesJson.php`, `Engine.php`, `UrlRewrite.php`, and `ObserverConfig.php`. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15993](magento/magento2#15993.
* `@escapeNotVerified` annotations were replaced in `name.phtml` and `qty.phtml`. *Fix submitted by [Riccardo Tempesta](https://github.com/phoenix128) in pull request [15532](magento/magento2#15532. [GitHub-15501](magento/magento2#15501)
* We've removed redundant function calls in `app/code/Magento/CurrencySymbol/view/adminhtml/templates/grid.phtml`. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15346](magento/magento2#15346. [GitHub-15355](magento/magento2#15355)
* `magnifier.js` now works no matter which mode is set. (`magnifier.js` offers the option of setting mode to 'inside' for an in-frame zoom.) *Fix submitted by [Kacper Chara](https://github.com/kacperchara) in pull request [15382](magento/magento2#15382. [GitHub-4977](magento/magento2#4977)
* The Change Password warning message no longer appears twice. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15774](magento/magento2#15774. [GitHub-14895](magento/magento2#14895)
* You can now add the `NOINDEX,NOFOLLOW` meta tag to the admin scope to instruct Google and other friendly bots to refrain from adding the Admin URL to search results. *Fix submitted by [Itay Raz](https://github.com/itaymesh) in pull request [17163](magento/magento2#17163.
* The Create Account and Password Forget forms now include the required notice for relevant fields. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [16965](magento/magento2#16965.
* Reworked the `addError`, `addSuccess` methods in several files. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [16921](magento/magento2#16921.
* Minor improvements to `app/code/Magento/CatalogRule/Model/Rule/Job.php` and `app/code/Magento/GroupedProduct/Model/Product/Initialization/Helper/ProductLinks/Plugin/Grouped.php`. *Fix submitted by [Vladymyr Hrivinskyi](https://github.com/hryvinskyi) in pull request [16900](magento/magento2#16900.
* Refactored `app/code/Magento/User/Controller/Adminhtml/` by removing the direct use of ObjectManager and included the dependencies using constructor dependency injection. *Fix submitted by [AnshuMishra17](https://github.com/AnshuMishra17) in pull request [16560](magento/magento2#16560.
* `gallery.less` no longer imports `_responsive.less`. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16579](magento/magento2#16579.
* Added missing `width` property for the confirmation modal in `lib/web/css/source/components/_modals.less`. *Fix submitted by [Vladymyr Hrivinskyi](https://github.com/hryvinskyi) in pull request [16861](magento/magento2#16861.
* Removed the redundant `font-size` attribute from the toolbar pager in `lib/web/css/source/lib/_utilities.less`. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16716](magento/magento2#16716.
* Updated the "Reporting security issues" section of `README.md` to recommend that users create a bugcrowd account. *Fix submitted by [Tommy Quissens](https://github.com/quisse) in pull request [16685](magento/magento2#16685.
* The currency format that was previously broken for some locales now works as expected. Previously, broken currency formats resulted in an incorrect price amount on the product page. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15909](magento/magento2#15909. [GitHub-11717](magento/magento2#11717)
* Changed the **My Dashboard** string to **My Account** in multiple files. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [16009](magento/magento2#16009.
* Corrected the annotation to the `formatDateTime` function in `lib/internal/Magento/Framework/Stdlib/DateTime/TimezoneInterface.php` file. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15602](magento/magento2#15602.
* The `clickableOverlay` option now works as expected. *Fix submitted by [virtua-pmakowski](https://github.com/virtua-pmakowski) in pull request [15172](magento/magento2#15172. [GitHub-7399](magento/magento2#7399)
* The Instant Purchase module now works as expected. Previously, the `get($type)` method in `/Magento/InstantPurchase/Model/ShippingMethodChoose/DeferredShippingMethodChooserPool.php` threw an exception without showing the shipping method $type as it was hardcoded as 'chooser'. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15258](magento/magento2#15258.
* Template files now follow Magento standard coding format. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15398](magento/magento2#15398.
* Corrected `viewModel` to `view_model` where needed in `\Magento\Backend\Block\Template`. *Fix submitted by [Abhishek Jakhotiya](https://github.com/Jakhotiya) in pull request [15067](magento/magento2#15067.
* Non-well-formed numeric values that were encountered in `app/code/Magento/Directory/Model/Currency.php` have been resolved. *Fix submitted by [Mateusz Lerczak](https://github.com/bmxmale) in pull request [14833](magento/magento2#14833.
* The `README` file for the `magento2` repository now has Maintainers and Contributors sections. *Fix submitted by [Stanislav Idolov](https://github.com/sidolov) in pull request [14790](magento/magento2#14790.
* The documentation for `AdapterInterface::update` has been improved. *Fix submitted by [Navarr Barnier](https://github.com/navarr) in pull request [14769](magento/magento2#14769.
* The product video feature is now GDPR-compliant.
Gift cards
* Magento now displays the **Credit Memo** link at the top of the page for orders with a total of 0 (zero). Previously, this link was missing, which prevented users from creating a credit memo for the order.
* You can now save gift cards without the price being changed on the Admin to an unacceptable format. Previously, Magento tried to save amounts in unacceptable formats (such as the inclusion of a comma in a four-digit price), which triggered an error.
* Magento no longer permits users to save a new gift card without first completing the required values. Previously, when creating a gift card, users could save the card without having designated an amount, but the card could not be purchased. Magento also created a `report.CRITICAL: Warning` error message in the `system.log`.
* Orders now retain gift message information on both item and order level. Previously, gift messages disappeared from an order when a customer logged into his account during checkout.
* Magento now maintains relationships between new gift card accounts when a customer purchases several gift cards in the same order.
* Magento now refunds only the exact amount used on a gift card if only the part of the gift card was used. Previously, when a customer used a gift card account code to partially pay for an order, and Magento subsequently created a credit memo for a portion of the order, the full amount of the gift card was refunded.
* Magento now generates the same number of gift card codes when the full order is invoiced as the customer selected when creating an order. Previously, for orders that included both physical products and multiple gift cards, the number of gift card codes generated on an order corresponded to the quantity of the previous physical line items that the user had added to the cart before adding gift cards.
Gift message
* Orders now retain gift message information on both item and order level. Previously, gift messages disappeared from an order when a customer logged into his account during checkout.
* The `addToCart` event triggers on the Google Task Manager console only when an item is added to the cart. Previously, the event was triggered before the cart was updated.
* Google Analytics events are now triggered as expected. Specifically, the `addToCart` and `removeFromCart` events are not triggered until after a customer adds a product to the mini cart.
* Magento now accurately updates the mini cart when a customer removes a product while accessing a storefront using Internet Explorer 11.x. Previously, when a customer removed a product from the mini cart, Magento did not remove the product but instead threw this error, `(SCRIPT438: Object doesn't support property or method 'find'. File: sidebar.js, Line: 237, Column: 13 )`.
* Google Tag Manager product category data is now fully reported. Previously, the Google Tag Manager product category (Enhanced Ecommerce) data did not report all information.
HTML
* Responsive table headers now work as expected. Previously, when no heading was present in the `data-th` attribute on a column for a responsive table in Magento, only a colon was present. *Fix submitted by [Sean Templeton](https://github.com/LordZardeck) in pull request [16517](magento/magento2#16517.
* Corrected HTML syntax in the `report.phtml` error template. *Fix submitted by [abcpremium](https://github.com/abcpremium) in pull request [15454](magento/magento2#15454.
* Magento now sends email when the status of a Return Merchandise Authorization (RMA) changes to Return Received, Approved, or Rejected. Previously, no email was sent to the customer who created the order.
* Return Merchandise Authorization (RMA) calls now return order items and comments as expected.
* The RMA status label now shows on the email that Magento sends to customers when the status of an RMA changes.
* Magento now deselects only the attributes you choose to deselect when you set the **Use Default Value** setting on a store view to **no** for certain attributes. Previously, when you deselected the **Use Default Value** setting on a store view for certain attributes, Magento unselected other attributes as well.
* Magento now deploys the translations in `js-translation.json` file when deploying static content. *Fix submitted by [Sergey Dmitruk](https://github.com/SergeyDmitruk) in pull request [4814](magento/magento2#4814.
* Magento now updates the `Enable Qty Increments` field as expected during product import. *Fix submitted by [Alexander Lukyanov](https://github.com/sashas777) in pull request [15144](magento/magento2#15144. [GitHub-11354](magento/magento2#11354)
* We've expanded the HTTP request class by adding the `isPostRequest` method. *Fix submitted by [Pavel Usachev](https://github.com/pusachev) in pull request [12626](magento/magento2#12626.
* You can now change only the primary button `font-weight` without changing regular button `font-weight` with LESS variables. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16012](magento/magento2#16012. [GitHub-15832](magento/magento2#15832)
* We've added missing properties to the `Magento/Widget` component and removed a reference to a non-existent class in the associated tests. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15647](magento/magento2#15647.
* We've improved the readability of `app/code/Magento/Backend/Block/Widget/Form/Element/Dependence.php`. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [16010](magento/magento2#16010.
* Template syntax errors in `app/code/Magento/Theme/Block/Html/Breadcrumbs.php` have been corrected. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [15339](magento/magento2#15339. [GitHub-15345](magento/magento2#15345)
* The calendar widget (`jQuery UI DatePicker`) now correctly displays more than one month. *Fix submitted by [Burlacu Vasilii](https://github.com/vasilii-b) in pull request [16279](magento/magento2#16279. [GitHub-7379](magento/magento2#7379)
* An error with the template notation for `Magento_CatalogWidget` module has been fixed. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16530](magento/magento2#16530. [GitHub-16529](magento/magento2#16529)
* You can now use the `addTabAfter` method to add two or more tabs to the Admin (for example, the Order View page) in the expected order. Previously, Magento did not preserve the correct sort order for the new tabs. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [16175](magento/magento2#16175. [GitHub-16174](magento/magento2#16174)
* The headers of the User Agent Rules table now align as expected with the content of the table's rows. *Fix submitted by [Justin](https://github.com/JRhyne) in pull request [16704](magento/magento2#16704. [GitHub-16703](magento/magento2#16703)
* We've added `@navigation-level0-item__hover__color` missing variable for mobile and tablet view. *Fix submitted by [Hitesh](https://github.com/hitesh-wagento) in pull request [16732](magento/magento2#16732. [GitHub-15848](magento/magento2#15848)
* Store view home pages in multistore deployments no longer display breadcrumbs. Previously, the first store view in a multistore deployment looked fine, but the other store views included unnecessary breadcrumbs on the home page. *Fix submitted by [Oleksandr Kravchuk](https://github.com/swnsma) in pull request [16732](magento/magento2#16732. [GitHub-6504](magento/magento2#6504)
* HTML minification now works as expected. *Fix submitted by [Ronak Patel](https://github.com/ronak2ram) in pull request [16916](magento/magento2#16916. [GitHub-5316](magento/magento2#5316)
* The type of the `transport` event parameter has been changed to `DataObject`. This change reverts a change from type `DataObject` to `Array()` made in a previous release. *Fix submitted by [gwharton](https://github.com/gwharton) in pull request [16599](magento/magento2#16599. [GitHub-10210](magento/magento2#10210)
* Transport variable can now be altered in the `email_invoice_set_template_vars_before` event. *Fix submitted by [gwharton](https://github.com/gwharton) in pull request [15040](magento/magento2#15040. [GitHub-10210](magento/magento2#10210)
* Replaced deprecated methods in the `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Delete.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Edit.php`, `app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php`, and `app/code/Magento/CatalogRule/Plugin/Indexer/Product/Attribute.php`. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [17227](magento/magento2#17227.
* Replaced deprecated methods in 44 files. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [17035](magento/magento2#17035.
* The `template.js` has been updated to make the `jquery` variable consistently use `$`. Previously, JavaScript in the `template.js` sometimes used `jquery` and sometimes `$`, and Magento threw an error when running in Internet Explorer. *Fix submitted by [Angelo Maragna](https://github.com/angelomaragna) in pull request [17129](magento/magento2#17129.
* Corrected an undefined class property in the `app/code/Magento/Backend/Block/Media/Uploader.php getConfigJson()` method. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [17099](magento/magento2#17099.
* Corrected sticky footer in `page-main` container height on mobile devices. *Fix submitted by [Denis Belevtsov](https://github.com/denistrator) in pull request [17006](magento/magento2#17006. [GitHub-15118](magento/magento2#15118)
* Corrected the return type of methods in `app/code/Magento/Catalog/Controller/Category/View.php`, `app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/DataProvider.php`, and `app/code/Magento/CatalogSearch/Model/ResourceModel/EngineInterface.php`. *Fix submitted by [Pratik Oza](https://github.com/mage2pratik) in pull request [16988](magento/magento2#16988.
* Style groups for mobile devices (`max-width`) are now specified in the correct order. *Fix submitted by [Tejash Kumbhare](https://github.com/tejash-wagento) in pull request [16959](magento/magento2#16959. [GitHub-14476](magento/magento2#14476)
* Corrected the namespace that is defined in `compare.phtml`. *Fix submitted by [Ronak Patel](https://github.com/mage2pratik) in pull request [16978](magento/magento2#16978.
* Edited verbose code in `app/code/Magento/Customer/Controller/Account/LoginPost.php`. *Fix submitted by [Glenn Cheng](https://github.com/GlennCheng) in pull request [16928](magento/magento2#16928.
* Fixed annotations in the following methods: `lib/internal/Magento/Framework/Acl/AclResource/Config/Converter/Dom.php`, `lib/internal/Magento/Framework/Acl/AclResource/Config/SchemaLocator.php`, and `lib/internal/Magento/Framework/Acl/Loader/ResourceLoader.php`. *Fix submitted by [Tiago Sampaio](https://github.com/tiagosampaio) in pull request [16899](magento/magento2#16899.
* Removed or edited code comments in the following files:
* Improved product gallery block helper code (`app/code//Catalog/Block/Adminhtml/Product/Helper/Form/Gallery.php`). *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [16889](magento/magento2#16889.
* Removed duplicated string from `app/code/Magento/ProductVideo/i18n/en_US.csv`. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [16882](magento/magento2#16882.
* Refactored code in `dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php` so that an undefined index warning is no longer triggered when using uppercase reserved word *Fix submitted by [Freek Vandeursen](https://github.com/FreekVandeursen) in pull request [16785](magento/magento2#16785.
* Regex in `ControllerAclTest::getControllerPath()` has been changed to avoid classes that are under a namespace with a controller component (such as controller plugins) being interpreted as controllers. *Fix submitted by [Freek Vandeursen](https://github.com/aleron75) in pull request [16707](magento/magento2#16707.
* Knockout template files now include a `title` attribute in the `img` tag. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16691](magento/magento2#16691.
* Added `title` attribute to links as needed for compatibility with w3c standards to these files: `app/code/Magento/Backend/view/adminhtml/templates/page/header.phtml`, `app/code/Magento/Backend/view/adminhtml/templates/widget/form/element/gallery.phtml`, `app/code/Magento/Theme/view/frontend/templates/html/bugreport.phtml`, `app/code/Magento/Theme/view/frontend/templates/html/header/logo.phtml`, and `app/code/Magento/Ui/view/base/web/templates/block-loader.html`. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16689](magento/magento2#16689.
* Search icons are now defined by header icon variables. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16559](magento/magento2#16559.
* Module namespace is now defined before template path name. Previously, when we overrode any core block to any custom module, Magento threw an error because trying to find the template file in the custom module if the module namespace is not defined before the template path. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [16576](magento/magento2#16576.
* Corrected the comment for the `Magento_Setup` module `includeClasses` function. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16549](magento/magento2#16549.
* The `module:status` command now clearly provides an easily parsed listing of all enabled and disabled modules. *Fix submitted by [Jisse Reitsma](https://github.com/jissereitsma) in pull request [15543](magento/magento2#15543.
* Fixed the `false` value for the `cache_lifetime` argument in `Magento/Swatches/view/frontend/layout/checkout_cart_configure_type_configurable.xml`. *Fix submitted by [yuriyDne](https://github.com/yuriyDne) in pull request [16086](magento/magento2#16086.
* CSRF tokens are now considered sensitive strings. *Fix submitted by [Robert](https://github.com/p0pr0ck5) in pull request [13509](magento/magento2#13509.
* Refactored JavaScript code in `popup.phtml` and `popup.js`. *Fix submitted by [IvanPletnyov](https://github.com/IvanPletnyov) in pull request [16216](magento/magento2#16216.
* Removed extraneous cursor property. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [15305](magento/magento2#15305.
* `app/code/Magento/Marketplace/view/adminhtml/templates/partners.phtml` now uses the stored value of the `getPartners` method instead of calling same method again. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15517](magento/magento2#15517.
* Added missing lowercase conversion on grouped product assignation. *Fix submitted by [Juan Alonso](https://github.com/jalogut) in pull request [15312](magento/magento2#15312.
* Removed code responsible for multiple add-to-cart initializations when Magento loads the product listing. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [15409](magento/magento2#15409.
* Refactored JavaScript code from `popup.phtml` to meet Magento coding standards. *Fix submitted by [Rahul Kachhadiya](https://github.com/rahul-kachhadiya) in pull request [15341](magento/magento2#15341.
* Removed redundant PHPdoc comment and deprecated private method `getSerializer` in `\Magento\Customer\Model\Customer\NotificationStorage` class. *Fix submitted by [adrian-martinez-interactiv4](https://github.com/adrian-martinez-interactiv4) in pull request [15262](magento/magento2#15262.
* CSS code is now automatically updated in the browser. Previously, users had to press **CTRL+F5** to see CSS changes. *Fix submitted by [Alexander Lukyanov](https://github.com/sashas777) in pull request [15144](magento/magento2#15144. [GitHub-11354](magento/magento2#11354)
* Concrete type hints for product and category resources have been added to `app/code/Magento/Catalog/Model/Category.php` and `app/code/Magento/Catalog/Model/Product.php` to help with static analysis and IDE autocompletion. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [15136](magento/magento2#15136.
* Replaced `rand` with `rand_int` in several modules. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [15017](magento/magento2#15017.
* Optimized `if-condition` in `/Magento/Catalog/Controller/Adminhtml/Product/Initialization/Helper/AttributeFilter.php`. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [15002](magento/magento2#15002.
* We've upgraded to Node.js 8 from Node.js 6. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [15018](magento/magento2#15018.
* Replaced `template/path` with `Module_Name::template/path` in the block class to ensure extensibility of the class. Previously, if the source block classes referenced a template without specifying the module name, then block render failed with this error: `Invalid template file`. *Fix submitted by [Abhishek Jakhotiya](https://github.com/Jakhotiya) in pull request [14946](magento/magento2#14946.
* Replaced the `\Magento\Backend\Helper\Data` parameter with `\Magento\Backend\Model\UrlInterface` to make them identical with the constructor. *Fix submitted by [Abhishek Jakhotiya](https://github.com/Jakhotiya) in pull request [14946](magento/magento2#14946.
* The return type of `addToCartPostParams` in `app/code/Magento/Catalog/Block/Product/ListProduct.php` has been changed to array. *Fix submitted by [Sean Templeton](https://github.com/LordZardeck) in pull request [14946](magento/magento2#14946.
* Datepicker now correctly converts date formats in locales other than `en-US`. *Fix submitted by [Tao Sasaki](https://github.com/tao-s) in pull request [14627](magento/magento2#14627.
* `default_head_blocks.xml` now contains the `order` attribute for setting the load order of stylesheets. *Fix submitted by [Tao Sasaki](https://github.com/tao-s) in pull request [14290](magento/magento2#14290.
* Magento now displays validation messages on the advanced search form as expected if you submit the advanced search form without entries. [GitHub-8131](magento/magento2#8131)
* `\Magento\Framework\Reflection\TypeProcessor` methods have been simplified.
* Magento no longer unsets the taxed shipping total information before returning the total tax.
* Guest users can now sign up for newsletters for multiple stores. Previously, when a guest user signed up for a newsletter from multiple stores, Magento sent a subscription confirmation message, but did not successfully subscribe the user.
* Magento now correctly updates newsletter subscriptions when the customer is registered on two stores. Previously, when the customer tried to subscribe to the newsletter from a second store, Magento displayed this message, `You are (not) subscribed to "General Subscription"`.
* The newsletter subscription confirmation message does not display after a customer clicks the link that is included in the confirmation email. *Fix submitted by [Kaushik Chavda](https://github.com/KaushikChavda) in pull request [15247](magento/magento2#15247. [GitHub-14747](magento/magento2#14747)
* Magento now sends a confirmation request email to the customer when she unsubscribes to a newsletter. *Fix submitted by [Lyzun Oleksandr](https://github.com/nuzil) in pull request [15464](magento/magento2#15464. [GitHub-15218](magento/magento2#15218)
* Removed the direct use of the object manager and loaded the dependency via constructor dependency injection in `app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassDelete.php` and `app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassUnsubscribe.php`. *Fix submitted by [AnshuMishra17](https://github.com/AnshuMishra17) in pull request [16851](magento/magento2#16851.
* Newsletter registration now works the same when registered customers subscribe from My Account and or from the newsletter block. *Fix submitted by [Lyzun Oleksandr](https://github.com/nuzil) in pull request [15479](magento/magento2#15479.
* Removed the redundant return statement from `getJsTemplateName` function comment in the `Magento_Newsletter`'s block file. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16645](magento/magento2#16645.
Payment methods
Braintree
* You can now cancel an order that was placed with Braintree when the Braintree authorization had expired.
* All invoices now have the merchant account ID set in the store configuration for the Braintree payment method. Previously, the default merchant account ID was sent to Braintree for any subsequent partial order invoices after the initial invoice is generated.
* Braintree configuration (`app/code/Magento/Braintree/etc/adminhtml/system.xml`) now contains `showInStore` attributes. *Fix submitted by [Andreas Schrammel](https://github.com/aschrammel) in pull request [16458](magento/magento2#16458.
* Magento now retains the correct address information when a customer using Braintree's **Pay with PayPal** button to complete an order navigates back to the shipping step and changes the shipping address fields. *Fix submitted by [Vova Yatsyuk](https://github.com/vovayatsyuk) in pull request [15133](magento/magento2#15133.
PayPal
* Customers can now continue creating an order after a PayFlow Pro payment has been declined. Previously, under these circumstances. the customer could not continue his purchase.
* Paypal Onboarding has been configured to work for merchants from countries other than the United States.
* Magento now accurately displays the status of PayPal orders. Previously, the status of PayPal orders was displayed only as **Processing**.
* Magento no longer sends duplicate order confirmation emails when a customer uses PayPal Express to complete an order. *Fix submitted by [Rocket Web](https://github.com/rocketweb) in pull request [14820](magento/magento2#14820.
* Tax amount calculation for payments processed through PayPal now works as expected. Previously, Magento sent the wrong amount to PayPal when a discount was applied to an order.
* The `Allmethods config` source model now reports the full list of payment methods as expected. *Fix submitted by [Manuel Schmid](https://github.com/mash1t) in pull request [15032](magento/magento2#15032. [GitHub-13460](magento/magento2#13460)
* You can now cancel an order placed through Cybersource when the fraud filters are triggered.
* Magento now emails customer order confirmations for orders that are placed through Worldpay.
* Magento now correctly applies free shipping to an order after the customer applied the free shipping code during checkout.
* Magento no longer sends Admin orders to Signifyd for review when Signifyd is disabled on the website on which the administrator is logged in.
* Magento now successfully creates shipping labels for a return merchandise authorization (RMA) when using FedEx Smart Post as the shipping option. Previously, Magento threw an error under these circumstances.
* Magento now sends email about payment failures to customers. Previously, Magento did not send a customer email, but instead logged an error in `support.log`, and displayed this message on the storefront, **Transaction has been declined. Please try again later**.
* Magento no longer throws an error when multiple payment methods are enabled. Previously, when a merchant tried to enable more than one payment method from the Admin, Magento displayed this error in the console, `Found elements with non-unique id billing-address-form`. *Fix submitted by [Neeta Kangiya](https://github.com/neeta-wagento) in pull request [15349](magento/magento2#15349. [GitHub-15348](magento/magento2#15348)
* Magento now sends order confirmation emails as expected for orders purchased with WorldPay.
* A type error in the payment void method of the Authorizenet module has been fixed. *Fix submitted by [Oleh Kravets](https://github.com/xpoback) in pull request [16194](magento/magento2#16194. [GitHub-16184](magento/magento2#16184)
Pagecache
* Full-page cache now works as expected in multistore deployments. Previously, when you opened the URL of a non-default store in a multistore deployment, full-page cache did not return the URL.
Performance
* The catalog rule re-indexing operation has been optimized, and average re-indexing time (which depends on rule conditions) has improved by more than 80%. Previously, a full catalog rule re-index operation on a medium B2C store took more than 20 minutes.
* Merchants can now improve store performance by disabling Magento Report functionality if business function does not require this capability. A new configuration setting (**System Configuration**: **General** > **Reports** > **General Options**) allows merchants to disable Magento Reports, which is recommended practice if a merchant's business function does not require this capability.
* You can change store locale without the exporting and importing configuration process. While Magento is in Production and the `SCD_ON_DEMAND` is enabled, the Magento store and admin locale options are available. See [Change locales](https://devdocs.magento.com/guides/v2.2/cloud/live/sens-data-over.html#change-locales).
* The time required to load category or product pages for products that are configured with many attributes (more than 500) has been significantly reduced. Refactoring the logic for product attribute retrieval has resulted in a reduction of load time of almost 90% for certain scenarios.
* The time required to load a store’s home page has been reduced noticeably when the top menu contains many categories. (Load time is still affected by the number of categories and the structure of the top menu.)
* The speed of catalog price rule save operations has been improved by these changes:
* elimination of unnecessary reindexing
* improvement to the way that the `getMatchingProductIds` function fetches products, which has eliminated unnecessary checks of the data set. *Fix submitted by [Andrey Zabara](https://github.com/chrom) in pull request [14707](https://github.com/magento/magento2/pull/14707)*.
* The ID to SKU lookup process for tier prices has been optimized. Previously, with a large number of tier or group prices, each tier would separately make a database query to look up the associated SKU. *Fix submitted by [Todd Christensen](https://github.com/toddbc) in pull request [14699](magento/magento2#14699.
Product video
* Magento now populates the YouTube video URL and Title fields with the same values as are populated on the default store view on multisite deployments. (These fields are global scope attributes and should be the same on all storefronts.) Previously, Magento left these fields blank in multisite deployments.
Quote
* Magento now displays the correct product price for an order created from the Admin in multisite deployments. Previously, when an order was created from the Admin in a multisite deployment where products were assigned different prices per store view, Magento defaulted to the product price of the primary storeview if the order was edited or updated. *Fix submitted by [Riccardo Tempesta](https://github.com/phoenix128) in pull request [14904](magento/magento2#14904. [GitHub-14869](magento/magento2#14869)
* Magento now successfully saves the value of `REMOTE_IP` when a customer uses an IPV6 (Internet Protocol version 6) address. Previously, this value was only partially saved in the `sales_order` and `quote` tables. *Fix submitted by [George Schiopu](https://github.com/georgeschiopu) in pull request [14976](magento/magento2#14976. [GitHub-10395](magento/magento2#10395)
* Coupon codes now work for guest users through the web API as well as from the storefront. *Fix submitted by [Marcin Dykas](https://github.com/Hypo386) in pull request [15320](magento/magento2#15320. [GitHub-14056](magento/magento2#14056)
* Magento no longer runs an SQL query on every item in the database when a quote is empty, which has improved the performance of the checkout process. *Fix submitted by [Sean Templeton](https://github.com/LordZardeck) in pull request [16675](magento/magento2#16675.
* Removed the unused class declaration from controller's index action and the unused code in the comment block from the template file in `app/code/Magento/Review/view/frontend/templates/redirect.phtml` and `app/code/Magento/Version/Controller/Index/Index.php`. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [15173](magento/magento2#15173.
Rule
* A cart rule that uses a `subselection` condition now works as executed. Previously, cart rules with this condition automatically granted a discount.
* The retrieval of first array elements in the following files has been improved: `app/code/Magento/Rule/Model/Action/AbstractAction.php` and `app/code/Magento/Rule/Model/Condition/Combine.php`. *Fix submitted by [Thomas Klein](https://github.com/thomas-blackbird) in pull request [16053](magento/magento2#16053. [GitHub-15940](magento/magento2#15940)
* The condition category chooser now handles multiple nested categories as expected. Previously, if a cart rule contained several nested categories, no categories appeared on the page, the page became unresponsive, and eventually crashed. *Fix submitted by [Keith Bentrup](https://github.com/keithbentrup) in pull request [15265](magento/magento2#15265. [GitHub-15121](magento/magento2#15121)
Sales
* Order status now remains in the Complete state after Magento refunds store credit on a partial credit memo. Previously, under these circumstances, Magento changed the status of the order to Closed.
* You can now create multiple credit memos in one session and save each successfully. Previously, Magento displayed this error when you tried to save a second credit memo after creating the first memo: `Could not save credit memo`.
* Magento now displays any errors that occur during order creation in the browser console. Previously, Magento displayed this message: `Uncaught ReferenceError: order is not defined during order creation` instead of a specific error message.
* The `POST /V1/shipment` endpoint processes `tracks` arrays as expected.
* Magento no longer reverts to the country associated with the default website when a customer edits the billing address for an order. Previously, if a customer edited the shipping address for an order, Magento would reset the billing address to the default address specified for the default website.
* Credit memo email template file incorrect object types have been corrected. Previously, when a merchant created a credit memo and checked the **Email** checkbox, Magento threw an error. *Fix submitted by [Joseph Maxwell](https://github.com/JosephMaxwell) in pull request [16438](magento/magento2#16438.
* Performance issues that resulted from disabling invoice emails have been resolved.
* The Invoices grid now reflects changes in invoice state as expected. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [16286](magento/magento2#16286.
* You can now set the `is_visible_on_front` parameter from the `addStatusHistoryComment` of the order mode. Previously, you could set the `is_visible_on_front` parameter from the Admin only. *Fix submitted by [Mark Shust](https://github.com/markoshust) in pull request [15637](magento/magento2#15637.
* Module name space is now declared before the template pathname in `Magento_Sales::order/info.phtml`. *Fix submitted by [Ronak Patel](https://github.com/markoshust) in pull request [16206](magento/magento2#16206.
* The `addFieldToFilter` has been added to `addressCollection` in `app/code/Magento/Sales/Setup/UpgradeData.php`, which optimizes the process of collecting addresses during upgrade. *Fix submitted by [Dmytro Cheshun](https://github.com/markoshust) in pull request [15615](magento/magento2#15615.
* Invoice prefixes now contain the correct store ID when Magento is deployed in a multistore environment. Previously, Magento always created the invoice number using the default store view ID. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15615](magento/magento2#15615. [GitHub-14063](magento/magento2#14063)
* The `GET /V1/orders/items/{id}` request now returns `parent_item`. *Fix submitted by [Sanjay Patel](https://github.com/sanjay-wagento) in pull request [15615](magento/magento2#15615.
Sales rules
* Cart price rules with associated coupons are no longer affected by edits to scheduled updates.
* The `discount` label in the `app/code/Magento/SalesRule/view/frontend/web/js/view/summary/discount.js` file is now compatible with custom module discount. *Fix submitted by [Rodrigo Santellan](https://github.com/rsantellan) in pull request [16093](magento/magento2#16093.
Search
* Magento no longer throws an error when a customer uses quick search to search on a term that does not exist in the search database. Previously, Magento returned this error, `TypeError: this._getFirstVisibleElement(...).addClass is not a function`. *Fix submitted by [Julien ANQUETIL](https://github.com/julienanquetil) in pull request [14839](magento/magento2#14839. [GitHub-14274](magento/magento2#14274)
* Customers can now use the **Enter** key to submit searches from a page header. Previously, when a customer used the **Enter** key to submit a search query, event handlers that were bound to the form submit (through jQuery) were fired twice. *Fix submitted by [Amjad M](https://github.com/amjadm61) in pull request [15340](magento/magento2#15340. [GitHub-13793](magento/magento2#13793)
* Swagger now handles `searchCriteria`-related requests as expected. *Fix submitted by [Jakub](https://github.com/idziakjakub) in pull request [15040](magento/magento2#15040. [GitHub-15322](magento/magento2#15322)
* The Admin panel search now filters catalogs as expected. Previously, if a merchant tried to narrow a search when using the Search tool in the Admin panel, Magento displayed the full catalog view without narrowing down the list. *Fix submitted by [Pavel](https://github.com/hannassy) in pull request [12735](magento/magento2#12735. [GitHub-7861](magento/magento2#7861)
* You can now use an asterix when searching on customer names. Previously, if you used an asterix in a search query, Magento displayed this message, `Something went wrong with processing the default view and we have restored the filter to its original state.` *Fix submitted by [Riccardo Tempesta ](https://github.com/phoenix128) in pull request [14905](magento/magento2#14905. [GitHub-14855](magento/magento2#14855)
* Magento now displays validation messages as needed on advanced searches. Previously, Magento did not display a message even after a customer submitted the advanced search form with no entries. *Fix submitted by [Ben Robie](https://github.com/brobie) in pull request [16952](magento/magento2#16952. [GitHub-8131](magento/magento2#8131)
* Server load has been reduced for advanced searching. Previously, when a customer entered text in the search suggestion box, Magento immediately sent every character to the server. The auto-complete box now delays sending the request. *Fix submitted by [Sean Templeton](https://github.com/LordZardeck) in pull request [16669](magento/magento2#16669.
* You can now successfully clone the minisearch widget. *Fix submitted by [Daniel Ruf](https://github.com/DanielRuf) in pull request [15485](magento/magento2#15485.
Shipping
* The shipping and estimated tax form now display country, city, and postcode fields as expected. *Fix submitted by [Alexander Kras'ko](https://github.com/0m3r) in pull request [16213](magento/magento2#16213. [GitHub-8222](magento/magento2#8222)
* A method with a misspelled name was deprecated and the new method with correct spelling added to `app/code/Magento/Multishipping/Block/Checkout/AbstractMultishipping.php`. *Fix submitted by [Anna Völkl](https://github.com/avoelkl) in pull request [15514](magento/magento2#15514.
Store
* Magento now adds the correct store code to product URLs in stores with more than one store view when **Stores** > **Configuration** > **General** > **Web** > **Add Store Code to Urls** is set to **yes**. *Fix submitted by [Elias Kotlyar](https://github.com/EliasKotlyar) in pull request [15566](magento/magento2#15566. [GitHub-15565](magento/magento2#15565)
* Magento now displays store views as expected when you select **Stores** > **Terms and Conditions**. *Fix submitted by [afirlejczyk](https://github.com/afirlejczyk) in pull request [14546](magento/magento2#14546. [GitHub-13944](magento/magento2#13944)
Elasticsearch
* Bundle products are now indexed as expected in Elasticsearch.
* Elasticsearch now correctly calculates the relevance of quick search results according to selected attribute search weights.
Admin global search
* Admin global search preview now works as expected. Previously, this feature worked inconsistently, and search results differed depending on which area was being searched (for example, Products, Categories, or Customers).
* The Admin global search now returns results that match the keyword for all available pages, or if a user searches in specific sections, the search feature now returns only the results that matched the key words in those specific sections. Previously, the Admin global search did not return results that matched the specified keywords and did not restrict results to specified sections.
* Catalogs are now correctly filtered by the Admin search bar. Previously, if you attempted to use the Search tool in the Admin, and selected "XX in Products", Magento displayed the full catalog view without narrowing down the list. *Fix submitted by [Pavel](https://github.com/hannassy) in pull request 12735*. [GitHub-12193](magento/magento2#12193), [GitHub-7861](magento/magento2#7861)
Shipping
You can find Magento Shipping-specific release notes in [Magento Shipping Release Notes]({{page.baseurl}}/release-notes/ReleaseNotesMagentoShipping2.2.x.html).
* The free shipping cart price rule now works as expected when **UPS shipping method** is enabled and **Free Shipping** is set to "For matching items only".
* The shipping progress dates displayed in tracking popup for FedEx shipping are now accurate.
Sitemap
* Sitemaps generated by `cron` no longer display `/pub/` in image URLs when `docroot` is set to `/pub`. Previously, if the `docroot` was set to `pub` and `BASE MEDIA URL` was not set, the cron-generated sitemap generated incorrect image URLs.
* Magento now generates correct product URLs for sitemaps. Previously, when the **Use Categories Path for Product URLs** attribute was set to **no** in **Configuration** > **Catalog** > **Search Engine Optimization**, Magento generated the wrong product URL in the sitemap.
* Images in XML sitemap are no longer always linked to the primary store in a multistore deployment. *Fix submitted by [Steven de Jong](https://github.com/StevenGuapaBV) in pull request [15689](magento/magento2#15689. [GitHub-15588](magento/magento2#15588)
* Split sitemaps now use the index sitemap name as a prefix. Previously, when generating large sitemaps that result in a single index sitemap and several smaller split sitemap files, the split sitemap files did not use the same name prefix as the parent. *Fix submitted by [James Halsall](https://github.com/jameshalsall) in pull request [14836](magento/magento2#14836.
Staging
* Banners remain assigned to a cart rule after a staging Update is applied. Previously, a banner was unassigned from the cart rule after a staging update was applied.
* Magento now rolls back updated changes to their pre-update state when a merchant deletes an active Scheduled Update. Previously, some products were removed from their assigned categories (and categories were removed from the Amdin) when an active product update was deleted.
* You can now successfully re-order a configurable product. Previously, a schedule update for one configurable product affected other ordered configurable products.
* Magento no longer unexpectedly locks up CMS pages when a merchant changes a scheduler end date. Previously, when a merchant updated the end date for a CMS page after the current scheduler ended, Magento generated an error, and the merchant could no longer access any CMS page from the Admin.
* Merchants can now edit a schedule update as expected. Previously, updating schedule data removed the product from the Admin product list.
* Magento no longer deletes products from the Admin product list after a merchant deletes its active schedule update. This deletion only appeared after the scheduled update time.
* Magento no longer throws an error when a merchant edits a product from the Admin when reviews are disabled. *Fix submitted by [Oleksandr Kravchuk](https://github.com/swnsma) in pull request [70](magento/magento2#70. [GitHub-6264](magento/magento2#6264)
* Scheduled updates to an existing group price or special price no longer remove the previously configured price. Previously, Magento removed the configured price or reverted the price to its original value after the scheduled update expired.
Store
* The `getUrlInStore()` method no longer returns URLs that contain the store code, which has shortened the extremely long URLs it previously returned. *Fix submitted by [Burlacu Vasilii](https://github.com/vasilii-b) in pull request [16468](magento/magento2#16468. [GitHub-16273](magento/magento2#16273)
Swatches
* The process of switching attribute input type has been fixed, which resolves multiple issues that customers were experiencing when working with swatches, including:
* inability to change attribute types from `swatch` to `dropdown`
* inability to remove swatches from existing products when changing an attribute type from `swatch`
* no updates to product attributes on the storefront. *Fix submitted by [Eugene Shab](https://github.com/eugene-shab) in pull request [12771](https://github.com/magento/magento2/pull/12771)*. [GitHub-9307](https://github.com/magento/magento2/issues/9307), [GitHub-11403](https://github.com/magento/magento2/issues/11403), [GitHub-11703](https://github.com/magento/magento2/issues/11703), [GitHub-12695](https://github.com/magento/magento2/issues/12695)
Tax
* Redundant product tax recalculation has been reduced during the loading of category pages, which has improved page loading. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [15089](magento/magento2#15089. [GitHub-14941](magento/magento2#14941)
* JavaScript code in the `*.phtml` file of the Tax module has been refactored to meet Magento coding standards. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15343](magento/magento2#15343. [GitHub-15352](magento/magento2#15352)
* The `Invalid country code` error message that sometimes occurred during import of tax CSV files now includes the name of the country whose data is causing the error. Previously, the message did not identify which country's data caused the error. *Fix submitted by [Adam Moss](https://github.com/adampmoss) in pull request [16873](magento/magento2#16873.
* The `translation.json` file now contains translatable strings for the phrases "Store Credit" and "Gift Card". Previously, these strings were not translated for the shopping cart, one-page checkout, or order view in the customer account on the storefront.
* We've added client-side caching of `js-translation.js`.
* Removed the unused translation for `comment` tag from these files: `app/code/Magento/Analytics/etc/adminhtml/system.xml`, `app/code/Magento/Catalog/etc/adminhtml/system.xml`, `app/code/Magento/Swatches/etc/adminhtml/system.xml`, and `app/code/Magento/Ups/etc/adminhtml/system.xml`. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [15604](magento/magento2#15604.
* Added language translation capability for `comment` tags in the `system.xml` file of the Signifyd module. *Fix submitted by [Yogesh Suhagiya](https://github.com/Yogeshks) in pull request [15364](magento/magento2#15364. [GitHub-15361](magento/magento2#15361)
* All previously unsupported `translate` tags in the mini cart template are now supported. *Fix submitted by [Vitaliy](https://github.com/VitaliyBoyko) in pull request [15782](magento/magento2#15782.
* The string for `moreButtonText` in `app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js` can now be translated. *Fix submitted by [Karla Saaremäe](https://github.com/Karlasa) in pull request [16190](magento/magento2#16190. [GitHub-16079](magento/magento2#16079)
* Added language translation capability to the Braintree module's template file. *Fix submitted by [Namrata](https://github.com/sanganinamrata) in pull request [16690](magento/magento2#16690.
* Added mini cart checkout-related translations that were missing from `app/code/Magento/Checkout/i18n/en_US.csv`. *Fix submitted by [Jeroen](https://github.com/JeroenVanLeusden) in pull request [16553](magento/magento2#16553.
* Added language translation capability for labels in the Braintree, Multishipping, and PayPal modules. *Fix submitted by [Rahul Kachhadiya](https://github.com/rahul-kachhadiya) in pull request [15371](magento/magento2#15371.
* Added language translation capability for message strings in `app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php` and `app/code/Magento/AdminNotification/i18n/en_US.csv`. *Fix submitted by [Yogesh Suhagiya](https://github.com/rahul-kachhadiya) in pull request [15333](magento/magento2#15333.
UI
* The `clickableOverlay` option now works as expected, which improves the performance of modal popups. *Fix submitted by [virtua-pmakowski](https://github.com/virtua-pmakowski) in pull request [15172](magento/magento2#15172. [GitHub-7399](magento/magento2#7399)
* Customers can now place orders from grouped products where the quantity of subproducts is less than one. *Fix submitted by [Valerij Ivashchenko](https://github.com/likemusic) in pull request [14752](magento/magento2#14752. [GitHub-14692](magento/magento2#14692)
* Footers now behave as expected when displaying Magento on a mobile device. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [15353](magento/magento2#15353. [GitHub-15118](magento/magento2#15118)
* The pagination of customer group prices in Advanced Pricing when viewed on the Admin now works as expected. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15614](magento/magento2#15614. [GitHub-15210](magento/magento2#15210)
* Magento now displays a caret icon as expected when a user hovers his mouse over a navigation category on a storefront. *Fix submitted by [Tejash Kumbhare](https://github.com/tejash-wagento) in pull request [16082](magento/magento2#16082. [GitHub-15220](magento/magento2#15220)
* Users can now press the **Esc** button on the delete-from-cart confirmation pop-up window without generating a `jQuery` UI error. Previously, when a customer added a product to the shopping cart, then pressed the trash icon to delete it, Magento displayed this confirmation pop-up window, but threw an error when the customer pressed the window's **Esc** button. *Fix submitted by [Alexander Kras'ko](https://github.com/0m3r) in pull request [16477](magento/magento2#16477. [GitHub-14593](magento/magento2#14593)
* The alignment **Title** and **Items** on the left bar has been corrected. *Fix submitted by [Rafael Corrêa Gomes](https://github.com/rafaelstz) in pull request [16984](magento/magento2#16984.
* The black color coding standard has been changed from `color: #000;` to `color: @color-black;`. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [17019](magento/magento2#17019.
* The white color coding standard has been changed from `color: #fff;` to `color: @color-white;`. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [16903](magento/magento2#16903.
* Minor issues with the dynamically defined ``$filter`` property and missing throws to PHPDocs for methods in the UI export converter classes have been corrected. *Fix submitted by [Dmytro Cheshun](https://github.com/dmytro-ch) in pull request [15694](magento/magento2#15694.
* The `ClassMagento\Ui\Component\Control\ActionPool` constructor and `getConfiguration()` in the UI module are now invoked with the correct number of parameters. *Fix submitted by [Marcel Hauri](https://github.com/mhauri) in pull request [15512](magento/magento2#15512.
* Unneeded JavaScript was removed from `logout.phtml` and replaced with a new JavaScript component. *Fix submitted by [Nimesh Patel](https://github.com/patelnimesh1988) in pull request [15301](magento/magento2#15301
* Page wrapper CSS has been moved from media query to `.page-wrapper`. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15416](magento/magento2#15416.
* The `font-size` variable has been updated and standardized. *Fix submitted by [Vishal Gelani](https://github.com/gelanivishal) in pull request [15421](magento/magento2#15421.
* Layout arguments now support for the `const` type. *Fix submitted by [Igor Vitol](https://github.com/IgorVitol) in pull request [15058](magento/magento2#15058.
* Button definitions have been moved to the new `buttons.js` file. *Fix submitted by [Jisse Reitsma](https://github.com/jissereitsma) in pull request [15194](magento/magento2#15194.
* Overlay issues with the mini cart have been resolved. Previously, if you logged in as a customer, then clicked on the mini cart icon and then the Account menu, the mini cart overlaid the Account menu. *Fix submitted by [Arthur James](https://github.com/ArtiDjeims) in pull request [14963](magento/magento2#14963.
* Magento now supports multiple `ui_components` with layout type `tabs` on a page. Previously, the second UI component failed to render, and Magento displayed this error, `Element with ID 'tabs_nav' already exists`. *Fix submitted by [Freek Vandeursen](https://github.com/FreekVandeursen) in pull request [14742](magento/magento2#14742.
* The order of style groups for mobile devices has been corrected. [GitHub-14476](magento/magento2#14476)
* Dynamic data rows no longer fail due to a read operation after a delete condition. Previously, Magento threw an undefined JavaScript error. *Fix submitted by [Chirag Matholiya](https://github.com/chirag-wagento) in pull request [15840](magento/magento2#15840. [GitHub-911](magento/inventory#911)
URL rewrites
* Categories of the Main menu in the different store view are now updated when Varnish is enabled.
* URL key values are now derived from the default value set on the default store. Previously, Magento derived the product URL key value from the product name on storeview level.
* The Magento URL rewrite functionality now supports the use of special characters in category names. Previously, the category tree did not load if a category name contained a special character. *Fix submitted by [Vinay Shah](https://github.com/vinayshah) in pull request [13397](magento/magento2#13397. [GitHub-13296](magento/magento2#13296)
* An unnecessary parameter has been removed from `_addProductLinkBlock()`. *Fix submitted by [Saurabh Parekh](https://github.com/saurabh-parekh) in pull request [15891](magento/magento2#15891.
* Template files have been refactored to follow Magento coding standards. *Fix submitted by [Nimesh Patel](https://github.com/patelnimesh1988) in pull request [15422](magento/magento2#15422. [GitHub-15356](magento/magento2#15356)
* Undefined mixin parameters are now defined and variable scope has been improved in `lib/web/css/source/lib/_icons.less`, `lib/web/css/source/lib/_pages.less`, and `lib/web/css/source/lib/_utilities.less`. *Fix submitted by [Prince Patel](https://github.com/mageprince) in pull request [17097](magento/magento2#17097.
* Magento now removes URL rewrites as expected after you delete a CMS page through the API or in the `crontab` area. *Fix submitted by [Roman](https://github.com/unicoder88) in pull request [14751](magento/magento2#14751.
* Main menu categories in different store views are now updated as expected when Varnish is enabled.
Visual Merchandiser
* Magento now maintains manual sort order and adds newly assigned products to the top of the products list. Previously, Magento reset the manual sort order and sorted products by ID.
* Saving a product no longer reverts the selected sort order for a category. Previously, after a merchant saved a product, Magento reverted the sort order that defined the display of products in that category from the defined sort order to an order defined by product ID.
Vertex
* The Gross Amount and Tax Amount columns in the Transaction Details Report file now include price and tax for products as expected.
Wishlist
* Incorrect return type hinting in DocBlocks has been corrected for several methods in the Wishlist module. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [15854](magento/magento2#15854.
* Removed an unnecessary parameter from the `toHtml()` method in `Wishlist/view/frontend/templates/item/list.phtml`. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [16023](magento/magento2#16023.
* Magento no longer thows errors when you log in using the wishlist URL. *Fix submitted by [Oleksandr Kravchuk](https://github.com/swnsma) in pull request [16386](magento/magento2#16386.
* Magento no longer removes a product from the wishlist when you update a wishlist item. *Fix submitted by [Chitoraga Eduard](https://github.com/eduard13) in pull request [16372](magento/magento2#16372.
* Magento now passes empty arrays (instead of null values) into the DataObject constructor. Previously, a null value was passed, which caused a fatal error. *Fix submitted by [Abhishek Jakhotiya](https://github.com/Jakhotiya) in pull request [16220](magento/magento2#16220.
* The `\Magento\Wishlist\CustomerData\Wishlist::getImageData()` method DocBlock now correctly indicates that the method returns an array. *Fix submitted by [Yaroslav Rogoza](https://github.com/rogyar) in pull request [15718](magento/magento2#15718.
* Magento now displays the correct product image for the selected configurable product variant in the My Wishlist sidebar. Previously, Magento always displayed the image associated with the default configurable product in the My Wishlist sidebar. *Fix submitted by [kishanpatadia](https://github.com/kishanpatadia) in pull request [15477](magento/magento2#15477.
Known issue
The catalog:image:resize command execution time has been reduced by up to 90% in the release. However, this improvement necessitates these additional steps after upgrading your Magento instance to 2.2.6:
Remove pub/media/catalog/product/cache. (The path for cached images was changed in this release, which explains why you need to clean this directory after upgrade to free up space.)
Run bin/magento catalog:image:resize to generate a new image cache. (This step is necessary because we’ve changed the path to cached images and must remove the previously cached images.)
Community contributions
This release includes substantial community contributions: over 100 GitHub issues resolved and over 350 pull requests merged. We are grateful to the wider Magento community for this effort and would like to acknowledge their contributions to this release.
Individual contributor contributions
The following table identifies contributions from our community members. This table lists the external pull requests, the GitHub issue number associated with it (if available), and the community member who contributed the pull request.
{% include release-notes/engcomm-2-2-6-issues.md %}
Partner contributions
The following table highlights contributions made by Partners. This table lists the Partner who contributed the pull request, the external pull request, and the GitHub issue number associated with it (if available).
Our technology stack is built on PHP and MySQL. For details, see [Technology stack requirements]({{ page.baseurl }}/install-gde/system-requirements-tech.html).
The Code Migration Toolkit helps transfer existing Magento 1.x store extensions and customizations to Magento 2.2.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts.