ci / test (pull_request) Successful in 2m48s
collectFiles() skipped manifest.json unconditionally, and the final zip is produced by calling collectFiles() on the built target dir — so both dist/*.zip shipped with no manifest.json at all and could not be installed. The per-target manifest was written into the dir correctly, then filtered back out on the way into the archive. Split the exclusion list: EXCLUDED_DIRS plus DEV_ONLY_FILES (manifest.json, AGENTS.md, README.md, package.json, package-lock.json), and only apply the latter when reading the repo root. Reading a built target keeps its generated manifest. Firefox zip: 26 files/1.84 MB (no manifest) -> 23 files/1.68 MB. Chrome zip gains its manifest.json and background.chrome.js as before.