Skip to content

Release readiness v0.3.0: fix dead content script and blank popup, privacy and store package - #10

Merged
harshabala merged 14 commits into
mainfrom
release/ready-0.3.0
Sep 26, 2026
Merged

harshabala merged 14 commits into
mainfrom
release/ready-0.3.0

Conversation

@harshabala

Copy link
Copy Markdown
Owner

Release readiness for v0.3.0

Everything short of the Chrome Web Store upload itself.

Two ship-blocking bugs found and fixed

  • Content script never ran in the built extension. dist/content.js was an ES module with static imports; Chrome loads manifest content scripts as classic scripts, so every page threw Cannot use import statement outside a module and plaques, hover cards and detection never appeared. The content script is now built as a self-contained IIFE (vite.content.config.ts, run by npm run build).
  • Toolbar popup rendered blank. popup.tsx mounted on #popup-root but popup.html only has #app. Fixed, with a regression test that checks every UI entry mounts on an element that exists.
  • Popup save form overflowed its right edge (missing box-sizing). Fixed.

Privacy and compliance

  • Google Fonts removed. The content script loaded fonts from Google on every page the user visited. Fonts are now self-hosted (about 154 KB, OFL licences included). Content-script surfaces use only local monospace stacks, so no web-accessible resources and no extension-ID fingerprinting. A test fails on any third-party font or stylesheet origin.
  • Privacy policy and store docs rewritten to match the code: API keys and the Drive token are encrypted with a per-install key kept in the same profile (honestly scoped), notes and reflections are not encrypted, Drive backup is manual plaintext JSON in the user's own appData, no in-app disconnect exists, AI runs via the user's own provider key, image hosts disclosed. Version strings synced to 0.3.0, guarded by a test.
  • Removed unneeded host permissions: covers.openlibrary.org (image URLs only) and the redundant googleapis.com/books/*.
  • minimum_chrome_version set to 111.

Packaging

  • The manifest key field is stripped from the zipped manifest (the Web Store rejects it). Effect: the store-installed extension gets a store-assigned ID, so the Drive OAuth redirect URI must be added in Google Cloud for that ID after first upload.
  • scripts/verify-package.mjs + npm run release-check (typecheck, tests, build, package, verify): manifest and icons, referenced files exist, forbidden paths, secrets, remote code, content scripts are classic scripts.
  • Fixed a decrypt write-back race that could drop a key after a transient failure.

Store assets

Real 1280x800 screenshots and promo tiles (store/screenshots, store/assets), rendered from the built extension by scripts/render-store-assets.py. Frame 04 uses a local stand-in page.

Verified

670 tests pass, typecheck and build clean, package verification passes; the unzipped store package was loaded in a browser: content script runs, popup renders, no key in the manifest.

Still needs the owner

Developer account and fee, human-timed T7 run (blocked by the Brave policy), confirm the Google OAuth consent screen is published, review screenshots, upload.

harsha balakrishnan added 14 commits September 26, 2026 18:30
…, fix key decrypt write-back race

Adds scripts/verify-package.mjs and release-check, sets minimum_chrome_version 111, strips manifest key from the packaged zip, and stops erasing ciphertext that failed to decrypt.
…pshot backup, diagnostics, hosts, and v0.3.0

Add releaseDocs regression test.
Bundle Courier Prime and IBM Plex Mono (latin woff2, SIL OFL) for the popup
and options pages. Content-script shadow roots no longer inject a Google
Fonts stylesheet on every page; they use a local monospace stack and expose
no web-accessible resources. Add regression test.
@harshabala
harshabala merged commit 8e22bba into main Sep 26, 2026
1 check passed
@harshabala
harshabala deleted the release/ready-0.3.0 branch October 11, 2026 09:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant