Serve extension design resources from the server as a versioned pack
CSS (card + popup), field-detection keyword tables and UI config now ship as
extensions/pack/ with sha256 in pack.json and a monotonic version. The backend
serves pack.json unauthenticated (no-cache) and files versioned/immutable; a
background-worker sync validates schema, ext-version compatibility and hashes,
then stores the pack atomically in chrome.storage.local — content scripts and
the popup only read storage, never fetch, and fall back to the bundled
defaults. Publish tool auto-bumps on content change and writes pack.json last.
Firefox bundle inlines pack-shared.js; release 0.2.0.

E2E (15/15): adoption, live restyle without re-release, rollback and
min-extension guards, sha-mismatch abort, offline fallback. Tests: node 25+21,
pytest 57.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 4c6a4f7 commit 24b9ffa8aa0d86a59aad9fe32c84d6dafaeeace4
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 15 hours ago
Showing 23 changed files
View
extensions/extension/Makefile
View
extensions/extension/manifest.json
View
extensions/extension/pack-src/config.json 0 → 100644
View
extensions/extension/pack-src/tables.json 0 → 100644
View
extensions/extension/src/background.js
View
extensions/extension/src/content.js
View
extensions/extension/src/field-detect.js
View
extensions/extension/src/pack-shared.js 0 → 100644
View
extensions/extension/src/popup/popup.html
View
extensions/extension/src/popup/popup.js
View
extensions/extension/tools/bundle-background.js
View
extensions/extension/tools/publish-design-pack.js 0 → 100644
View
extensions/extension/tools/test-field-detect.js
View
extensions/extension/tools/test-pack-shared.js 0 → 100644
View
extensions/manifest.json
View
extensions/pack/pack.json 0 → 100644
View
extensions/pack/v13/config.json 0 → 100644
View
extensions/pack/v13/content.css 0 → 100644
View
extensions/pack/v13/popup.css 0 → 100644
View
extensions/pack/v13/tables.json 0 → 100644
View
gnexus_creds/api.py
View
gnexus_creds/schemas.py
View
tests/test_extension.py