Commit 95ea702fdf2 for woocommerce

commit 95ea702fdf25dfeaa3924fde779bee22c3832e4c
Author: Luigi Teschio <gigitux@gmail.com>
Date:   Mon Aug 3 18:27:12 2026 +0200

    Register legacy block bundle compatibility placeholders (#67055)

    * Register deprecated block bundle placeholders

    * Add changelog entry for deprecated block bundle placeholders

    * fix warning message

    * clean up documentation

    * register deprecated script only on the admin context

    * update deprecated script handles to include 'wc-block-library' dependency

diff --git a/plugins/woocommerce/changelog/fix-register-deprecated-block-bundle-handles b/plugins/woocommerce/changelog/fix-register-deprecated-block-bundle-handles
new file mode 100644
index 00000000000..b12dc01b410
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-register-deprecated-block-bundle-handles
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Register legacy block bundle handles as deprecated compatibility placeholders when unified editor assets are enabled.
diff --git a/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md b/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md
index 6efb16d3024..1d3092f9494 100644
--- a/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md
+++ b/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md
@@ -26,6 +26,8 @@ When the experiment is enabled, WooCommerce block types use:

 These assets replace WooCommerce's per-block editor assets. They do not combine every script loaded by the editor: shared WordPress dependencies and the enqueueable WooCommerce packages below remain external.

+The legacy per-block handles, such as `wc-cart-block` and `wc-checkout-block`, remain registered as compatibility placeholders. They preserve their dependency on `wc-blocks` but do not load the former per-block files, and log a deprecation warning when enqueued.
+
 ## External package dependencies

 The generated asset file for `wc-block-library` declares packages that remain separate scripts:
diff --git a/plugins/woocommerce/src/Blocks/AssetsController.php b/plugins/woocommerce/src/Blocks/AssetsController.php
index 5f650bee231..19c880e0f86 100644
--- a/plugins/woocommerce/src/Blocks/AssetsController.php
+++ b/plugins/woocommerce/src/Blocks/AssetsController.php
@@ -136,22 +136,54 @@ final class AssetsController {
 			array( 'wc-blocks-middleware', 'wc-entities' ),
 			true
 		);
-		$this->register_deprecated_script_handles();
+
+		if ( is_admin() ) {
+			// Register deprecated script handles for backward compatibility in the admin context.
+			$this->register_deprecated_script_handles();
+		}
 	}

 	/**
 	 * Register deprecated script handles for backward compatibility.
 	 */
 	private function register_deprecated_script_handles(): void {
-		wp_register_script( 'wc-blocks-vendors', false, array(), $this->api->wc_version, true );
-		wp_register_script( 'wc-blocks', false, array( 'wc-blocks-vendors' ), $this->api->wc_version, true );
-
-		$this->add_deprecated_script_handle_warnings(
-			array(
-				'wc-blocks-vendors',
-				'wc-blocks',
-			)
+		$script_dependencies = array(
+			'wc-blocks-vendors' => array(),
+			'wc-blocks'         => array( 'wc-blocks-vendors', 'wc-block-library' ),
 		);
+		$build_path          = WC_ABSPATH . 'assets/client/blocks/';
+		$asset_files         = glob( $build_path . '*.asset.php' );
+
+		foreach ( false === $asset_files ? array() : $asset_files as $asset_file ) {
+			$script_name = basename( $asset_file, '.asset.php' );
+
+			if (
+				in_array( $script_name, array( 'wc-block-library', 'wc-blocks' ), true ) ||
+				! file_exists( $build_path . $script_name . '.js' )
+			) {
+				continue;
+			}
+
+			// The file comes from WooCommerce's generated assets directory, not user input.
+			// nosemgrep audit.php.lang.security.file.inclusion-arg.
+			$asset_data = require $asset_file;
+
+			if (
+				! is_array( $asset_data ) ||
+				! in_array( 'wp-blocks', (array) ( $asset_data['dependencies'] ?? array() ), true )
+			) {
+				continue;
+			}
+
+			$legacy_handle                         = 'wc-' . $script_name . '-block';
+			$script_dependencies[ $legacy_handle ] = array( 'wc-blocks' );
+		}
+
+		foreach ( $script_dependencies as $handle => $dependencies ) {
+			wp_register_script( $handle, false, $dependencies, $this->api->wc_version, true );
+		}
+
+		$this->add_deprecated_script_handle_warnings( array_keys( $script_dependencies ) );
 	}

 	/**
@@ -163,7 +195,7 @@ final class AssetsController {
 		foreach ( $handles as $handle ) {
 			$message = wp_json_encode(
 				sprintf(
-					'[WooCommerce] The "%s" script handle is deprecated and kept for backward compatibility only. See the enqueueable packages documentation for the supported WooCommerce Blocks package handles: https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages',
+					'[WooCommerce] The "%s" script handle is a deprecated compatibility placeholder and does not load a script. See the enqueueable packages documentation: https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages',
 					$handle
 				)
 			);