Date: Mon, 9 May 2022 10:50:50 -0500
Subject: [PATCH 023/776] Fixes magento/devdocs#8857 AWS regions
Update AWS regions
---
src/cloud/env/environments-start.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/cloud/env/environments-start.md b/src/cloud/env/environments-start.md
index 01e9371b08a..193f593e97a 100644
--- a/src/cloud/env/environments-start.md
+++ b/src/cloud/env/environments-start.md
@@ -147,8 +147,8 @@ If you have a corporate firewall that blocks outgoing SSH connections, you can a
|
50.112.160.58
-`54.213.195.223`
-`35.163.170.185`
+54.213.195.223
+35.163.170.185
|
52.209.44.44
From 204a48c47ecc2dce64d67c0bb8283bca6fe0ffe6 Mon Sep 17 00:00:00 2001
From: Heather Guthrie
Date: Mon, 9 May 2022 10:51:40 -0500
Subject: [PATCH 024/776] Remove poor graphic
---
src/cloud/project/project-webint-basic.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/cloud/project/project-webint-basic.md b/src/cloud/project/project-webint-basic.md
index f7450bb6eea..85595c8fc9d 100644
--- a/src/cloud/project/project-webint-basic.md
+++ b/src/cloud/project/project-webint-basic.md
@@ -6,14 +6,14 @@ functional_areas:
- Configuration
---
-The {{site.data.var.ece}} [Project Web Interface](https://account.magento.com/customer/account/login/) enables you to do the following for all Starter and Pro environments:
+For all {{site.data.var.ece}} projects, you can use the [Project Web Interface](https://account.magento.com/customer/account/login/) to perform the following tasks:
- [Access projects](#project-access)
- [Configure environment settings](#configure-environment-settings)
- [Add users and manage access]({{ site.baseurl }}/cloud/project/user-admin.html)
- [Manage Git branches]({{ site.baseurl }}/cloud/project/project-webint-branch.html)
-As you make changes to these settings, the branch redeploys to the environment. You can make these setting changes for all Starter and Pro environments.
+Changes that you make to environment configuration trigger a redeployment of that environment.
## Access your project and environments {#project-access}
@@ -26,9 +26,9 @@ The Project Web Interface provides several ways to access your project and envir
To access projects and environments through the Project Web Interface:
1. [Log in to your project](https://account.magento.com/customer/account/login/).
-1. Click **Access Site** for a list of URLs for web access and the command for SSH access.
+1. The left pane shows your list of environments.
+1. Click **Access Site** for a list of storefront URLs for web access and the command for SSH access.
- {:width="600px"}
For more information about using SSH, see [SSH to an environment]({{ site.baseurl }}/cloud/env/environments-ssh.html#magento-cli). To clone the project using either the {{site.data.var.ece}} CLI or Git, use the links in the field under the branch name.
From 3aa32b09f923778e1fa09b715457280041982148 Mon Sep 17 00:00:00 2001
From: Vladyslav Sikailo
Date: Tue, 10 May 2022 13:44:37 +0300
Subject: [PATCH 025/776] fix for 2.3
---
src/guides/v2.3/config-guide/prod/config-reference-systemxml.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/guides/v2.3/config-guide/prod/config-reference-systemxml.md b/src/guides/v2.3/config-guide/prod/config-reference-systemxml.md
index d4158510cf8..bd078c4af22 100644
--- a/src/guides/v2.3/config-guide/prod/config-reference-systemxml.md
+++ b/src/guides/v2.3/config-guide/prod/config-reference-systemxml.md
@@ -281,7 +281,7 @@ A ``-Tag can have the following children:
| `backend_model` | Specifies a different backend model to modify the configured values. | `typeModel` |
| `source_model` | Specifies a different source model that provides a specific set of values. | `typeModel` |
| `config_path` | Can be used to overwrite the generic config path of a field. | `typeConfigPath` |
-| `validate` | Define different validation rules (comma separated). Full reference list of available validation rules is listed below. | `string` |
+| `validate` | Define different validation rules (space separated). Full reference list of available validation rules is listed below. | `string` |
| `can_be_empty` | Used when `type` is `multiselect` to specify that a field can be empty. | `int` |
| `if_module_enabled` | Used to display a field only when a given module is enabled. | `typeModule` |
| `base_url` | Used in combination with `upload_dir` for file uploads. | `typeUrl` |
From d90bd5b45cfee4de3d39639bef04b8947767adab Mon Sep 17 00:00:00 2001
From: Heather Guthrie
Date: Tue, 10 May 2022 09:33:06 -0500
Subject: [PATCH 026/776] Update project-webint-basic.md
---
src/cloud/project/project-webint-basic.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/cloud/project/project-webint-basic.md b/src/cloud/project/project-webint-basic.md
index 85595c8fc9d..b6b5e453d59 100644
--- a/src/cloud/project/project-webint-basic.md
+++ b/src/cloud/project/project-webint-basic.md
@@ -29,7 +29,6 @@ To access projects and environments through the Project Web Interface:
1. The left pane shows your list of environments.
1. Click **Access Site** for a list of storefront URLs for web access and the command for SSH access.
-
For more information about using SSH, see [SSH to an environment]({{ site.baseurl }}/cloud/env/environments-ssh.html#magento-cli). To clone the project using either the {{site.data.var.ece}} CLI or Git, use the links in the field under the branch name.
The following figure shows an example.
From 4234e74fdef8865fcef02bd96ec182a1d434d77d Mon Sep 17 00:00:00 2001
From: Heather Guthrie
Date: Tue, 10 May 2022 12:57:55 -0500
Subject: [PATCH 027/776] Update project-webint-snap.md
---
src/cloud/project/project-webint-snap.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/cloud/project/project-webint-snap.md b/src/cloud/project/project-webint-snap.md
index f278ee14f06..2fa65c34635 100644
--- a/src/cloud/project/project-webint-snap.md
+++ b/src/cloud/project/project-webint-snap.md
@@ -10,7 +10,7 @@ You can back up and restore specific environments at any time using a snapshot.
The Pro Staging and Production environments receive regular backups for disaster recovery purposes by default, see [Pro Backup & Disaster Recovery]({{ site.baseurl }}/cloud/architecture/pro-architecture.html#backup-and-disaster-recovery). However, these backups are not publicly accessible because they are stored in a separate system. You can open a ticket to request a backup with a specific date, time, and timezone. Then we can extract it from the external system and provide it to you.
{:.bs-callout-tip}
-Snapshots for Starter and Pro Integration environments are different from Pro backup and disaster recovery backups. Snapshots are **not** automatic. It is _your_ responsibility to manually create a snapshot or set up a con job to periodically take snapshots of your Starter or Pro Integration environments.
+Snapshots for Starter and Pro Integration environments are different from Pro backup and disaster recovery backups. Snapshots are **not** automatic. It is _your_ responsibility to manually create a snapshot or set up a cron job to periodically take snapshots of your Starter or Pro Integration environments.
A _snapshot_ is a complete backup of an environment that includes all persistent data from all running services (for example, your MySQL database, Redis, and so on) and any files stored on the mounted volumes. Because an environment deploys as a read-only file system, restoring a snapshot is very fast.
From 1661383fb8ce89e79d9c0b67563e8bef0c0289ef Mon Sep 17 00:00:00 2001
From: Donald Booth
Date: Wed, 11 May 2022 11:39:44 -0400
Subject: [PATCH 028/776] Small tweak
---
src/guides/v2.3/get-started/bk-get-started-api.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/guides/v2.3/get-started/bk-get-started-api.md b/src/guides/v2.3/get-started/bk-get-started-api.md
index 38c62fb6d07..9ab01d035d4 100644
--- a/src/guides/v2.3/get-started/bk-get-started-api.md
+++ b/src/guides/v2.3/get-started/bk-get-started-api.md
@@ -39,7 +39,7 @@ The APIs can be used to perform a wide array of tasks. For example:
* Integrate with CRM (Customer Relationship Management) or ERP (Enterprise Resource Planning) backend systems, such as Salesforce or Xero.
-* Integrate with a [CMS](https://glossary.magento.com/cms) (Content Management System). Content tagging is not currently supported.
+* Integrate with a [CMS](https://glossary.magento.com/cms) (Content Management System). Currently. content tagging is not supported.
* Create [JavaScript](https://glossary.magento.com/javascript) widgets in the Magento [storefront](https://glossary.magento.com/storefront) or on the [Admin](https://glossary.magento.com/admin) panel. The [widget](https://glossary.magento.com/widget) makes AJAX calls to access services.
From a09ef58e9464eaf78648e30e01a046d37d410b33 Mon Sep 17 00:00:00 2001
From: Andrii Poltoratskyi
Date: Wed, 11 May 2022 09:32:19 -0700
Subject: [PATCH 029/776] updated version
updated version for MDVA-4385,MDVA-44147 and MDVA-43451
---
src/quality-patches/release-notes.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/quality-patches/release-notes.md b/src/quality-patches/release-notes.md
index 32611fdb1c5..9d1a0d3c1ca 100644
--- a/src/quality-patches/release-notes.md
+++ b/src/quality-patches/release-notes.md
@@ -28,8 +28,8 @@ For information about quality patches created by the Community for {{site.data.v
- **MDVA-43605** _(for Adobe Commerce and Magento Open Source `>=2.3.1 <2.4.5`)_-Fixes the issue where order data returns negative values for row totals when using Rest API.
- **MDVA-43102** _(for Adobe Commerce and Magento Open Source `>=2.3.1 <2.4.5`)_-Fixes the issue where the salable quantity is not updated correctly when a refund was done via REST API.
- **MDVA-43178** _(for Adobe Commerce and Magento Open Source `>=2.4.3-p2 <2.4.5`)_-Fixes the issue where a customer token for a custom store cannot be retrieved in GraphQL.
-- **MDVA-43859** _(for Adobe Commerce and Magento Open Source `>=1.3.0 <1.3.4`)_-Fixes the issue where the error \"No such entity with customerId =\" is logged when a deleted customer tries to log in.
-- **MDVA-44147** _(for Adobe Commerce and Magento Open Source `>=1.3.1 <1.3.4`)_-Fixes the issue where a GraphQL request doesn't return Requisition Lists.
+- **MDVA-43859** _(for Adobe Commerce and Magento Open Source `>=2.4.1 <2.4.5`)_-Fixes the issue where the error \"No such entity with customerId =\" is logged when a deleted customer tries to log in.
+- **MDVA-44147** _(for Adobe Commerce and Magento Open Source `>=2.4.2 <2.4.5`)_-Fixes the issue where a GraphQL request doesn't return Requisition Lists.
- **MDVA-44505** _(for Adobe Commerce and Magento Open Source `>=2.4.1 <2.4.3`)_-Fixes the issues where GraphQL Applying Reward Points does not update Grand Total and where store credit is applied multiple times during the order placement.
- Updated patches: MDVA-29148, MDVA-36464-V5, MDVA-42584, MDVA-39993-V2.
@@ -39,7 +39,7 @@ For information about quality patches created by the Community for {{site.data.v
- **MDVA-39605** _(for Adobe Commerce and Magento Open Source `>=2.3.4 <2.4.5`)_-Fixes the issue where Redis cache TTL (expiration date) has a wrong value.
- **MDVA-43862** _(for Adobe Commerce and Magento Open Source `>=2.3.3 <2.4.5`)_-Fixes the issue where the customer can’t update cart items because of a GraphQL UpdateCartItems mutation error.
- **MDVA-43824** _(for Adobe Commerce and Magento Open Source `>=2.3.6 <=2.3.7-p3 || >=2.4.1 <2.4.5`)_-Fixes the issue where an error appears on canceling orders with a discount.
-- **MDVA-43451** _(for Adobe Commerce and Magento Open Source `>=1.3.2 <1.3.4`)_-Fixes the issue where the error “The store that was requested wasn’t found. Verify the store and try again.” appears while configuring a shared catalog for a specific website.
+- **MDVA-43451** _(for Adobe Commerce and Magento Open Source `>=2.4.3 <2.4.5`)_-Fixes the issue where the error “The store that was requested wasn’t found. Verify the store and try again.” appears while configuring a shared catalog for a specific website.
- **MDVA-43491** _(for Adobe Commerce and Magento Open Source `>=2.3.5 <2.4.5`)_-Fixes the issue where the base image label doesn’t update when importing products for a multi-store website.
- **MDVA-43601** _(for Adobe Commerce and Magento Open Source `>=2.3.0 <2.4.5`)_-Fixes the issue with missing triggers after full reindex.
- **MDVA-42046** _(for Adobe Commerce and Magento Open Source `>=2.3.4 <=2.3.5-p2 || >=2.4.0 <2.4.5`)_-Fixes the issue where an incorrect value is assigned to a product attribute with a date input field while updating a product.
From 2a0e80044b9d7266ce56c687f9e75aa5f5ec0b4d Mon Sep 17 00:00:00 2001
From: Heather Guthrie
Date: Wed, 11 May 2022 13:36:59 -0500
Subject: [PATCH 030/776] fix url
---
src/guides/v2.3/config-guide/prod/config-reference-var-name.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/guides/v2.3/config-guide/prod/config-reference-var-name.md b/src/guides/v2.3/config-guide/prod/config-reference-var-name.md
index 9465cc0932c..4f550db6c36 100644
--- a/src/guides/v2.3/config-guide/prod/config-reference-var-name.md
+++ b/src/guides/v2.3/config-guide/prod/config-reference-var-name.md
@@ -12,7 +12,7 @@ This topic discusses how to derive an environment variable name knowing a config
You can override the value of _any_ configuration setting using environment variables; however, we recommend you maintain consistent settings using the shared configuration file, `config.php`, and the system-specific configuration file, `env.php`, as discussed in [Deployment general overview]({{ page.baseurl }}/config-guide/deployment/pipeline/).
{:.bs-callout-tip}
-Check out the [Configure environments]({{ page.baseurl }}/cloud/env/variables-intro.html) topic in the _Cloud_ guide for details on working with variables in {{site.data.var.ece}}.
+Check out the [Configure environments]({{ site.baseurl }}/cloud/env/variables-intro.html) topic in the _Cloud_ guide for details on working with variables in {{site.data.var.ece}}.
A environment variable name consists of its scope followed by its configuration path in a particular format. The following sections discuss how to determine a variable name in more detail.
From 507387b0bbc72589bff641e22b2be0129dbca189 Mon Sep 17 00:00:00 2001
From: gregory-marshall
Date: Wed, 11 May 2022 12:51:28 -0700
Subject: [PATCH 031/776] Added link to create a support ticket
---
src/cloud/configure/setup-cron-jobs.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/cloud/configure/setup-cron-jobs.md b/src/cloud/configure/setup-cron-jobs.md
index 04eddf28a40..50ffd748522 100644
--- a/src/cloud/configure/setup-cron-jobs.md
+++ b/src/cloud/configure/setup-cron-jobs.md
@@ -53,7 +53,7 @@ To review cron configuration on Pro plan environments:
```
{:.bs-callout-info}
- If the `crontab -l` command returns a `Command not found` error, contact your Customer Technical Advisor (CTA) or Customer Success Manager (CSM) about enabling the auto-crons self-service configuration option on your {{site.data.var.ece}} project.
+ If the `crontab -l` command returns a `Command not found` error, you must submit a [Support ticket] (https://support.magento.com/hc/en-us/articles/360000913794#submit-ticket) to enable the auto-crons self-service configuration option on your {{site.data.var.ece}} project.
The following example shows the crontab output for an environment that has only the default crons configuration:
From 530bb68154d7c2707d50eb861f05bdfe703d04de Mon Sep 17 00:00:00 2001
From: gregory-marshall
Date: Wed, 11 May 2022 14:47:53 -0700
Subject: [PATCH 032/776] Removed redundant wording
---
src/cloud/architecture/pro-develop-deploy-workflow.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/cloud/architecture/pro-develop-deploy-workflow.md b/src/cloud/architecture/pro-develop-deploy-workflow.md
index 66699d6ffa0..ec9ae8ac46f 100644
--- a/src/cloud/architecture/pro-develop-deploy-workflow.md
+++ b/src/cloud/architecture/pro-develop-deploy-workflow.md
@@ -17,7 +17,7 @@ The following graphic demonstrates the Pro develop and deploy workflow, which us
## Development workflow {#develop}
-The Integration environment provides a single, base integration branch containing your {{site.data.var.ece}} code. You can create one additional, environment branch. This allows for up to two active branches deployed to Platform-as-a-Service (PaaS) containers.(PaaS) containers.
+The Integration environment provides a single, base integration branch containing your {{site.data.var.ece}} code. You can create one additional, environment branch. This allows for up to two active branches deployed to Platform-as-a-Service (PaaS) containers.
{% include cloud/note-enhanced-integration-envs-kb.md%}
From 0c67a578d3154952861ae09ee4127cca9d62d6de Mon Sep 17 00:00:00 2001
From: Daniel Del Carmen
Date: Thu, 12 May 2022 17:10:35 +0200
Subject: [PATCH 033/776] Fixed composer version for latest commerce versions
---
src/_data/codebase/v2_4/system-requirements.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/_data/codebase/v2_4/system-requirements.yml b/src/_data/codebase/v2_4/system-requirements.yml
index 8d0e0bec317..1a903583872 100644
--- a/src/_data/codebase/v2_4/system-requirements.yml
+++ b/src/_data/codebase/v2_4/system-requirements.yml
@@ -1,6 +1,6 @@
---
2.4.5:
- Composer: '2'
+ Composer: '2.1'
Elasticsearch: '7.17'
OpenSearch: '1.2'
MariaDB: '10.4'
@@ -12,7 +12,7 @@
Apache: '2.4'
nginx: '1.8'
2.4.4:
- Composer: '2'
+ Composer: '2.1'
Elasticsearch: '7.16'
OpenSearch: '1.2'
MariaDB: '10.4'
From 47f40799606121f3b6afe361df57e436196dee84 Mon Sep 17 00:00:00 2001
From: Donald Booth
Date: Thu, 12 May 2022 12:41:13 -0400
Subject: [PATCH 034/776] Typo
---
src/guides/v2.3/get-started/bk-get-started-api.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/guides/v2.3/get-started/bk-get-started-api.md b/src/guides/v2.3/get-started/bk-get-started-api.md
index 9ab01d035d4..b0e7a1c3e28 100644
--- a/src/guides/v2.3/get-started/bk-get-started-api.md
+++ b/src/guides/v2.3/get-started/bk-get-started-api.md
@@ -39,7 +39,7 @@ The APIs can be used to perform a wide array of tasks. For example:
* Integrate with CRM (Customer Relationship Management) or ERP (Enterprise Resource Planning) backend systems, such as Salesforce or Xero.
-* Integrate with a [CMS](https://glossary.magento.com/cms) (Content Management System). Currently. content tagging is not supported.
+* Integrate with a [CMS](https://glossary.magento.com/cms) (Content Management System). Currently, content tagging is not supported.
* Create [JavaScript](https://glossary.magento.com/javascript) widgets in the Magento [storefront](https://glossary.magento.com/storefront) or on the [Admin](https://glossary.magento.com/admin) panel. The [widget](https://glossary.magento.com/widget) makes AJAX calls to access services.
From 49f44f79d206c19a52ec3a0c3ca69fc1904c84d1 Mon Sep 17 00:00:00 2001
From: Donald Booth
Date: Thu, 12 May 2022 13:13:11 -0400
Subject: [PATCH 035/776] Update
src/guides/v2.3/config-guide/cli/config-cli-subcommands-mode.md
Co-authored-by: hguthrie
---
src/guides/v2.3/config-guide/cli/config-cli-subcommands-mode.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/guides/v2.3/config-guide/cli/config-cli-subcommands-mode.md b/src/guides/v2.3/config-guide/cli/config-cli-subcommands-mode.md
index ddd180176b2..63ffab54472 100644
--- a/src/guides/v2.3/config-guide/cli/config-cli-subcommands-mode.md
+++ b/src/guides/v2.3/config-guide/cli/config-cli-subcommands-mode.md
@@ -68,7 +68,7 @@ bin/magento deploy:mode:set {mode} [-s|--skip-compilation]
where:
-- **`{mode}`** is required; it can be either `default`, `developer` or `production`
+- **`{mode}`** is required; it can be either `default`, `developer`, or `production`
- **`--skip-compilation`** is an optional parameter you can use to skip [code compilation]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-compiler.html) when you change to production mode.
From f6af62d5bd31a3fce70e144bfa594bf9414bfe9c Mon Sep 17 00:00:00 2001
From: Dmytro Shevtsov
Date: Thu, 12 May 2022 14:58:04 -0500
Subject: [PATCH 036/776] Update the released versions data file
Add 2.4.4, 2.4.3-p2, 2.3.7-p3
Update the EOS date for 2.4.0-2.4.3
---
src/_data/core-releases.json | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/src/_data/core-releases.json b/src/_data/core-releases.json
index d188cf40f19..3227681fb18 100644
--- a/src/_data/core-releases.json
+++ b/src/_data/core-releases.json
@@ -1,10 +1,26 @@
{
"2.4.4-2.4.6": {
- "releases": [],
+ "releases": [
+ {
+ "publishedAt": "2022-04-12T14:09:01Z",
+ "tagName": "2.4.4",
+ "releaseNotes" : {
+ "commerce": "https://devdocs.magento.com/guides/v2.4/release-notes/commerce-2-4-4.html",
+ "opensource": "https://devdocs.magento.com/guides/v2.4/release-notes/open-source-2-4-4.html"
+ }
+ }
+ ],
"end-of-support": "2024-11-??"
},
"2.4.0-2.4.3": {
"releases": [
+ {
+ "publishedAt": "2022-04-12T14:08:56Z",
+ "tagName": "2.4.3-p2",
+ "releaseNotes" : {
+ "common": "https://devdocs.magento.com/guides/v2.4/release-notes/2-4-3-p2.html"
+ }
+ },
{
"publishedAt": "2021-10-12T14:41:27Z",
"tagName": "2.4.3-p1",
@@ -64,14 +80,20 @@
}
}
],
- "end-of-support": "2022-11-??"
+ "end-of-support": "2022-11-28"
},
"2.3": {
"releases": [
+ {
+ "publishedAt": "2022-04-12T14:08:47Z",
+ "tagName": "2.3.7-p3",
+ "releaseNotes": {
+ "common": "https://devdocs.magento.com/guides/v2.3/release-notes/2-3-7-p3.html"
+ }
+ },
{
"publishedAt": "2021-10-12T14:41:22Z",
"tagName": "2.3.7-p2",
- "commerce": "",
"releaseNotes" : {
"common": "https://devdocs.magento.com/guides/v2.3/release-notes/2-3-7-p2.html"
}
From 877e2e1ecb3a3116c3ca3b2679c8740787664279 Mon Sep 17 00:00:00 2001
From: Oleksandra Marchenko
Date: Thu, 12 May 2022 15:47:31 -0500
Subject: [PATCH 037/776] Update project-patch.md
---
src/cloud/project/project-patch.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/cloud/project/project-patch.md b/src/cloud/project/project-patch.md
index a91be66d3e3..feb48846137 100644
--- a/src/cloud/project/project-patch.md
+++ b/src/cloud/project/project-patch.md
@@ -18,7 +18,7 @@ Both packages improve the integration of all {{site.data.var.ee}} versions with
{:.bs-callout-tip}
You can use the [Quality Patches Tool]({{ site.baseurl }}/quality-patches/usage.html) and [{{ site.data.var.mcp-prod }}](#standalone) packages as stand-alone packages for {{ site.data.var.ce }} and {{ site.data.var.ee }} projects. We recommend using the Quality Patches Tool for non-Cloud projects.
-When you deploy changes to the remote environment, `{{site.data.var.ct}}` uses {{ site.data.var.mcp-package }} and `magento/quality-patches` to check for pending patches and applies them automatically in the following order:
+When you deploy changes to the remote environment, `{{site.data.var.ct}}` uses `{{ site.data.var.mcp-package }}` and `magento/quality-patches` to check for pending patches and applies them automatically in the following order:
1. Apply all required Magento patches included in the {{ site.data.var.mcp-prod }} package.
1. Apply selected optional Magento patches included in the Quality Patches Tool.
From ee6f62b1b12c4daf638deaa1a934b49576a1f04d Mon Sep 17 00:00:00 2001
From: Barny Shergold
Date: Mon, 16 May 2022 11:01:23 +0100
Subject: [PATCH 038/776] Corrected blog link on release index
---
src/release/index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/release/index.md b/src/release/index.md
index 6847af4905d..395f84ea78a 100644
--- a/src/release/index.md
+++ b/src/release/index.md
@@ -27,7 +27,7 @@ The following table provides the dates for scheduled releases (dates are subject
Patch and Security Patch Releases are opportunities to upgrade the core codebase to keep your platform secure, reliable, and performant. Feature Releases occur every other month. Feature Releases are independent of the core codebase and are available through external module or extension. Any updates to existing independent features will also be released during Feature Release periods and will happen automatically if the feature is already implemented.
{:.bs-callout-info}
-We have introduced a [new policy](https://www.adobe.com/content/dam/cc/en/legal/terms/enterprise/pdfs/Adobe-Commerce-Software-Lifecycle-Policy.pdf) that applies to our supported release lines. To learn more about the new strategy behind our 2022 release calendar and lifecycle policy, visit our [blog](https://magento.com/blog/accelerating-innovation-through-simplified-release-strategy).
+We have introduced a [new policy](https://www.adobe.com/content/dam/cc/en/legal/terms/enterprise/pdfs/Adobe-Commerce-Software-Lifecycle-Policy.pdf) that applies to our supported release lines. To learn more about the new strategy behind our 2022 release calendar and lifecycle policy, visit our [blog](https://business.adobe.com/blog/how-to/accelerating-innovation-through-simplified-release-strategy).
## Early access
From bce0d6713d16a0654bf069c9d29ebffbe3945c2c Mon Sep 17 00:00:00 2001
From: magedocs
Date: Mon, 16 May 2022 14:38:46 +0000
Subject: [PATCH 039/776] Update News data
---
src/_data/whats-new.yml | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/_data/whats-new.yml b/src/_data/whats-new.yml
index ac96832ea0e..ac3d642c9ff 100644
--- a/src/_data/whats-new.yml
+++ b/src/_data/whats-new.yml
@@ -4,8 +4,35 @@ description: This page contains recent changes that we think you'd like to know
We exclude from this list proofreading, spelling checks, and all minor updates.
link: "/whats-new.html"
thread: "/whatsnew-feed.xml"
-updated: Mon May 9 14:38:42 2022
+updated: Mon May 16 14:38:43 2022
entries:
+- description: Update the [Released versions](https://devdocs.magento.com/release/released-versions.html)
+ topic: - Add 2.4.4, 2.4.3-p2, 2.3.7-p3 - Update the end of support date
+ for 2.4.0-2.4.3
+ versions: 2.3.x, 2.4.x
+ type: Technical
+ date: May 12, 2022
+ link: https://github.com/magento-commerce/devdocs/pull/2958
+ merge_commit: 7231798ae6bd3bfc1ad8b524e97d4b3b318fb1dd
+ contributor: dshevtsov
+ membership: true
+ labels:
+ - 2.3.x
+ - Technical
+ - 2.4.x
+- description: Published [release notes](https://devdocs.magento.com/quality-patches/release-notes.html)
+ for the 1.1.14 Quality Patches Tool (QPT) package release.
+ versions: 2.3.x, 2.4.x
+ type: Major Update
+ date: May 10, 2022
+ link: https://github.com/magento-commerce/devdocs/pull/2952
+ merge_commit: 9e683d39d04237019f5f0ebb581b83b5c59a416b
+ contributor: apoltoratskyi
+ membership: true
+ labels:
+ - Major Update
+ - 2.3.x
+ - 2.4.x
- description: Added a tutorial on [creating a bundled product](https://devdocs.magento.com/guides/v2.4/rest/tutorials/bundle-product/bundle-product-intro.html)
with the API.
versions: 2.3.x, 2.4.x
From a5ac453fc742d868e33f1923a25daba6c4769e6e Mon Sep 17 00:00:00 2001
From: Shrie Spangler
Date: Tue, 17 May 2022 10:15:26 -0500
Subject: [PATCH 040/776] Add Pay Services info to Availability topic
---
src/release/availability.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/release/availability.md b/src/release/availability.md
index 56e9a02785d..6c69fdf2cde 100644
--- a/src/release/availability.md
+++ b/src/release/availability.md
@@ -10,6 +10,7 @@ The following table describes the status of Adobe Commerce software availability
| **{{site.data.var.ee}} 2.4.4** | Available now | [Composer]({{ site.baseurl }}{{ site.gdeurl }}/install-gde/composer.html) |
| **{{site.data.var.ece}} Tools (aka ECE-Tools)** | Available now | [Composer]({{ site.baseurl }}/cloud/project/ece-tools-update.html) |
| **Live Search** | Available now | [Commerce Marketplace](https://marketplace.magento.com/magento-live-search.html) \| [Developer Documentation]({{ site.baseurl }}/live-search/overview.html) \| [Release Notes](https://docs.magento.com/user-guide/live-search/release-notes.html) \| [User Guide](https://docs.magento.com/user-guide/live-search/overview.html) |
+| **Payment Services** | Available now | [Commerce Marketplace](https://marketplace.magento.com/magento-payment-services.html) \| [Release Notes](https://experienceleague.adobe.com/docs/commerce-merchant-services/payment-services/release-notes.html) \| [User Guide](https://experienceleague.adobe.com/docs/commerce-merchant-services/payment-services/guide-overview.html) |
| **Product Recommendations** | Available now | [Commerce Marketplace](https://marketplace.magento.com/magento-product-recommendations.html) \| [Developer Documentation]({{ site.baseurl }}/recommendations/product-recs.html) \| [Release Notes]({{ site.baseurl }}/recommendations/release-notes.html) \| [User Guide](https://docs.magento.com/m2/ee/user_guide/marketing/product-recommendations.html) |
| **PWA Studio** | Available now | [Documentation](http://pwastudio.io) and [GitHub](https://github.com/magento-research/pwa-studio) |
| **Amazon Sales Channel 4.4.1** | Available now for {{site.data.var.ee}} versions 2.4.x and 2.3.x (US, Canada, Mexico, and UK) | [Commerce Marketplace](https://marketplace.magento.com/magento-module-amazon.html) \| [Release Notes]({{ site.baseurl }}/extensions/amazon-sales/release-notes) \| [User Guide]({{ site.user_guide_url }}/sales-channels/asc/amazon-sales-channel.html) |
From 3a9c22fb739fa2cb9ca23125db574bbd97958858 Mon Sep 17 00:00:00 2001
From: Shrie Spangler
Date: Tue, 17 May 2022 10:51:35 -0500
Subject: [PATCH 041/776] Add Pay Services versioning to mde.yml
---
src/_data/mde.yml | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/src/_data/mde.yml b/src/_data/mde.yml
index 886d003aff2..0b238a3c58c 100644
--- a/src/_data/mde.yml
+++ b/src/_data/mde.yml
@@ -876,6 +876,41 @@ extensions:
2.3.2: not supported
2.3.1: supported
2.3.0: compatible
+ -
+ name: Payment Services
+ versions:
+ -
+ name: 1.1.0
+ support:
+ 2.4.4: supported
+ 2.4.3: supported
+ 2.4.2: supported
+ 2.4.1: supported
+ 2.4.0: supported
+ 2.3.7: not supported
+ 2.3.6: not supported
+ 2.3.5-p1: not supported
+ 2.3.4: not supported
+ 2.3.3: not supported
+ 2.3.2: supported
+ 2.3.1: not supported
+ 2.3.0: not supported
+ -
+ name: 1.0.0
+ support:
+ 2.4.4: supported
+ 2.4.3: supported
+ 2.4.2: supported
+ 2.4.1: supported
+ 2.4.0: supported
+ 2.3.7: not supported
+ 2.3.6: not supported
+ 2.3.5-p1: not supported
+ 2.3.4: not supported
+ 2.3.3: not supported
+ 2.3.2: not supported
+ 2.3.1: not supported
+ 2.3.0: not supported
-
name: Product Recommendations
versions:
From db1122c31b7765e7ed6a95a53efc0f83402fe642 Mon Sep 17 00:00:00 2001
From: gregory-marshall
Date: Tue, 17 May 2022 09:19:17 -0700
Subject: [PATCH 042/776] Fixed broken link to support
---
src/cloud/configure/setup-cron-jobs.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/cloud/configure/setup-cron-jobs.md b/src/cloud/configure/setup-cron-jobs.md
index 50ffd748522..747d2923b89 100644
--- a/src/cloud/configure/setup-cron-jobs.md
+++ b/src/cloud/configure/setup-cron-jobs.md
@@ -53,7 +53,7 @@ To review cron configuration on Pro plan environments:
```
{:.bs-callout-info}
- If the `crontab -l` command returns a `Command not found` error, you must submit a [Support ticket] (https://support.magento.com/hc/en-us/articles/360000913794#submit-ticket) to enable the auto-crons self-service configuration option on your {{site.data.var.ece}} project.
+ If the `crontab -l` command returns a `Command not found` error, you must submit a [Support ticket](https://support.magento.com/hc/en-us/articles/360000913794#submit-ticket) to enable the auto-crons self-service configuration option on your {{site.data.var.ece}} project.
The following example shows the crontab output for an environment that has only the default crons configuration:
@@ -120,7 +120,7 @@ The default cron interval for all environments provisioned in the US-3, EU-3, an
### Prerequisite
-On {{ site.data.var.ee }} Pro projects, the [auto-crons feature](#verify-cron-configuration-on-pro-projects) must be enabled on your {{site.data.var.ece}} project before you can add custom cron jobs to Staging and Production environments using `.magento.app.yaml`. If this feature is not enabled, contact your Customer Technical Advisor (CTA).
+On {{ site.data.var.ee }} Pro projects, the [auto-crons feature](#verify-cron-configuration-on-pro-projects) must be enabled on your {{site.data.var.ece}} project before you can add custom cron jobs to Staging and Production environments using `.magento.app.yaml`. If this feature is not enabled, submit a [Support ticket](https://support.magento.com/hc/en-us/articles/360000913794#submit-ticket) to enable auto-crons.
{:.procedure}
To add custom crons:
From 3443d50003cca8489dadb9f188db00797981e522 Mon Sep 17 00:00:00 2001
From: Shrie Spangler
Date: Tue, 17 May 2022 12:05:52 -0500
Subject: [PATCH 043/776] Fix availability calendar error
---
src/_data/mde.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/_data/mde.yml b/src/_data/mde.yml
index 0b238a3c58c..7cafda503c5 100644
--- a/src/_data/mde.yml
+++ b/src/_data/mde.yml
@@ -892,7 +892,7 @@ extensions:
2.3.5-p1: not supported
2.3.4: not supported
2.3.3: not supported
- 2.3.2: supported
+ 2.3.2: not supported
2.3.1: not supported
2.3.0: not supported
-
From 57708ce8a45e3b3102a6afd43be8340df3650ebf Mon Sep 17 00:00:00 2001
From: Jeff Matthews
Date: Tue, 17 May 2022 14:58:59 -0500
Subject: [PATCH 044/776] Replaced symlinks for 2.4
---
.../archi_perspectives/ABasics_intro.md | 24 ++-
.../archi_perspectives/ALayers_intro.md | 37 +++-
.../archi_perspectives/arch_diagrams.md | 22 ++-
.../components/AComponents.md | 21 ++-
.../components/modules/mod_depend.md | 173 +++++++++++++++++-
.../components/modules/mod_relationships.md | 53 +++++-
.../archi_perspectives/domain_layer.md | 46 ++++-
.../archi_perspectives/framework.md | 85 ++++++++-
.../archi_perspectives/persist_layer.md | 39 +++-
.../archi_perspectives/present_layer.md | 85 ++++++++-
.../archi_perspectives/service_layer.md | 81 +++++++-
.../archi_perspectives/tech-vision.md | 16 +-
.../archi_perspectives/third-party-libs.md | 12 +-
.../archi_perspectives/webapi-vision.md | 117 +++++++++++-
.../v2.4/architecture/bk-architecture.md | 14 +-
src/guides/v2.4/architecture/extensibility.md | 117 +++++++++++-
.../global_extensibility_features.md | 95 +++++++++-
.../v2.4/architecture/security_intro.md | 49 ++++-
.../architecture/storefront_customization.md | 42 ++++-
19 files changed, 1109 insertions(+), 19 deletions(-)
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/framework.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/present_layer.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/service_layer.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
mode change 120000 => 100644 src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
mode change 120000 => 100644 src/guides/v2.4/architecture/bk-architecture.md
mode change 120000 => 100644 src/guides/v2.4/architecture/extensibility.md
mode change 120000 => 100644 src/guides/v2.4/architecture/global_extensibility_features.md
mode change 120000 => 100644 src/guides/v2.4/architecture/security_intro.md
mode change 120000 => 100644 src/guides/v2.4/architecture/storefront_customization.md
diff --git a/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md b/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
deleted file mode 120000
index 61e90476769..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/ABasics_intro.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md b/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
new file mode 100644
index 00000000000..5da43782d09
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
@@ -0,0 +1,23 @@
+---
+group: architecture-guide
+title: Architectural basics overview
+menu_title: Architectural basics
+---
+
+Magento incorporates the core architectural principles of object-oriented, PHP-based applications. Comprehensive discussions of these general principles exist both on-line and in printed form.
+
+The following discussion focuses on how these topics apply directly to Magento:
+
+* [Magento technology stack]({{page.baseurl}}/install-gde/system-requirements.html)
+* [Magento View Model]({{page.baseurl}}/extension-dev-guide/view-models.html)
+* [Extensibility]({{page.baseurl}}/architecture/extensibility.html)
+* [Modularity]({{page.baseurl}}/architecture/extensibility.html#modularity)
+* [Event-driven architecture]({{page.baseurl}}/extension-dev-guide/events-and-observers.html)
+* [Security]({{page.baseurl}}/architecture/security_intro.html)
+
+{:.ref-header}
+Related topics
+
+[Architectural diagrams]({{page.baseurl}}/architecture/archi_perspectives/arch_diagrams.html)
+
+[Versioning]({{page.baseurl}}/extension-dev-guide/versioning/)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md b/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
deleted file mode 120000
index a049ac06cdf..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/ALayers_intro.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md b/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
new file mode 100644
index 00000000000..895b8d769da
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
@@ -0,0 +1,36 @@
+---
+group: architecture-guide
+title: Architectural layers overview
+menu_title: Architectural layers
+---
+
+## Magento as layered software
+
+At its highest level, Magento's product architecture consists of the core product code plus optional *modules*. These optional modules enhance or replace the basic product code.
+
+If you are substantially customizing the basic Magento product, [module](https://glossary.magento.com/module) development will be your central focus. Modules organize code that supports a particular task or feature. A module can include code to change the look-and-feel of your [storefront](https://glossary.magento.com/storefront) as well as its fundamental behavior.
+
+Your modules function with the core Magento product code, which is organized into layers. Understanding layered software pattern is essential for understanding basic Magento product organization.
+
+Layered software is a popular, widely discussed principle in software development. Many resources exist for this topic, but consider consulting Pattern-Oriented Software Architecture for a general discussion.
+
+## Advantages of layered application design
+
+Layered application design offers many advantages, but users of Magento will appreciate:
+
+* Stringent separation of business logic from presentation logic simplifies the customization process. For example, you can alter your storefront appearance without affecting any of the [backend](https://glossary.magento.com/backend) business logic.
+
+* Clear organization of code predictably points [extension](https://glossary.magento.com/extension) developers to code location.
+
+{:.ref-header}
+Related topics
+
+[Architectural diagrams]({{page.baseurl}}/architecture/archi_perspectives/arch_diagrams.html)
+
+[Presentation layer]({{page.baseurl}}/architecture/archi_perspectives/present_layer.html)
+
+[Service layer]({{page.baseurl}}/architecture/archi_perspectives/service_layer.html)
+
+[Domain layer]({{page.baseurl}}/architecture/archi_perspectives/domain_layer.html)
+
+[Persistence layer]({{page.baseurl}}/architecture/archi_perspectives/persist_layer.html)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md b/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
deleted file mode 120000
index ea447a28b0a..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/arch_diagrams.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md b/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
new file mode 100644
index 00000000000..05644e6e750
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
@@ -0,0 +1,21 @@
+---
+group: architecture-guide
+title: Architectural diagrams
+menu_title: Architectural diagrams
+---
+
+## Magento architecture from different perspectives {#m2arch-whatis-overview}
+
+Depending upon your role and purpose for learning more about Magento, there are several different ways to view the Magento architecture. For example, a developer who wants to create new modules or perhaps customize an existing [module](https://glossary.magento.com/module) will want to understand the architecture of a module itself, and how it fits into the larger view, with the Magento framework and other components. However, a merchant who wants to quickly build an online storefront wants to view the collection of components from a higher level, and understand the components that impact the look, feel, and user interaction components.
+
+## Architecture layers diagram {#archi-layers}
+
+The following diagram illustrates the components and shows the "layers" or tiers in Magento.
+
+
+
+{:.ref-header}
+Related topics
+
+- [Architecture layers overview]({{page.baseurl}}/architecture/archi_perspectives/ALayers_intro.html)
+- [Service Isolation](https://github.com/magento/architecture/blob/master/design-documents/service-isolation.md)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md b/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
deleted file mode 120000
index 5078c40bb8d..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../../v2.3/architecture/archi_perspectives/components/AComponents.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md b/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
new file mode 100644
index 00000000000..cd2e976ed2d
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
@@ -0,0 +1,20 @@
+---
+group: architecture-guide
+title: Magento Components
+menu_title: Components
+---
+
+## Magento components
+
+Magento has several core components that are used to build custom websites, applications, and integrated systems. When you change the appearance or behavior of your Magento store, you are inevitably changing one or more of these **core Magento components**, which include **modules**, **themes**, and **language packages**. Together, these core components determine much of server-side and [storefront](https://glossary.magento.com/storefront) (frontend) appearance and behavior.
+
+{:.bs-callout-tip}
+Throughout the Magento documentation set, we also use the term *component* in its generic sense to mean element or part. However, the term **Magento component** explicitly refers to either a module, theme, or [language package](https://glossary.magento.com/language-package).
+
+For more information about individual Magento components, see:
+
+* [Modules]({{page.baseurl}}/architecture/archi_perspectives/components/modules/mod_intro.html)
+
+* [Themes]({{page.baseurl}}/frontend-dev-guide/themes/theme-overview.html)
+
+* [Language packages]({{page.baseurl}}/frontend-dev-guide/translations/xlate.html#m2devgde-xlate-languagepack)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
deleted file mode 120000
index cd6e0b10fa5..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../v2.3/architecture/archi_perspectives/components/modules/mod_depend.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
new file mode 100644
index 00000000000..bb3c5872c02
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
@@ -0,0 +1,172 @@
+---
+group: architecture-guide
+title: Module dependencies
+menu_title: Module dependencies
+---
+
+## Overview {#m2devgde-moddep-intro}
+
+A *software dependency* identifies one software component's reliance on another for proper functioning. A core principle of Magento architecture is the **minimization of software dependencies**. Instead of being closely interrelated with other modules, modules are optimally designed to be *loosely coupled*. Loosely coupled modules require little or no knowledge of other modules to perform their tasks.
+
+Each Magento [module](https://glossary.magento.com/module) is responsible for a unique feature. In practice, this means that:
+
+* Several modules cannot be responsible for one feature.
+
+* One module cannot be responsible for several features.
+
+* Module dependencies on other modules must be declared explicitly. You must also declare any dependency upon other components (for example, a theme, language package, or library).
+
+* Removing or disabling a module does not result in disabling other modules.
+
+## Two types of dependencies {#m2devgde-moddep-declare-dep}
+
+There are two types of Magento [module](https://glossary.magento.com/module) dependencies: hard and soft.
+
+### Hard dependencies
+
+A module with a *hard dependency* on another module cannot function without the module it depends on. These modules:
+
+* Contain code that directly uses logic from another module, such as class constants, static methods, public class properties, interfaces, and traits.
+* Contain strings that include class names, method names, class constants, class properties, interfaces, and traits from another module.
+* Deserializes an object declared in another module.
+* Uses or modifies the database tables used by another module.
+
+The `require` section of `app/code///composer.json` file contains hard dependency definitions for the module. For example:
+
+```json
+ ...
+ "require": {
+ "magento/module-catalog": "103.0.*",
+ "magento/module-email": "101.0.*",
+ "magento/module-media-storage": "100.3.*",
+ "magento/module-store": "101.0.*",
+ "magento/module-theme": "101.0.*",
+ "magento/module-ui": "101.1.*",
+ "magento/module-variable": "100.3.*",
+ "magento/module-widget": "101.1.*",
+ "magento/module-authorization": "100.3.*"
+ }
+ ...
+```
+
+### Soft dependencies
+
+A module with a *soft dependency* on another module can function properly without the other module, even if it has a dependency on the other module. These modules:
+
+* Directly check another module's availability.
+* Extend another module's configuration.
+* Extend another module's [layout](https://glossary.magento.com/layout).
+
+The `suggest` section of `app/code///composer.json` file contains soft dependency definitions for the module. For example:
+
+```json
+ ...
+ "suggest": {
+ "magento/module-graph-ql": "*",
+ "magento/module-graph-ql-cache": "*",
+ "magento/module-store-graph-ql": "*"
+ }
+ ...
+```
+
+The `` node of `app/code///etc/module.xml` file also contains soft dependency definitions for the module. For example:
+
+```xml
+
+
+
+
+
+
+
+```
+
+{:.bs-callout-tip}
+If a module uses code from another module, it should declare the dependency explicitly.
+
+## Module install order
+
+Magento installs modules in the following order:
+
+1. The module serving as a dependency for another module
+1. The module dependent on it
+
+## Appropriate dependencies
+
+Although Magento architecture favors loosely coupled software components, modules can contain dependencies upon these software components:
+
+* other modules
+
+* [PHP](https://glossary.magento.com/php) extensions
+
+* libraries (either Magento Framework [library](https://glossary.magento.com/library) or third party libraries)
+
+{:.bs-callout-tip}
+Note: You can lose the historical information contained in a module if the module is removed or disabled. We recommend alternative storage of module information before you remove or disable a module.
+
+## Inappropriate dependencies {#m2devgde-moddep-inapp-dep}
+
+Avoid creating these dependencies:
+
+* Circular (both direct and indirect)
+* Undeclared
+* Incorrect
+
+## Dependencies between modules in different presentation layers {#m2devgde-moddep-diff-layer}
+
+You can build dependencies between the modules belonging to different layers.
+
+## Dependencies in the Framework layer {#m2devgde-moddep-frmwk-layer}
+
+A module belonging to the Magento Framework can be used in the application layer by an explicit dependency.
+
+{:.bs-callout-tip}
+In this case, using interfaces is preferable to using classes. You can build dependencies between classes in the Magento Framework even if they belong to different modules.
+
+## Dependencies in the application layer {#m2devgde-moddep-app-layer}
+
+A module belonging to the application layer cannot be used in the Magento Framework.
+
+You can build dependencies between classes in the application layer, but these classes must belong to the same module. Dependencies between the modules of the application layer should be built only by the [service contract](https://glossary.magento.com/service-contract) or the service provider interface (SPI).
+
+## Managing module dependencies
+
+At a high level, there are three main steps for managing module dependencies:
+
+1. Name and declare the module in the `module.xml` file.
+
+1. Declare any dependencies that the module has (whether on other modules or on a different component) in the module's `composer.json` file.
+
+1. (*Optional*) Define the desired load order of config files and `.css` files in the `module.xml` file.
+
+Example: Module A declares a dependency upon Module B. Thus, in Module A's `module.xml` file, Module B is listed in the `` list, so that B's files are loaded before A's. Additionally, you must declare a dependency upon Module B in A's `composer.json` file. Furthermore, in the [deployment configuration]({{page.baseurl}}/config-guide/config/config-php.html), Modules A and B must both be defined as enabled.
+
+`etc/module.xml`
+
+```xml
+
+
+
+
+
+
+
+```
+
+After installing the module and opening `app/etc/config.php`, you are able to see that the Module_B was loaded before Module_A:
+
+```php
+return [
+ 'modules' => [
+ ...
+ 'Module_B' => 1,
+ 'Module_A' => 1,
+ ...
+ ]
+];
+```
+
+{:.ref-header}
+Related topics
+
+[Module overview]({{page.baseurl}}/architecture/archi_perspectives/components/modules/mod_intro.html)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
deleted file mode 120000
index fce4636fa1b..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../v2.3/architecture/archi_perspectives/components/modules/mod_relationships.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
new file mode 100644
index 00000000000..42d3d12491d
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
@@ -0,0 +1,52 @@
+---
+group: architecture-guide
+title: Module relationships
+menu_title: Module relationships
+---
+
+## Overview {#m2arch-module-relationships-overview}
+
+Understanding how one [module](https://glossary.magento.com/module) relates to another helps determine how it reacts to changes in that module.
+
+A single module can have the following types of relationships with another module:
+
+* **uses**: module A uses module B if it invokes behavior of module B
+
+* **reacts to**: module A reacts to module B if its behavior is triggered by an [event](https://glossary.magento.com/event) in module B without module B knowing about module A
+
+* **customizes**: module A customizes module B if it modifies the behavior of module B
+
+* **implements**: module A implements module B if it implements some, not necessarily all, behavior that is defined in module B
+
+* **replaces**: module A replaces module B if it provides its own version of the [API](https://glossary.magento.com/api) exposed and implemented by module B
+
+## Relationship types and scenarios
+
+### A uses B, C customizes B
+
+In a scenario where module A uses module B and module C customizes module B, the customizations in module C must not break the API of module B so that module A still functions properly in the face of these customizations.
+
+
+
+### A reacts to B, C customizes B
+
+Similarly, in a case where module A reacts to module B and module C customizes module B, the customizations in module C must not interfere with the events in module B that module A depends on.
+
+
+
+### A and C customize B
+
+If both module A and C customize module B, be careful about how these customizations are implemented so that you avoid conflicts (see below).
+
+
+
+### A replaces B
+
+If module A replaces module B, it needs to be able to do so in such a way that other modules are not affected. That will mean not having direct hard dependencies on module B, but rather dependencies on a third module, module C, that both module A and B implement.
+
+
+
+{:.ref-header}
+Related topics
+
+[Module overview]({{page.baseurl}}/architecture/archi_perspectives/components/modules/mod_intro.html)
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md b/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
deleted file mode 120000
index f1079abe29f..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/domain_layer.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md b/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
new file mode 100644
index 00000000000..9f0aead80d0
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
@@ -0,0 +1,45 @@
+---
+group: architecture-guide
+title: Domain layer
+menu_title: Domain layer
+---
+
+## The Magento Domain layer
+
+The domain layer holds the business logic layer of a Magento [module](https://glossary.magento.com/module). It typically does not contain resource-specific or database-specific information. Its primary functions include:
+
+* Defining the generic Magento data objects, or models, that contain business logic. This logic defines which operations can be performed on particular types of data, such as a Customer object. These models contain generic information only. Applications can also use SOAP or RESTful endpoints to request data from models.
+
+* (Optionally) Including the implementation of service contracts, although not their definition.
+
+{:.bs-callout-tip}
+**Best practice:** Use service contracts to communicate with the domain layer by passing data types through strongly typed objects. This helps you avoid the need to replace presentation layer code when replacing business layer logic.
+
+## Models
+
+Each domain-layer model contains a reference to a resource model, which it uses to retrieve data from the database with MySql calls. This resource model contains logic for connecting to the underlying database, typically MySQL. A model requires a resource model only if the model data must persist.
+
+## Accessing the domain layer
+
+There are three primary ways of accessing a module's domain-layer code:
+
+* Service contracts are the recommended way for one module to access another module's domain-level code. This loosely coupled solution is the optimal way for most modules to access another module.
+
+* A module can directly call into another module. This tightly coupled solution is not recommended for most situations, but is sometimes unavoidable.
+
+* Domain layer code in one module can also plug itself into another module by:
+
+ * event hooks
+
+ * plugins
+
+ * `di.xml` files (with an SPI contract)
+
+Your strategy for calling another module's domain-layer code is highly dependent upon the unique configuration and needs of your system.
+
+{:.ref-header}
+Related topics
+
+[Architectural diagrams]({{page.baseurl}}/architecture/archi_perspectives/arch_diagrams.html)
+
+[Architectural layers overview]({{page.baseurl}}/architecture/archi_perspectives/ALayers_intro.html)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/framework.md b/src/guides/v2.4/architecture/archi_perspectives/framework.md
deleted file mode 120000
index baddb037c3d..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/framework.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/framework.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/framework.md b/src/guides/v2.4/architecture/archi_perspectives/framework.md
new file mode 100644
index 00000000000..4aa1bd994a1
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/framework.md
@@ -0,0 +1,84 @@
+---
+group: architecture-guide
+title: Commerce and Magento Framework
+---
+
+## Overview
+
+The Magento Framework controls how application components interact, including request flow, routing, indexing, caching, and [exception](https://glossary.magento.com/exception) handling. It provides services that reduce the effort of creating modules that contain business logic, contributing to the goal of both making Magento code more modular as well as decreasing dependencies.
+
+This primarily [PHP](https://glossary.magento.com/php) software component is organized into logical groups called *libraries*, which all modules can call. Most of the framework code sits under the domain layer or encloses the presentation, service, and domain layers. The framework contains no business logic.
+(Although the Magento Framework does not contain resource models, it does contain a [library](https://glossary.magento.com/library) of code to help implement a resource model.)
+
+{:.bs-callout-tip}
+Don't confuse the Magento Framework with the Zend web application framework that ships with Magento.
+
+You should never modify Framework files, although if you are extending Magento, you must know how to call Framework libraries. Modules you create will typically inherit from classes and interfaces defined in the Framework directories.
+
+## Responsibilities
+
+The Magento Framework provides libraries that help reduce the effort of creating modules that contain business logic.
+
+The Framework is responsible for operations that are useful for potentially all modules, including:
+
+* handling HTTP protocols
+
+* interacting with the database and filesystem
+
+* rendering content
+
+## Organization
+
+Here is the Magento Framework folder structure:
+
+```tree
+vendor/
+ ../magento
+ ../framework
+lib/
+ ../internal
+ ../LinLibertineFont
+ ../web
+```
+
+* `/vendor/magento/framework` contains only PHP code. These are libraries of code plus the application entry point that routes requests to modules (that in turn call the Framework libraries). For example, libraries in the Framework help implement a resource model (base classes and interfaces to inherit from) but not the resource models themselves. Certain libraries also support [CSS](https://glossary.magento.com/css) rendering.
+
+* `/lib/internal` contains some non-PHP as well as PHP components. Non-PHP framework libraries includes [JavaScript](https://glossary.magento.com/javascript) and LESS/CSS.
+
+* `/lib/web` contains JavaScript and CSS/LESS files. These files reside under `web` and not `internal` because they are accessible from a web browser, while the PHP code under `internal` is not. (Any code that a web browser must access should be under `web`, while everything else under `internal`.)
+
+{:.bs-callout-tip}
+The `vendor/magento/framework` directory maps to the `Magento\Framework` [namespace](https://glossary.magento.com/namespace).
+
+## Highlights of Magento Framework
+
+The Magento Framework (`lib/internal/Magento/Framework/`) provides a robust range of functionality. If you are an [extension](https://glossary.magento.com/extension) developer, you may be interested in this subset of Framework namespaces.
+
+|Namespace|Purpose|
+|--- |--- |
+|`Magento\Framework\DataObject`|Provides standard functionality for storing and retrieving data through magic methods. This is the base class for many Magento classes.|
+|`Magento\Framework\Model`|Contains base Model classes that almost all Magento Model classes extend from.|
+|`Magento\Framework\Model\AbstractModel`||
+|`Magento\Framework\Model\ResourceModel\AbstractResource`||
+|`Magento\Framework\Controller`|Contains classes to help return different types of results (for example, JSON and redirects).|
+|`Magento\Framework\View`|Contains code to render pages and layouts.|
+|`Magento\Framework\Data`|Contains additional classes that handle forms.|
+|`Magento\Framework\Url`|Contains code to look up other pages in Magento.|
+{:style="table-layout:auto"}
+
+Other namespaces under `Magento\Framework` that will interest extension developers:
+
+|Namespace|Purpose|
+|--- |--- |
+|`Magento\Framework\ObjectManager`|Used to provide dependency injection.|
+|`Magento\Framework\App`|Contains framework code that has knowledge about the Magento application. This code bootstraps the application and reads in the initial configuration. It also contains the entry point to the command line tools, the web application, and the cron job. And finally, it routes requests while providing the deployment context (such as reading in the configuration for the database configuration, languages, and caching systems).|
+|`Magento\Framework\Api`|Contains base classes for advanced functionality of extendable objects through the system (that is, objects that can be extended to add new data through Commerce Marketplace extensions).|
+|`Magento\Framework\Config`|Contains the generic configuration reader. Each config file has its own specialized reader extending these classes.|
+|`Magento\Framework\Filesystem`|Contains classes that handle reading from and writing to the file system.|
+|`Magento\Framework\HTTP\PhpEnvironment`||
+|`Magento\Framework\Session`||
+|`Magento\Framework\Stdlib\Cookie`|Code to handle the HTTP request/responses as well as session/cookies is found here.|
+|`Magento\Framework\Exception`|Contains the basic exceptions that are thrown throughout the Magento codebase.|
+|`Magento\Framework\Event`|Contains the code that publishes synchronous events and that handles observers for any Magento event is handled here.|
+|`Magento\Framework\Validator`|Contains the code that validates data (currencies, not empty) and that handles observers for any Magento event.|
+{:style="table-layout:auto"}
diff --git a/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md b/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
deleted file mode 120000
index 947d0da76b7..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/persist_layer.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md b/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
new file mode 100644
index 00000000000..b8d04c610cc
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
@@ -0,0 +1,38 @@
+---
+group: architecture-guide
+title: Persistence layer
+---
+
+Magento uses an active record pattern strategy for persistence. In this system, the model object contains a *resource model* that maps an object to one or more database rows. A resource model is responsible for performing functions such as:
+
+* Executing all CRUD (create, read, update, delete) requests. The resource model contains the SQL code for completing these requests.
+
+* Performing additional business logic. For example, a resource model could perform data validation, start processes before or after data is saved, or perform other database operations.
+
+If you expect to return multiple items from a database query, then you would implement a special type of resource model known as a *collection*. A collection is a class that loads multiple models into an array-like structure based on a set of rules. This is similar to a SQL `WHERE` clause.
+
+A simple resource model defines and interacts with a single table.
+
+However, some objects have a vast number of attributes, or they could have a set related objects that have varying numbers of attributes. In these cases, the objects are constructed using **Entity-Attribute-Value (EAV)** models.
+
+Any model that uses an EAV resource has its attributes spread out over a number of MySQL tables.
+
+The `Customer`, `Catalog` and `Order` resource models use EAV attributes.
+
+## XML Declarative schema
+
+With Magento 2.3, we introduced Declarative XML Schemas.
+These are XML files that are used to specify the final state of the database.
+These files replace PHP update scripts that were required when upgrading a module.
+These files allow you to skip the progressive upgrade scripts and jump right to the final state of the database.
+
+Read more about writing [declarative XML schemas][].
+
+{:.ref-header}
+Related topics
+
+[Architectural diagrams]({{page.baseurl}}/architecture/archi_perspectives/arch_diagrams.html)
+[Architectural layers overview]({{page.baseurl}}/architecture/archi_perspectives/ALayers_intro.html)
+
+
+[declarative XML schemas]: {{ page.baseurl }}/extension-dev-guide/declarative-schema/db-schema.html
diff --git a/src/guides/v2.4/architecture/archi_perspectives/present_layer.md b/src/guides/v2.4/architecture/archi_perspectives/present_layer.md
deleted file mode 120000
index cba0f2be7a3..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/present_layer.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/present_layer.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/present_layer.md b/src/guides/v2.4/architecture/archi_perspectives/present_layer.md
new file mode 100644
index 00000000000..d41a6fac09a
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/present_layer.md
@@ -0,0 +1,84 @@
+---
+group: architecture-guide
+title: Presentation Layer
+---
+
+## What is the Magento Presentation layer?
+
+When you interact with the Magento web interface, you are interacting with *presentation layer* code. The presentation layer is the top layer of the four layers (presentation, service, domain, and persistence layers) described by the Magento architecture.
+
+The presentation layer contains both view elements **(layouts, blocks, templates)** and **controllers**, which process commands to and from the user interface. Presentation code controls web user interaction with the product and its appearance. You can extensively customize the user interface by using HTML, CSS, and [PHTML](https://glossary.magento.com/phtml) files to modify elements of the presentation layer. Basically, the presentation layer represents the customization of HTML, CSS, JavaScript, Magento UI, PHTML files, and block files.
+
+## Who uses the Presentation layer?
+
+Magento uses *areas* to efficiently make web service calls, loading only the dependent code that is required for the particular type of user. Three types of Magento users interact with presentation layer code:
+
+* **Web users** interact with the storefront, where they can see the View model of data displayed by Magento and interact with product UI elements to request data for view and manipulation. These users work within the `frontend` area.
+
+* **System administrators** customizing a [storefront](https://glossary.magento.com/storefront) can indirectly manipulate the presentation layer by, for example, adding themes or widgets to the frontend.
+
+* **Web [API](https://glossary.magento.com/api) calls** can be made through HTTP just like browser requests, and can be made via AJAX calls from the user interface.
+
+## Presentation layer components
+
+One helpful way of understanding the Magento presentation layer components is by examining Magento *themes*.
+Magento themes organize both the visual aspect of your storefront and certain aspects of product behavior.
+
+Each [theme](https://glossary.magento.com/theme) resides in a unique directory and contains custom page layouts, templates, skins, and language files that work together to create a distinct user experience.
+
+For an extensive introduction to theme elements and an overview of how to extend and override the default Magento themes, see the [Frontend Developer Guide][].
+
+## GraphQL
+
+GraphQL is a data query language developed internally by Facebook in 2012 before being publicly released in 2015. Magento implements GraphQL to provide an alternative to REST and SOAP web APIs for frontend development.
+
+GraphQL allows you to define the structure of the data that you need, and the server returns only the data you request. Each GraphQL-capable module contains a declarative schema that defines the syntax for queries that the module supports, as well as the attributes that can be returned. If you run a REST call such as GET /V1/products/:sku on a simple product, the system might fetch more than 100 lines of data. If all you need is the current price, the call has returned significantly more information than you need. With GraphQL, a query against the same SKU could return just the price.
+
+More information can be found in the [GraphQL Developer Guide][].
+
+## Progressive Web Apps
+
+The Magento Progressive Web App (PWA) Studio project is a set of developer tools that allow you to develop, deploy, and maintain a PWA storefront on top of Magento 2.
+PWA is a way to present a Magento storefront via a set of React JavaScript components.
+Using Magento as a headless backend, you can use PWA components to create mobile friendly frontend.
+
+You can read more about how PWA works with Magento in the [PWA Studio docs][].
+
+## View model
+
+Magento generates the [HTML](https://glossary.magento.com/html) for a page to display to a user from a tree of view elements.
+
+View elements fall into two main categories: blocks and containers.
+
+* **Blocks** can generate [dynamic content](https://glossary.magento.com/dynamic-content) and can contain named child view elements that are similar to arguments being passed in. (The `as` attribute holds the child view element names for the parent block to reference them)
+
+* **Containers** collect an ordered group of children view elements.
+
+The browser forms a product web page by asking the view element tree to render itself into HTML.
+Containers and blocks emit HTML that encloses their children appropriately.
+Blocks can generate their content using static HTML, Knockout JS scripts, and PHTML.
+
+## How Presentation code calls other layers
+
+Presentation code typically calls service contracts, particularly for a storefront.
+However, presentation code is occasionally dependent on a specific implementation that requires the presentation code to directly call the domain layer.
+For example, the [Admin](https://glossary.magento.com/admin) UI screens are often tightly linked to a specific implementation and are not generic across implementations.
+
+The View layer calls code from the Model to get information about the state of the application (for example, the price of a product). Typically, the way it accesses the Model is through service contracts.
+
+## Presentation layer flow
+
+Web users interact with components of the presentation layer to select actions that initiate calls to the underlying layers.
+Presentation layer components make calls to the service layer, which in turn sends requests to the [domain](https://glossary.magento.com/domain) layer.
+
+{:.ref-header}
+Related topics
+
+[Architectural diagrams]({{page.baseurl}}/architecture/archi_perspectives/arch_diagrams.html)
+
+[Architectural layers overview]({{page.baseurl}}/architecture/archi_perspectives/ALayers_intro.html)
+
+
+[Frontend Developer Guide]: {{page.baseurl}}/frontend-dev-guide/bk-frontend-dev-guide.html
+[GraphQL Developer Guide]: {{ page.baseurl }}/graphql/
+[PWA Studio docs]: http://pwastudio.io
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/service_layer.md b/src/guides/v2.4/architecture/archi_perspectives/service_layer.md
deleted file mode 120000
index 74092f85a4e..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/service_layer.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/service_layer.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/service_layer.md b/src/guides/v2.4/architecture/archi_perspectives/service_layer.md
new file mode 100644
index 00000000000..c4d567a11d9
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/service_layer.md
@@ -0,0 +1,80 @@
+---
+group: architecture-guide
+title: Service layer
+menu_title: Service layer
+---
+
+## What is a Service layer?
+
+The service layer provides a bridge between the presentation layer and the domain layer and resource-specific data.
+This is implemented using *service contracts*, which are defined using [PHP](https://glossary.magento.com/php) interfaces.
+
+In general, the service layer:
+
+* Resides below the presentation layer and above the domain layer.
+
+* Contains service contracts, which define how the implementation will behave.
+
+* Provides an easy way to access the REST/SOAP [API](https://glossary.magento.com/api) framework code (which also resides above the service contracts). You can bind service contracts to web service APIs in configuration files --- no coding required.
+
+* Provides a stable API for other modules to call into.
+
+## Who accesses the service layer?
+
+All calls from web service interfaces, or users working with your [storefront](https://glossary.magento.com/storefront) (that is, controller-initiated requests), are typically routed through the service layer.
+We strongly encourage the use of service contracts to call business logic.
+
+External applications can make requests for business logic with simple SOAP and REST calls.
+With some simple [XML](https://glossary.magento.com/xml) or JSON, you can expose the service layer's PHP API and make it accessible to REST or SOAP web services.
+Once implemented, a web service can make a single API call and return an information-rich data structure.
+
+[Service contract](https://glossary.magento.com/service-contract) clients include:
+
+* Controllers (initiated by actions of users of the storefront)
+
+* Web services (SOAP and REST API calls)
+
+* Other Magento modules through service contracts
+
+## Service contract anatomy
+
+The service contract of a [module](https://glossary.magento.com/module) is defined by the set of interfaces in the module's `/Api` directory.
+
+This directory contains:
+
+* Service interfaces in the `/Api` [namespace](https://glossary.magento.com/namespace) of the module ([Catalog API][catalog-api]).
+
+* Data (or *entity*) interfaces in the `Api/Data` directory ([Catalog API/Data][catalog-api-data]).
+ Data entities* are data structures passed to and returned from service interfaces.
+
+ Files in the data directory contain `get()` and `set()` methods for entries in the entity table and extension attributes.
+
+Typically, service contracts provide three distinct types of interfaces:
+
+* Repository interfaces
+
+* Management interfaces
+
+* [Metadata](https://glossary.magento.com/metadata) interfaces
+
+However, there is no requirement that service contracts conform to all three patterns.
+
+## Advantages of service contracts
+
+Service contracts allow you to add a new customer [extension](https://glossary.magento.com/extension) that adds or changes business logic-level resource models without breaking the system.
+
+This is done using the *<preference>* element in a custom module's [dependency injection](https://glossary.magento.com/dependency-injection) configuration file (`di.xml`) file.
+
+The `di.xml` file specifies which PHP class to use for the interface `Magento\Customer\Api\CustomerRepositoryInterface`.
+
+Another module can change this interface file by specifying a different class name.
+However, if the client code uses the interface definition only, no class change is necessary.
+
+{:.ref-header}
+Related topics
+
+* [Architectural diagrams]({{page.baseurl}}/architecture/archi_perspectives/arch_diagrams.html)
+* [Architectural layers overview]({{page.baseurl}}/architecture/archi_perspectives/ALayers_intro.html)
+
+[catalog-api]: {{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Catalog/Api
+[catalog-api-data]: {{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Catalog/Api/Data
diff --git a/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md b/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
deleted file mode 120000
index fa8e268adb5..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/tech-vision.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md b/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
new file mode 100644
index 00000000000..f437a525776
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
@@ -0,0 +1,15 @@
+---
+group: architecture-guide
+title: Magento technical vision
+---
+
+The Magento technical vision is a collection of documents that describe the desired state of the Magento platform.
+
+Each individual technical vision document relates to a set of modules that are logically grouped together. Individual documents typically describe a component's place in the system, its architecture, extension scenarios and a list of invariants that must be preserved at all times during component refactoring or extension to ensure consistency.
+
+Learn more about the [Magento web API][].
+See the [Magento Coding Standards][] for information about writing clean, readable code.
+
+
+[Magento web API]: {{page.baseurl}}/get-started/bk-get-started-api.html
+[Magento Coding Standards]: {{page.baseurl}}/coding-standards/bk-coding-standards.html
diff --git a/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md b/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
deleted file mode 120000
index f854128a54f..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/third-party-libs.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md b/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
new file mode 100644
index 00000000000..707e98374bf
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
@@ -0,0 +1,11 @@
+---
+group: architecture-guide
+title: Third-party libraries
+menu_title: Third-party libraries
+---
+
+Magento depends on a set of external libraries. You can use [Composer](https://glossary.magento.com/composer) to manage these dependencies. Composer downloads all of the external libraries that are included in its main configuration file and installs them under its default installation directory (`vendor/`). Third-party libraries include the Zend framework files and the Symfony libraries.
+
+There are some required libraries that Composer does not load. These reside in `lib/` and include [JavaScript](https://glossary.magento.com/javascript) libraries (none of which are loaded by Composer) and a few [PHP](https://glossary.magento.com/php) libraries. (You can also use Composer to manage dependencies between various components within Magento.)
+
+If you are extending your Magento [storefront](https://glossary.magento.com/storefront) to interact with third-party applications, you might need to include additional external libraries. These external libraries can be as simple as a wrapper for an [API](https://glossary.magento.com/api) of a third-party product you are integrating with your Magento storefront, or an entire framework.
diff --git a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
deleted file mode 120000
index 46493f2a1c3..00000000000
--- a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../v2.3/architecture/archi_perspectives/webapi-vision.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
new file mode 100644
index 00000000000..880783f56c6
--- /dev/null
+++ b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
@@ -0,0 +1,116 @@
+---
+group: architecture-guide
+---
+
+# Technical vision - Web API
+
+Web API is crucial for Magento because of the need to integrate with order management, customer management, and other enterprise management software systems.
+
+There are many headless Magento installations in which a merchant partially uses Magento functionality, while the other pieces of an eCommerce website are provided by other systems.
+
+See [more details](https://en.wikipedia.org/wiki/Web_API) about the importance of web APIs in modern web applications.
+
+## Components Dependencies
+
+The following diagram shows Web API component dependencies.
+
+
+
+## High-level Architecture
+
+The following image provides an overview of how Web API requests are processed.
+
+
+
+## Extension Scenarios
+
+### Declare a new REST and SOAP endpoint
+
+Any [service contract]({{ page.baseurl }}/extension-dev-guide/service-contracts/service-contracts.html) can be [exposed as REST and SOAP]({{ page.baseurl }}/extension-dev-guide/service-contracts/service-to-web-service.html) endpoints via configuration in a module's `webapi.xml` file.
+
+### Declare a new GraphQL query/mutation
+
+1. Create custom resolvers.
+1. Declare a custom query/mutation and all necessary types in `schema.graphqls`.
+
+If the target module is called `MyModule`, then create the resolvers and configuration files in a new module called `MyModuleGraphQl`.
+
+See the [GraphQL documentation]({{ page.baseurl }}/graphql/index.html) for more information.
+
+### Add a custom authentication mechanism
+
+1. Provide a custom implementation of `\Magento\Authorization\Model\UserContextInterface` that verifies a user's identity using a custom authentication mechanism.
+1. Declare custom user context in the composite user context for the target area(s) (`webapi_rest`, `webapi_soap`, `webapi_graphql`) :
+
+```xml
+
+
+
+ -
+
- Vendor\Module\Model\Authentication\CustomUserContext
+ - 100
+
+
+
+
+```
+
+### Modify the schema of an existing SOAP and REST endpoint
+
+The recommended approach for modifying an interface is to define a new endpoint. If you simply modify the schema, you might break existing integrations or extensions.
+
+To extend an interface, use [extension attributes]({{ page.baseurl }}/extension-dev-guide/attributes.html).
+
+### Modify the schema of an existing GraphQL query
+
+1. Add a `schema.graphqls` file to the `GraphQl` module. Magento merges this file with configurations from other modules using the same merge rules as other types of configuration.
+
+1. Write any necessary plugins for existing resolvers related to the query, or create a custom resolver and enable it via override in `schema.graphqls`
+
+## Model Consistency Constraints
+
+Any new design related to Web API must satisfy the following constraints to keep the model consistency.
+
+### General
+
+1. REST and SOAP must be designed for Admin Panel integrations and be equal in terms of coverage. GraphQL should be designed for storefront scenarios.
+1. Any identifier exposed in guest APIs (for example, cart ID) must be masked to prevent the possibility of unauthorized access to the data of other guest users.
+1. Authentication must be done via `\Magento\Authorization\Model\UserContextInterface`.
+1. Customer-specific identifiers (such as customer ID or cart ID) must be deducted from the record of the successfully authenticated customer. They must not be accepted via request parameters.
+1. All new web API endpoints must be covered with web API functional tests.
+ * For REST and SOAP, by default, the same test will be executed in the scope of different continuous integration jobs. The base class for REST and SOAP tests is `\Magento\TestFramework\TestCase\WebapiAbstract`
+ * The base class for GraphQL tests is: `\Magento\TestFramework\TestCase\GraphQlAbstract`
+1. Web API requests must be processed by custom front controllers with optimized routing to prevent the admin and storefront areas from executing routers.
+1. Web API schema should be strictly typed. (All complex types should eventually be resolved to scalar types.)
+1. Authentication parameters must be passed via headers.
+1. Throttling must be configured by the system integrator. It is not supported by Magento
+1. Internal server errors must be masked and never shown to the user in production mode. In developer mode, original exceptions must never be masked and should be displayed along with the related stacktrace.
+1. Pagination must be supported by all list operations.
+
+### GraphQL
+
+1. Unlimited nesting should be supported during requests for related entities. (For example, get Order => Order Items => Products => Related Products)
+1. Field filtration must be performed with SQL queries. Do not filter on the application layer after you've fetched all possible fields.
+1. Third-party customizations must be done separately for Service Contracts and for GraphQL
+1. For modularity purposes, GraphQL configuration must be declared in a separate module. For example, to expose GraphQL for the module `MyModule`, you must create the `schema.graphqls` file in the `MyModuleGraphQl` module.
+1. GraphQL is primarily designed for store-front, one-page apps and mobile applications. It supports token and cookie authentication, as well as guest access to public queries
+1. All queries must return the 200 HTTP status code. If an error occurs, return the error in the response body. A 500 status code is allowed when an exception occurs when generating a schema, but not during requests.
+1. The Store code should be passed via headers.
+
+### REST
+
+1. The resource URL should be versioned (for example: V1). The version must be specified in the following format: `V\d.+`
+1. Resource names in a URL should be in plural form (for example: products, carts)
+1. ID parameters for operations on entities should be part of the resource URL (for example: /V1/products/**:sku** )
+1. POST should be used to create an entity.
+ PUT should be used to update an entity.
+ PATCH should be used to patch (update only selected fields) an update to an entity or entities.
+1. REST is designed for system integrations, mobile app integrations, as well as for one-page apps. It supports tokens, cookies, and OAuth 1.0 with token exchange. It also supports guest access to public resources.
+1. Responses must return responses with standard [HTTP status codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes).
+1. The store code must be passed with a URL. For example `GET /rest/frenchStoreView/V1/products`. Persistence operations that should be performed for all stores at once should have 'all' store code in the URL.
+
+### SOAP
+
+1. SOAP is designed for systems integration. It supports token authentication for customers and admins, as well as no authentication for anonymous service methods. Cookie authentication and OAuth 1.0 are not supported.
+1. The schema is available in the form of a WSDL for all exposed services.
+1. All requests must return the 200 HTTP status code. If an error occurs, return the error in the response.
diff --git a/src/guides/v2.4/architecture/bk-architecture.md b/src/guides/v2.4/architecture/bk-architecture.md
deleted file mode 120000
index 98958620ab6..00000000000
--- a/src/guides/v2.4/architecture/bk-architecture.md
+++ /dev/null
@@ -1 +0,0 @@
-../../v2.3/architecture/bk-architecture.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/bk-architecture.md b/src/guides/v2.4/architecture/bk-architecture.md
new file mode 100644
index 00000000000..ebe4eb09bbd
--- /dev/null
+++ b/src/guides/v2.4/architecture/bk-architecture.md
@@ -0,0 +1,13 @@
+---
+group: architecture-guide
+title: Architecture Guide
+landing-page: Architecture
+menu_title: Get Started
+menu_node: parent
+---
+
+The Architecture Guide provides a high-level introduction and view of the Magento product.
+
+The Magento platform and components are explained from the perspective of several audiences: merchants, web store developers (frontend developers), [extension](https://glossary.magento.com/extension) developers, system admins, installers, and integrators.
+
+More detailed information about building online stores, using the Magento APIs, installing, configuring, and extending the platform is included in other books in our [Magento library]({{site.baseurl}}/index.html).
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/extensibility.md b/src/guides/v2.4/architecture/extensibility.md
deleted file mode 120000
index bc859dbdb87..00000000000
--- a/src/guides/v2.4/architecture/extensibility.md
+++ /dev/null
@@ -1 +0,0 @@
-../../v2.3/architecture/extensibility.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/extensibility.md b/src/guides/v2.4/architecture/extensibility.md
new file mode 100644
index 00000000000..9d0f95ec09f
--- /dev/null
+++ b/src/guides/v2.4/architecture/extensibility.md
@@ -0,0 +1,116 @@
+---
+group: architecture-guide
+title: Extensibility and modularity
+menu_title: Extensibility and modularity
+---
+
+## Overview
+
+Product *extensibility* describes how easy it is to expand a product's feature set. An extensible product has been designed from its earliest stages for customization and enhancement. Extensible products are designed for ease in expanding your installation's feature set, enriching current features, and integrating with third-party software.
+
+Maximizing extensibility has been our goal through all aspects of Magento development. Core tasks such as shipping are packaged as discrete modules, and you expand your features by installing modules that you either buy from third-party vendors or create yourself. While logic specific to each [shipping carrier](https://glossary.magento.com/shipping-carrier) is packaged in a discrete module, you can easily add or delete shipping providers by simply adding or deleting modules. The Magento Framework provides common logic to control routing and other core application functions.
+
+## What makes a product extensible?
+
+*Magento extensibility* describes the product's built-in ability for developers and merchants to routinely extend their storefront's capabilities as their business grows.
+
+The following factors significantly affect extensibility.
+
+### Architectural principles that guide product structure
+
+Central to the Magento model of software development is the practice of replacing or extending core code rather than editing it. This strategy supports your efforts to maintain the integrity of the tested code we provide while still extensively customizing your [storefront](https://glossary.magento.com/storefront).
+
+### Reliance on popular design patterns
+
+Reliance on known architectural and programming structures helps [PHP](https://glossary.magento.com/php) developers orient themselves to the specific development issues that affect coding in a particular product ecosystem. This can reduce the learning curve for new Magento developers.
+
+Design patterns are time-tested, widely recognized software architecture constructs. Magento product architecture incorporates many well known patterns, but Model-View-Controller (MVC) holds particular interest for extension developers.
+
+### Modularity
+
+The concept of the *module* is the heart of Magento [extension](https://glossary.magento.com/extension) development, and modular design of software components (in particular, modules, themes, and language packages) is a core architectural principle of the product. Self-contained modules of discrete code are organized by feature, thereby reducing each module's external dependencies.
+
+If a [module](https://glossary.magento.com/module) is self-contained, then you can modify or replace it without affecting other areas of the code. This *loose coupling* of software components reduces the ripple effects throughout your code base of changing code.
+
+ See the [PHP Developer Guide][] for detailed instructions on how to create modules.
+
+### Rich product ecosystem
+
+The wider Magento ecosystem provides an extensive community and rich third-party marketplace for extensions. Visit [Commerce Marketplace][] for an overview of the many modules and themes available for download and to buy modules and [theme](https://glossary.magento.com/theme) packages, which offer more possibilities for extending your [storefront](https://glossary.magento.com/storefront).
+
+### Open-source software to create and manage extensions
+
+Magento is built on open-source technologies, created for the development community. For example, it uses [Composer](https://glossary.magento.com/composer) to manage dependencies. See [Technology Stack]({{page.baseurl}}/install-gde/system-requirements.html) for a complete list of technologies used.
+
+### Coding standards
+
+Adherence to standard best practices for [PHP](https://glossary.magento.com/php) and [JavaScript](https://glossary.magento.com/javascript) code ensures that the code base is sound. Magento has adopted most of the PSR2 Coding Standards for PHP. See [Coding Standards]({{page.baseurl}}/coding-standards/bk-coding-standards.html) for more information.
+
+### Upgrade and versioning strategies
+
+Magento has well-defined upgrade and versioning strategies that can help you avoid any problems with software component dependencies. Add modules after confirming that the [module](https://glossary.magento.com/module) version is compatible with the Magento Framework version.
+
+### Web APIs
+
+Magento or third-party services can be configured as a web [API](https://glossary.magento.com/api) (REST or SOAP) with some simple [XML](https://glossary.magento.com/xml). You can use these services to integrate your Magento installation into third-party applications, such as CRM (Customer Relationship Management), ERP (Enterprise Resource Planning) back office systems, and [CMS](https://glossary.magento.com/cms) (Content Management Systems).
+
+See [Getting Started with Magento Web APIs][] for more information.
+
+### Flexible attribute types
+
+You can enhance your storefront by adding unique attributes to the default product attributes. For example, you might need to add a new attribute to describe a product, such as texture or an industry-specific rating. You can add these attributes from the Admin, and the storefront displays them.
+
+|Attribute type|Displayed by storefront?|
+|--- |--- |
+|EAV|no|
+|Custom|yes|
+|Extension|no|
+{:style="table-layout:auto"}
+
+Attribute types fall into three general categories:
+
+* **EAV (Entity-Attribute-Value) attributes** are site-specific attributes that you can define for a local site using the [Admin](https://glossary.magento.com/magento-admin).
+
+* **Custom attributes** are a subset of EAV attributes. Objects that use EAV attributes typically store values in several MySQL tables. The Customer and [Catalog](https://glossary.magento.com/catalog) modules use EAV attributes.
+
+* **Extension attributes** often use more [complex data](https://glossary.magento.com/complex-data) types than custom attributes. These attributes do not appear in the storefront. Extension attributes are introduced by modules.
+
+See [PHP Developer Guide][] for information about using attributes.
+
+### Service contracts, dependency injection, and dependency inversion
+
+*Service contracts* provide a new way to access public API endpoints. These PHP interfaces offer robust, stable extension points to which clients can connect. Service contracts define the endpoints that function as a module's public API. Defining these endpoints is an essential part of adding a module.
+
+Service contracts are discussed throughout the Magento documentation set. See [Service layer][] for a high-level introduction. See [PHP Developer Guide][] for a more detailed discussion of service contracts and dependency injection.
+
+Magento implements *dependency injection* along with service contracts. Dependency injection provides a mechanism for changing a module's behavior without altering the client or understanding nitty-gritty details of implementation. Both dependency injection and its related concept *dependency inversion* support Magento's fundamental architectural principles of modularity and ease-of-extensibility. They strongly encourage basic coding practices that support the loose coupling of software modules.
+
+See [PHP Developer Guide][] for information on both dependency injection and service contracts.
+
+### Plug-ins
+
+Plug-ins, like modules, are a mechanism for adding features to the core Magento product. Plug-ins enable you to make changes to the behavior of any public method in a Magento class. You can consider it a form of extension that uses the `Plugin` class.
+
+Plug-ins are also called *interceptors*. Applications use the [plug-in](https://glossary.magento.com/plug-in) pattern to change method behavior without modifying the actual class. Plug-ins can typically intercept method processing before or after the method runs, or only when the method throws an [exception](https://glossary.magento.com/exception).
+
+See [Plug-ins][] in [PHP Developer Guide][] for information on declaring and prioritizing plug-ins.
+
+{:.ref-header}
+Related topics
+
+[Architectural basics]({{page.baseurl}}/architecture/archi_perspectives/ABasics_intro.html)
+
+[Global features that support extensibility]({{page.baseurl}}/architecture/global_extensibility_features.html)
+
+[Ease of frontend customization]({{page.baseurl}}/architecture/frontend_custom_strategies.html)
+
+[Extensibility and modularity]({{page.baseurl}}/architecture/extensibility.html)
+
+
+[PHP Developer Guide]: {{page.baseurl}}/extension-dev-guide/bk-extension-dev-guide.html
+[Commerce Marketplace]: https://marketplace.magento.com/
+[Technology Stack]: {{page.baseurl}}/install-gde/system-requirements.html
+[Plug-ins]: {{page.baseurl}}/extension-dev-guide/plugins.html
+[Service layer]: {{page.baseurl}}/architecture/archi_perspectives/service_layer.html
+[Getting Started with Magento Web APIs]: {{page.baseurl}}/get-started/bk-get-started-api.html
+[Coding Standards]: {{page.baseurl}}/coding-standards/bk-coding-standards.html
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/global_extensibility_features.md b/src/guides/v2.4/architecture/global_extensibility_features.md
deleted file mode 120000
index 8eb835ce7b1..00000000000
--- a/src/guides/v2.4/architecture/global_extensibility_features.md
+++ /dev/null
@@ -1 +0,0 @@
-../../v2.3/architecture/global_extensibility_features.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/global_extensibility_features.md b/src/guides/v2.4/architecture/global_extensibility_features.md
new file mode 100644
index 00000000000..2b3aa3757f2
--- /dev/null
+++ b/src/guides/v2.4/architecture/global_extensibility_features.md
@@ -0,0 +1,94 @@
+---
+group: architecture-guide
+title: Global features that support extensibility
+---
+
+## Overview
+
+Essential qualities foster extensibility throughout the entire set of Magento components. This discussion focuses on:
+
+* Modularity
+* Reliance on popular design patterns
+* Coding standards
+* Flexible attribute types
+* Web APIs
+* Service contracts and [dependency injection](https://glossary.magento.com/dependency-injection)
+* Plug-ins
+* Declarative schema
+
+### Modularity
+
+The concept of the *module* is the heart of Magento [extension](https://glossary.magento.com/extension) development, and modular design of software components (in particular, modules, themes, and language packages) is a core architectural principle of the product. Self-contained modules of discrete code are organized by feature, thereby reducing each module's external dependencies.
+
+If a [module](https://glossary.magento.com/module) is self-contained, then you can modify or replace it without affecting other areas of the code. This *loose coupling* of software components reduces the ripple effects throughout your code base of changing code.
+
+ See the [PHP Developer Guide]({{ page.baseurl }}/extension-dev-guide/bk-extension-dev-guide.html) for detailed instructions on how to create modules.
+
+### Reliance on popular design patterns
+
+Reliance on known architectural and programming structures helps [PHP](https://glossary.magento.com/php) developers orient themselves to the specific development issues that affect coding in a particular product ecosystem. This can reduce the learning curve for new Magento developers.
+
+Design patterns are time-tested, widely recognized software architecture constructs. Magento product architecture incorporates many well known patterns, but Model-View-Controller (MVC) holds particular interest for extension developers.
+
+### Coding standards
+
+Magento developers should familiarize themselves with our coding standards, best practices, and conventions, especially standards for PHP file formatting, coding style, and file naming conventions. Magento standards are based on PSR2 Coding Standards.
+
+See [Coding Standards]({{page.baseurl}}/coding-standards/bk-coding-standards.html) for guidelines and requirements.
+
+### Rich product ecosystem
+
+The wider Magento ecosystem provides an extensive community and rich third-party marketplace for extensions. Visit [Commerce Marketplace](https://marketplace.magento.com/) for an overview of the many modules and themes available for download and to buy modules and [theme](https://glossary.magento.com/theme) packages, which offer more possibilities for extending your [storefront](https://glossary.magento.com/storefront).
+
+### Flexible attribute types
+
+You can enhance your storefront by adding unique attributes to the default product attributes. For example, you might need to add a new attribute to describe a product, such as texture or an industry-specific rating. You can add these attributes from the Admin, and the storefront displays them.
+
+Attribute type | Displayed by storefront?
+--- | ---
+EAV | No
+Custom | Yes
+Extension | No
+
+Attribute types fall into three general categories:
+
+* **EAV (Entity-Attribute-Value) attributes** are site-specific attributes that you can define for a local site using the [Admin](https://glossary.magento.com/magento-admin).
+
+* **Custom attributes** are a subset of EAV attributes. Objects that use EAV attributes typically store values in several MySQL tables. The Customer and [Catalog](https://glossary.magento.com/catalog) modules use EAV attributes.
+
+* **Extension attributes** often use more [complex data](https://glossary.magento.com/complex-data) types than custom attributes. These attributes do not appear in the storefront. Extension attributes are introduced by modules.
+
+See [PHP Developer Guide]({{page.baseurl}}/extension-dev-guide/bk-extension-dev-guide.html) for information about using attributes.
+
+### Web APIs
+
+Magento or third-party services can be configured as a web [API](https://glossary.magento.com/api) (REST or SOAP) with some simple [XML](https://glossary.magento.com/xml). You can use these services to integrate your Magento installation into third-party applications, such as CRM (Customer Relationship Management), ERP (Enterprise Resource Planning) back office systems, and [CMS](https://glossary.magento.com/cms) (Content Management Systems).
+
+See [Getting Started with Magento Web APIs]({{page.baseurl}}/get-started/bk-get-started-api.html) for more information.
+
+### Service contracts, dependency injection, and dependency inversion
+
+*Service contracts* provide a new way to access public API endpoints. These PHP interfaces offer robust, stable extension points to which clients can connect. Service contracts define the endpoints that function as a module's public API. Defining these endpoints is an essential part of adding a module.
+
+Service contracts are discussed throughout the Magento documentation set. See [Service layer]({{page.baseurl}}/architecture/archi_perspectives/service_layer.html) for a high-level introduction. See [PHP Developer Guide]({{page.baseurl}}/extension-dev-guide/bk-extension-dev-guide.html) for a more detailed discussion of service contracts and dependency injection.
+
+Magento implements *dependency injection* along with service contracts. Dependency injection provides a mechanism for changing a module's behavior without altering the client or understanding nitty-gritty details of implementation. Both dependency injection and its related concept *dependency inversion* support Magento's fundamental architectural principles of modularity and ease-of-extensibility. They strongly encourage basic coding practices that support the loose coupling of software modules.
+
+See [PHP Developer Guide]({{page.baseurl}}/extension-dev-guide/bk-extension-dev-guide.html) for information on both dependency injection and service contracts.
+
+### Plug-ins
+
+Plug-ins, like modules, are a mechanism for adding features to the core Magento product. Plug-ins enable you to make changes to the behavior of any public method in a Magento class. You can consider it a form of extension that uses the `Plugin` class.
+
+Plug-ins are also called *interceptors*. Applications use the [plug-in](https://glossary.magento.com/plug-in) pattern to change method behavior without modifying the actual class. Plug-ins can typically intercept method processing before or after the method runs, or only when the method throws an [exception](https://glossary.magento.com/exception).
+
+See [Plug-ins]({{page.baseurl}}/extension-dev-guide/plugins.html) in [PHP Developer Guide]({{page.baseurl}}/extension-dev-guide/bk-extension-dev-guide.html) for information on declaring and prioritizing plug-ins.
+
+### Declarative schema
+
+[Declarative schema]({{page.baseurl}}/extension-dev-guide/declarative-schema/index.html) allows developers to declare the final desired state of the database as it pertains to their modules. The system adjusts to database changes automatically without performing redundant operations. Developers are no longer forced to write installation and upgrade scripts for each new version. In addition, declarative schema allows data be deleted when a module is uninstalled.
+
+{:.ref-header}
+Related topic
+
+[Extensibility and modularity]({{page.baseurl}}/architecture/extensibility.html)
diff --git a/src/guides/v2.4/architecture/security_intro.md b/src/guides/v2.4/architecture/security_intro.md
deleted file mode 120000
index df56a02f61d..00000000000
--- a/src/guides/v2.4/architecture/security_intro.md
+++ /dev/null
@@ -1 +0,0 @@
-../../v2.3/architecture/security_intro.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/security_intro.md b/src/guides/v2.4/architecture/security_intro.md
new file mode 100644
index 00000000000..0d669b65de1
--- /dev/null
+++ b/src/guides/v2.4/architecture/security_intro.md
@@ -0,0 +1,48 @@
+---
+group: architecture-guide
+subgroup: Architectural Basics
+title: Security overview
+menu_title: Security
+menu_order:
+---
+
+The security of your data and digital experiences is our priority. To better protect {{site.data.var.ee}} and {{site.data.var.ce}} installations from the physical layer up, we have implemented hundreds of processes and controls to help us comply with [industry-accepted standards][1], regulations, and certifications. To help protect installations from the software layer down, we build in security measures that are based on the [Adobe Secure Product Lifecyle][2].
+
+Although there is no single way to eliminate all security risks, there are many steps you can take to harden your installations and make them a less attractive target for bad actors. The [Security Best Practices Guide][3] offers insight and practical guidelines to help protect all installations from security incidents.
+
+## Examples of built-in security measures
+
+### Enhanced password management
+
+Magento has strengthened the hashing algorithms (SHA-256) used in password management. Magento now supports Argon2ID13 through the PHP sodium extension, which requires the libsodium library version 1.0.13 or higher.
+
+### Improved prevention of cross-site scripting (XSS) attacks by making escaped data the default
+
+The Magento Framework has adopted conventions that regulate the escaping of data in output. These conventions include the ability to escape output for [HTML](https://glossary.magento.com/html) pages (HTML, JSON, and JavaScript) and email. Where possible, escaping is transparent to client code. See [Security measures against XSS attacks]({{page.baseurl}}/extension-dev-guide/xss-protection.html) in the [Frontend](https://glossary.magento.com/frontend) Developer Guide.
+
+### More flexible file system ownership and permissions
+
+Starting in version 2.0.6, Magento no longer explicitly sets file system permissions. Instead, we recommend that certain files and directories be writable in a development environment and read-only in a production environment.
+
+To provide you with a simple way to restrict access to the file system in production, we provide the flexibility for you to further restrict those permissions using a [umask](http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html).
+
+For an overview, see [Overview of ownership and permissions]({{page.baseurl}}/install-gde/prereq/file-sys-perms-over.html).
+
+For details about ownership and permissions in development and production, see [Magento ownership and permissions in development and production]({{page.baseurl}}/config-guide/prod/prod_file-sys-perms.html).
+
+### Improved prevention of clickjacking exploits
+
+Magento safeguards your store from clickjacking attacks by using an X-Frame-Options HTTP request header. For more information, see [X-Frame-Options header]({{page.baseurl}}/config-guide/secy/secy-xframe.html).
+
+### Use of non-default Admin URL
+
+A simple [Admin](https://glossary.magento.com/magento-admin) [URL](https://glossary.magento.com/url) (like `admin` or `backend`) makes it easy to target attacks on specific locations using automated password guessing. To prevent against this type of attack, Magento by default creates a random Admin URI when you install the product. The CLI command `php bin/magento info:adminuri` is provided so that you can see the URI if you forget it. You can also use the CLI to change this URI. Although the use of a non-default admin URL will not secure the site, its use will help prevent large-scale automated attacks. See [Display or change the Admin URI]({{page.baseurl}}/install-gde/install/cli/install-cli-adminurl.html) in Configuration Guide for more information.
+
+{:.ref-header}
+Related topics
+
+[Configuration Guide]({{page.baseurl}}/config-guide/bk-config-guide.html)
+
+[1]: https://docs.magento.com/m2/ee/user_guide/stores/compliance-industry.html
+[2]: https://www.adobe.com/security/engineering.html
+[3]: https://www.adobe.com/content/dam/acom/en/security/pdfs/Adobe-Magento-Commerce-Best-Practices-Guide.pdf
diff --git a/src/guides/v2.4/architecture/storefront_customization.md b/src/guides/v2.4/architecture/storefront_customization.md
deleted file mode 120000
index 5a3f5a5b56d..00000000000
--- a/src/guides/v2.4/architecture/storefront_customization.md
+++ /dev/null
@@ -1 +0,0 @@
-../../v2.3/architecture/storefront_customization.md
\ No newline at end of file
diff --git a/src/guides/v2.4/architecture/storefront_customization.md b/src/guides/v2.4/architecture/storefront_customization.md
new file mode 100644
index 00000000000..8eaac330dea
--- /dev/null
+++ b/src/guides/v2.4/architecture/storefront_customization.md
@@ -0,0 +1,41 @@
+---
+group: architecture-guide
+title: Storefront customization strategies
+menu_title: Storefront customization strategies
+---
+
+## Overview
+
+We can generalize about the range of [storefront](https://glossary.magento.com/storefront) customizations that the Magento supports. This range spans the simplest customizations, which involve only small additions to the default Magento storefront settings, to a complete replacement of Magento-provided [HTML](https://glossary.magento.com/html) and [CSS](https://glossary.magento.com/css).
+
+## Storefront customization levels
+
+These four levels of potential storefront customization are listed in order to increase complexity.
+
+### Extend Magento-Provided CSS
+
+Magento supplies a default [theme](https://glossary.magento.com/theme) and a Less-based CSS. You can substantially change a storefront using CSS only. This uncomplicated strategy might suit projects with a limited budget, or might interest developers who create different skins for a site. A small business enter this process of storefront customization by buying a third-party developed theme from Commerce Marketplace to extend the default values.
+
+### Replace PHTML template files
+
+In addition to extending the default CSS, you can generate different HTML [markup](https://glossary.magento.com/markup). For example, you might need to add a missing CSS class name, or add an extra `` tag to achieve some visual effect. You might also need to tweak some [JavaScript](https://glossary.magento.com/javascript) to cope with different HTML markup. This change is more demanding than simply extending Magento CSS, but is still within the grasp of smaller projects and leaner teams.
+
+### Replace Magento-Provided CSS
+
+Rather than edit the default CSS provided by Magento, you might decide to replace all the default storefront CSS code with your own. This strategy avoids tying a project to the Magento-provided CSS, but puts a greater burden on project development and integration. It also allows the use of different CSS tools or technologies not provided with Magento. Partners who build their own set of CSS libraries could reuse these libraries on different customer projects. (These unique CSS libraries may help differentiate a partner from others in the market.)
+
+In addition to replacing CSS files, you might need to replace small amounts of HTML and JavaScript.
+
+### Replace Magento-Provided CSS, HTML, and JavaScript
+
+Delivering a sharply different shopping experience than the default Magento installation provides is a more substantial task. However, the tradeoff might be a more complicated experience integrating additional extensions into your installation in the future.
+
+{:.bs-callout-tip}
+ Any customization of your storefront will work optimally, and provide the easiest path for later upgrades, if you follow the best practice of consistently compartmentalizing code by type. For example, keep all HTML in [PHTML](https://glossary.magento.com/phtml) files; keep all JavaScript in JavaScript files.
+
+{:.ref-header}
+Related topics
+
+[Frontend Developer Guide]({{page.baseurl}}/frontend-dev-guide/bk-frontend-dev-guide.html)
+
+[JavaScript Developer Guide]({{page.baseurl}}/javascript-dev-guide/bk-javascript-dev-guide.html)
From f05f2a02db2943f2b77faa28955de82a1f461be6 Mon Sep 17 00:00:00 2001
From: Jeff Matthews
Date: Tue, 17 May 2022 16:24:29 -0500
Subject: [PATCH 045/776] Added migration metadata
---
src/guides/v2.3/architecture/frontend_custom_strategies.md | 2 ++
.../v2.4/architecture/archi_perspectives/ABasics_intro.md | 2 ++
.../v2.4/architecture/archi_perspectives/ALayers_intro.md | 2 ++
.../v2.4/architecture/archi_perspectives/arch_diagrams.md | 2 ++
.../architecture/archi_perspectives/components/AComponents.md | 2 ++
.../archi_perspectives/components/modules/mod_and_areas.md | 2 ++
.../archi_perspectives/components/modules/mod_depend.md | 2 ++
.../archi_perspectives/components/modules/mod_intro.md | 2 ++
.../archi_perspectives/components/modules/mod_relationships.md | 2 ++
src/guides/v2.4/architecture/archi_perspectives/domain_layer.md | 2 ++
src/guides/v2.4/architecture/archi_perspectives/framework.md | 2 ++
.../v2.4/architecture/archi_perspectives/persist_layer.md | 2 ++
.../v2.4/architecture/archi_perspectives/present_layer.md | 2 ++
.../v2.4/architecture/archi_perspectives/service_layer.md | 2 ++
src/guides/v2.4/architecture/archi_perspectives/tech-vision.md | 2 ++
.../v2.4/architecture/archi_perspectives/third-party-libs.md | 2 ++
.../v2.4/architecture/archi_perspectives/webapi-vision.md | 2 ++
src/guides/v2.4/architecture/bk-architecture.md | 2 ++
src/guides/v2.4/architecture/extensibility.md | 2 ++
src/guides/v2.4/architecture/global_extensibility_features.md | 2 ++
src/guides/v2.4/architecture/security_intro.md | 2 ++
src/guides/v2.4/architecture/storefront_customization.md | 2 ++
22 files changed, 44 insertions(+)
diff --git a/src/guides/v2.3/architecture/frontend_custom_strategies.md b/src/guides/v2.3/architecture/frontend_custom_strategies.md
index 91a80385409..e6777b91a94 100644
--- a/src/guides/v2.3/architecture/frontend_custom_strategies.md
+++ b/src/guides/v2.3/architecture/frontend_custom_strategies.md
@@ -1,6 +1,8 @@
---
group: architecture-guide
title: Ease of frontend customization
+migrated_to: https://developer.adobe.com/commerce/php/architecture/basics/frontend-customization/
+layout: migrated
---
## Overview {#m2arch-whatis-overview}
diff --git a/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md b/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
index 5da43782d09..55b150e6383 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/ABasics_intro.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Architectural basics overview
menu_title: Architectural basics
+migrated_to: https://developer.adobe.com/commerce/php/architecture/basics/
+layout: migrated
---
Magento incorporates the core architectural principles of object-oriented, PHP-based applications. Comprehensive discussions of these general principles exist both on-line and in printed form.
diff --git a/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md b/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
index 895b8d769da..7970024b6ac 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/ALayers_intro.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Architectural layers overview
menu_title: Architectural layers
+migrated_to: https://developer.adobe.com/commerce/php/architecture/layers/
+layout: migrated
---
## Magento as layered software
diff --git a/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md b/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
index 05644e6e750..bd234ab073a 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/arch_diagrams.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Architectural diagrams
menu_title: Architectural diagrams
+migrated_to: https://developer.adobe.com/commerce/php/architecture/basics/diagrams/
+layout: migrated
---
## Magento architecture from different perspectives {#m2arch-whatis-overview}
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md b/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
index cd2e976ed2d..4bbda0975f8 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/AComponents.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Magento Components
menu_title: Components
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/
+layout: migrated
---
## Magento components
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_and_areas.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_and_areas.md
index 98320d3185e..54143545735 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_and_areas.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_and_areas.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Modules and areas
menu_title: Modules and areas
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/areas/
+layout: migrated
---
## Overview {#m2arch-module-areas-overview}
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
index bb3c5872c02..7a3085c1c8a 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_depend.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Module dependencies
menu_title: Module dependencies
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/dependencies/
+layout: migrated
---
## Overview {#m2devgde-moddep-intro}
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_intro.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_intro.md
index 0d75d62c1f5..8409fca2ba9 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_intro.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_intro.md
@@ -3,6 +3,8 @@ group: architecture-guide
title: Module overview
menu_title: Module overview
redirect_from: guides/v2.4/install-gde/basics/basics_module.html
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/overview/
+layout: migrated
---
## What is a Magento module? {#arch-modules-overview}
diff --git a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
index 42d3d12491d..0e5d5d04285 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/components/modules/mod_relationships.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Module relationships
menu_title: Module relationships
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/relationships/
+layout: migrated
---
## Overview {#m2arch-module-relationships-overview}
diff --git a/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md b/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
index 9f0aead80d0..a68d18df6df 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/domain_layer.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Domain layer
menu_title: Domain layer
+migrated_to: https://developer.adobe.com/commerce/php/architecture/layers/domain/
+layout: migrated
---
## The Magento Domain layer
diff --git a/src/guides/v2.4/architecture/archi_perspectives/framework.md b/src/guides/v2.4/architecture/archi_perspectives/framework.md
index 4aa1bd994a1..01ac01d87c1 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/framework.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/framework.md
@@ -1,6 +1,8 @@
---
group: architecture-guide
title: Commerce and Magento Framework
+migrated_to: https://developer.adobe.com/commerce/php/architecture/framework/
+layout: migrated
---
## Overview
diff --git a/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md b/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
index b8d04c610cc..286390865ee 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/persist_layer.md
@@ -1,6 +1,8 @@
---
group: architecture-guide
title: Persistence layer
+migrated_to: https://developer.adobe.com/commerce/php/architecture/layers/persistence/
+layout: migrated
---
Magento uses an active record pattern strategy for persistence. In this system, the model object contains a *resource model* that maps an object to one or more database rows. A resource model is responsible for performing functions such as:
diff --git a/src/guides/v2.4/architecture/archi_perspectives/present_layer.md b/src/guides/v2.4/architecture/archi_perspectives/present_layer.md
index d41a6fac09a..40252f46f2b 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/present_layer.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/present_layer.md
@@ -1,6 +1,8 @@
---
group: architecture-guide
title: Presentation Layer
+migrated_to: https://developer.adobe.com/commerce/php/architecture/layers/presentation/
+layout: migrated
---
## What is the Magento Presentation layer?
diff --git a/src/guides/v2.4/architecture/archi_perspectives/service_layer.md b/src/guides/v2.4/architecture/archi_perspectives/service_layer.md
index c4d567a11d9..56ffc6bc1e3 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/service_layer.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/service_layer.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Service layer
menu_title: Service layer
+migrated_to: https://developer.adobe.com/commerce/php/architecture/layers/service/
+layout: migrated
---
## What is a Service layer?
diff --git a/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md b/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
index f437a525776..665fba6bdf0 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/tech-vision.md
@@ -1,6 +1,8 @@
---
group: architecture-guide
title: Magento technical vision
+migrated_to: https://developer.adobe.com/commerce/php/architecture/technical-vision/
+layout: migrated
---
The Magento technical vision is a collection of documents that describe the desired state of the Magento platform.
diff --git a/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md b/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
index 707e98374bf..876ca7d9170 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/third-party-libs.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Third-party libraries
menu_title: Third-party libraries
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/libraries/
+layout: migrated
---
Magento depends on a set of external libraries. You can use [Composer](https://glossary.magento.com/composer) to manage these dependencies. Composer downloads all of the external libraries that are included in its main configuration file and installs them under its default installation directory (`vendor/`). Third-party libraries include the Zend framework files and the Symfony libraries.
diff --git a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
index 880783f56c6..8ce39d434cc 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
@@ -1,5 +1,7 @@
---
group: architecture-guide
+migrated_to: https://developer.adobe.com/commerce/php/architecture/technical-vision/web-api/
+layout: migrated
---
# Technical vision - Web API
diff --git a/src/guides/v2.4/architecture/bk-architecture.md b/src/guides/v2.4/architecture/bk-architecture.md
index ebe4eb09bbd..998121be972 100644
--- a/src/guides/v2.4/architecture/bk-architecture.md
+++ b/src/guides/v2.4/architecture/bk-architecture.md
@@ -4,6 +4,8 @@ title: Architecture Guide
landing-page: Architecture
menu_title: Get Started
menu_node: parent
+migrated_to: https://developer.adobe.com/commerce/php/architecture/
+layout: migrated
---
The Architecture Guide provides a high-level introduction and view of the Magento product.
diff --git a/src/guides/v2.4/architecture/extensibility.md b/src/guides/v2.4/architecture/extensibility.md
index 9d0f95ec09f..c3eaed558a4 100644
--- a/src/guides/v2.4/architecture/extensibility.md
+++ b/src/guides/v2.4/architecture/extensibility.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Extensibility and modularity
menu_title: Extensibility and modularity
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/
+layout: migrated
---
## Overview
diff --git a/src/guides/v2.4/architecture/global_extensibility_features.md b/src/guides/v2.4/architecture/global_extensibility_features.md
index 2b3aa3757f2..13193818ba7 100644
--- a/src/guides/v2.4/architecture/global_extensibility_features.md
+++ b/src/guides/v2.4/architecture/global_extensibility_features.md
@@ -1,6 +1,8 @@
---
group: architecture-guide
title: Global features that support extensibility
+migrated_to: https://developer.adobe.com/commerce/php/architecture/modules/
+layout: migrated
---
## Overview
diff --git a/src/guides/v2.4/architecture/security_intro.md b/src/guides/v2.4/architecture/security_intro.md
index 0d669b65de1..4ac4dee9760 100644
--- a/src/guides/v2.4/architecture/security_intro.md
+++ b/src/guides/v2.4/architecture/security_intro.md
@@ -4,6 +4,8 @@ subgroup: Architectural Basics
title: Security overview
menu_title: Security
menu_order:
+migrated_to: https://developer.adobe.com/commerce/php/architecture/basics/security/
+layout: migrated
---
The security of your data and digital experiences is our priority. To better protect {{site.data.var.ee}} and {{site.data.var.ce}} installations from the physical layer up, we have implemented hundreds of processes and controls to help us comply with [industry-accepted standards][1], regulations, and certifications. To help protect installations from the software layer down, we build in security measures that are based on the [Adobe Secure Product Lifecyle][2].
diff --git a/src/guides/v2.4/architecture/storefront_customization.md b/src/guides/v2.4/architecture/storefront_customization.md
index 8eaac330dea..eef679c8f2e 100644
--- a/src/guides/v2.4/architecture/storefront_customization.md
+++ b/src/guides/v2.4/architecture/storefront_customization.md
@@ -2,6 +2,8 @@
group: architecture-guide
title: Storefront customization strategies
menu_title: Storefront customization strategies
+migrated_to: https://developer.adobe.com/commerce/php/architecture/basics/frontend-customization/
+layout: migrated
---
## Overview
From 3fe6babd9a977e225308e7ff2912631e8ea07d5d Mon Sep 17 00:00:00 2001
From: outis
Date: Tue, 17 May 2022 14:25:09 -0700
Subject: [PATCH 046/776] Encode "<" as "<"
Fix for #9439.
---
.../v2.3/coding-standards/docblock-standard-javascript.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/guides/v2.3/coding-standards/docblock-standard-javascript.md b/src/guides/v2.3/coding-standards/docblock-standard-javascript.md
index d3af74620f3..78968907825 100644
--- a/src/guides/v2.3/coding-standards/docblock-standard-javascript.md
+++ b/src/guides/v2.3/coding-standards/docblock-standard-javascript.md
@@ -388,7 +388,7 @@ new Date() |
An array of numbers |
- | Array.> |
+ Array.<Array.<string>> |
[['one', 'two', 'three'], ['foo', 'bar']] |
Array of arrays of strings |
@@ -404,7 +404,7 @@ new Date()
An object. In the object, the values are strings. |
- | Object. |
+ Object.<number, string> |
var obj = {};
obj[1] = 'bar'; |
An object. In the object, the keys are numbers and the values are strings.
@@ -725,4 +725,4 @@ new project.MyClass() |
|
-
\ No newline at end of file
+
From 1d4c7e22aeff6c0c54b024044b1fb04fe80de538 Mon Sep 17 00:00:00 2001
From: Jeff Matthews
Date: Tue, 17 May 2022 17:02:17 -0500
Subject: [PATCH 047/776] Fix migration generator
---
src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
index 8ce39d434cc..59780537b1e 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
@@ -1,5 +1,6 @@
---
group: architecture-guide
+title: Technical vision - Web API
migrated_to: https://developer.adobe.com/commerce/php/architecture/technical-vision/web-api/
layout: migrated
---
From d86e9e5f1247b73b3c262deb8daa7eccd576e86c Mon Sep 17 00:00:00 2001
From: Jeff Matthews
Date: Tue, 17 May 2022 17:06:26 -0500
Subject: [PATCH 048/776] Fixed linter
---
.../v2.4/architecture/archi_perspectives/webapi-vision.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
index 59780537b1e..893b91d7a9c 100644
--- a/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
+++ b/src/guides/v2.4/architecture/archi_perspectives/webapi-vision.md
@@ -5,8 +5,6 @@ migrated_to: https://developer.adobe.com/commerce/php/architecture/technical-vis
layout: migrated
---
-# Technical vision - Web API
-
Web API is crucial for Magento because of the need to integrate with order management, customer management, and other enterprise management software systems.
There are many headless Magento installations in which a merchant partially uses Magento functionality, while the other pieces of an eCommerce website are provided by other systems.
From 197f80f735ad5bc64e8a0fd8e2ba231568ef861a Mon Sep 17 00:00:00 2001
From: Jeff Matthews
Date: Tue, 17 May 2022 17:56:36 -0500
Subject: [PATCH 049/776] Fixed TOC
---
src/_data/toc/architecture-guide.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/_data/toc/architecture-guide.yml b/src/_data/toc/architecture-guide.yml
index 85354b17ccf..293bcbd8b44 100644
--- a/src/_data/toc/architecture-guide.yml
+++ b/src/_data/toc/architecture-guide.yml
@@ -59,4 +59,4 @@ pages:
children:
- label: Web Api
- url: /get-started/bk-get-started-api.html
+ url: /architecture/archi_perspectives/webapi-vision.html
From 4a92f1240fb37baa3e7f861f605b4cb9c4e7fa0f Mon Sep 17 00:00:00 2001
From: Marc Ginesta
Date: Wed, 18 May 2022 17:51:05 +0200
Subject: [PATCH 050/776] Reference Magento plugin installation in Magento
PHPStorm plugin
---
src/_data/toc/extension-best-practices.yml | 3 ++
.../phpstorm/download-from-jetbrains.png | Bin 0 -> 747447 bytes
.../phpstorm/enable-magento-integration.png | Bin 0 -> 308556 bytes
.../phpstorm/install-through-phpstorm.png | Bin 0 -> 349503 bytes
.../phpstorm/installation.md | 30 ++++++++++++++++++
.../phpstorm/installation.md | 1 +
6 files changed, 34 insertions(+)
create mode 100644 src/common/images/phpstorm/download-from-jetbrains.png
create mode 100644 src/common/images/phpstorm/enable-magento-integration.png
create mode 100644 src/common/images/phpstorm/install-through-phpstorm.png
create mode 100644 src/guides/v2.3/ext-best-practices/phpstorm/installation.md
create mode 120000 src/guides/v2.4/ext-best-practices/phpstorm/installation.md
diff --git a/src/_data/toc/extension-best-practices.yml b/src/_data/toc/extension-best-practices.yml
index 763f626d6db..fc05e581759 100644
--- a/src/_data/toc/extension-best-practices.yml
+++ b/src/_data/toc/extension-best-practices.yml
@@ -37,6 +37,9 @@ pages:
url: /ext-best-practices/phpstorm/introduction.html
children:
+ - label: Installation
+ url: /ext-best-practices/phpstorm/installation.html
+
- label: Code generation
url: /ext-best-practices/phpstorm/code-generation.html
diff --git a/src/common/images/phpstorm/download-from-jetbrains.png b/src/common/images/phpstorm/download-from-jetbrains.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab55055e758e1383563b7726cf247f3eb30062b7
GIT binary patch
literal 747447
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