release: there is no packaging, no artifact and no signing — the extension cannot be installed durably on either browser #310
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by the pre-1.0 deployability audit (#303). Blocker: there is no path by which the owner installs this once and keeps using it.
Checked exhaustively, all negative:
.gitea/workflows/holds onlycheck.ymlande2e.yml; neither uploads an artifact.Makefile,script/,package.jsonorDockerfile.git grep -niE '(web-ext|xpi|crx|\.pem|amo|addons\.mozilla|chrome web store|update_url|code.?sign)'returns exactly one hit: a comment attests/e2e/firefox/driver.js:166saying no XPI and no signing are involved.manifest/chrome.jsonhas nokeyand noupdate_url.v0.1.0, and it is not an ancestor of HEAD — 246 commits back;git describe --tagsfails outright.Chrome
README.md:44-45documents Load unpacked fromdist/chrome/. With nokeyin the manifest, the extension ID is derived from the absolute directory path, so moving or re-cloning the checkout yields a different ID and therefore a differentchrome.storage.localpartition — the wallet silently reads as empty. No update channel, and a Developer-mode nag on every browser start. (Absence ofkeyverified directly; the ID-derivation consequence is documented Chrome behaviour, not tested here — see the DoD.)Firefox
README.md:46-47documents Load Temporary Add-on as the only route. Release Firefox and ESR enforce signing with no working override, and this repo produces no XPI and has no signing key or AMO tooling, so on release Firefox this cannot be permanently installed at all. A temporary add-on is unloaded when Firefox exits — the repo says so itself attests/e2e/firefox/driver.js:167("the add-on dies with the profile"). Daily use means re-adding it by hand fromabout:debuggingon every browser start.manifest/firefox.json:22-26does carry a stablegecko.id, which is the right shape for storage to survive a re-add, but no test asserts that the vault survives an add-on removal and re-add — and that is exactly the property that must hold before real money goes in.Related:
dist/constants-bundles.txtanddist/styles.csssit atdist/root, outside both browser directories, so a naive zip ofdist/chrome/would miss them. Version is triplicated and unwired —manifest/chrome.json:4andmanifest/firefox.json:4(both hardcoded0.1.0, copied verbatim bybuild.js:198-205) andpackage.json:3(a separate source feeding the About screen); nothing checks they agree.BUILD_COMMIT(build.js:63,71) has no dirty check, so a build from a modified tree stamps a clean hash.Definition of done
manifest/chrome.jsoncarries a fixedkey, so the extension ID and its storage partition are stable across checkout moves and re-clones.package.jsondisagree.BUILD_COMMITmarks a dirty tree as dirty.make checkgreen.Note: tagging a release and publishing to AMO are outward-facing acts and are sneak's call, not the implementer's. This issue covers producing and verifying the artifact, not publishing it.