First of all, Oliver, a big thank you for the
tool.
I don't know how much time I would have needed to test the extension without it.
Now, onto the actual question. I'll try to describe the issue as structured as possible.
I created
three options for testing.
For each of the options, we have an
initial version 1 and an
updated version 2.
We will be testing using the tool that Oliver suggested.
All extensions have a structure of two rulesets (but different initial options):
"declarative_net_request": {
"rule_resources": [
{
"id": "ruleset_1",
......
},
{
"id": "ruleset_2",
......
}
]
}
1.
The first option -
all rulesets are enabled in both versions "declarative_net_request": {
"rule_resources": [
{
"id": "ruleset_1",
"enabled":
true,
"path": "rules/ruleset_1.json"
},
{
"id": "ruleset_2",
"enabled":
true,
"path": "rules/ruleset_2.json"
}
]
}
AB_v_1 - each ruleset has two rules
AB_v_2 - we remove one rule from ruleset_1
After the update, all rulesets are enabled (as they should be), but we have an error as shown below:

2.
The second option -
one ruleset are enabled in both versions "declarative_net_request": {
"rule_resources": [
{
"id": "ruleset_1",
"enabled":
false,
"path": "rules/ruleset_1.json"
},
{
"id": "ruleset_2",
"enabled":
true,
"path": "rules/ruleset_2.json"
}
]
}
AB_v_1 - each ruleset has two rules
AB_v_2 - we remove one rule from ruleset_1
After the update: the same behavior as in the first option, with the same error.
3.
The third option -
all rulesets are disabled in both versions "declarative_net_request": {
"rule_resources": [
{
"id": "ruleset_1",
"enabled":
false,
"path": "rules/ruleset_1.json"
},
{
"id": "ruleset_2",
"enabled":
false,
"path": "rules/ruleset_2.json"
}
]
}
AB_v_1 - each ruleset has two rules
AB_v_2 - we remove one rule from ruleset_1
After the update, we get an
Internal Error, and only ruleset_2 (the one that didn't undergo changes in the updated version) will be active. The ruleset_1 that was modified won't load.

I have created simple extensions for each of the scenarios to demonstrate how it looks. Since the first and second options behave the same way, I will only upload one of the variations. And a separate variation for the third option.
Steps to reproduce:1. Open the
tool2. Upload V_1 extension
3. Download the crx and drag and drop it to the chrome://extensions page
4. Turn on "Collect errors" button
5. Upload V_2 extension to the tool
6. Open service worker and run chrome.runtime.requestUpdateCheck()
------------------------------------------------------------------------------------------------------------------
Now I have two questions:1. I couldn't find any specific information in the declarativeNetRequest documentation indicating that at least one ruleset must always be enabled in the manifest.
Is there such a limitation?
2. Cannot load extension with file or directory name _metadata. Filenames starting with "_" are reserved for use by the system.
Is this error related to the fact that we are using the tool during the update, or will it also occur when updating from the Chrome Web Store?
I see the bug
https://crbug.com/1061292 from March 2020.
But according to the
https://groups.google.com/a/chromium.org/g/chromium-extensions/c/PP4RI98I_Vo/m/FN-vfKEmDwAJ thread the problem still exists.