Description
Currently, ModulesFiles::loadModuleFileAssets() hardcodes a version string (?v=...) onto module JS and CSS files. This creates a conflict with the $config->useVersionUrls setting.
Because Config::versionUrls() skips any URL that already has a query string, it never applies$config->useVersionUrls
The issue
When using a custom $config->useVersionUrls for deployments, core and theme assets update correctly, but module assets (like ProcessPageEdit.js) stay stuck on the core version. This results in "split" caching and makes it impossible to force a clean cache-clear for the entire admin via the global config.
Suggested fix
ModulesFiles::loadModuleFileAssets() should respect the $config->useVersionUrls setting so that these assets can be versioned via the standard FilenameArray::urls() process like everything else.
Note: wire/core/ModuleJS.php seems to have the same hardcoded logic.