The extension is installed per-instance from the operator's FC host, so Firefox's static update_url can't apply and updates were manual. Adds a self-hosted-friendly update surface reusing the existing public GET /api/extension/manifest ({version, latest_url, sha256}):
Popup banner — "Update available — vX (installed vY)" + an Update button that opens the signed XPI → Firefox's native install prompt.
Toolbar badge — a daily browser.alarms check flags a ↑ badge when a newer XPI is published, cleared when current. New non-prompting alarms permission.
Dotted-numeric version compare (1.0.10 > 1.0.9); a failed check never blocks the popup.
No backend changes. Bumped 1.0.8 → 1.0.9 so it ships (also re-signs via web-ext 10). From here on, updates surface themselves instead of a manual reinstall.
CI green on dev head d80a525: extension lint on v1.0.9 (run 2256) + full CI (run 2255).
The extension is installed per-instance from the operator's FC host, so Firefox's static `update_url` can't apply and updates were manual. Adds a self-hosted-friendly update surface reusing the existing public `GET /api/extension/manifest` (`{version, latest_url, sha256}`):
- **Popup banner** — "Update available — vX (installed vY)" + an **Update** button that opens the signed XPI → Firefox's native install prompt.
- **Toolbar badge** — a daily `browser.alarms` check flags a `↑` badge when a newer XPI is published, cleared when current. New non-prompting `alarms` permission.
- Dotted-numeric version compare (1.0.10 > 1.0.9); a failed check never blocks the popup.
No backend changes. Bumped 1.0.8 → 1.0.9 so it ships (also re-signs via web-ext 10). From here on, updates surface themselves instead of a manual reinstall.
CI green on `dev` head `d80a525`: extension lint on v1.0.9 (run 2256) + full CI (run 2255).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01NsmJSQxnNxGgtM5Yz4GAqi
The extension is installed per-instance from the operator's FC host, so Firefox's
static update_url can't apply (each instance has a different host) and updates
were fully manual. Add a self-hosted-friendly update surface that reuses the
existing public GET /api/extension/manifest ({version, latest_url, sha256}):
- lib/api.js: getExtensionManifest().
- background.js: checkForUpdateInfo() compares the instance's latest published
version against runtime.getManifest().version (dotted-numeric compare so
1.0.10 > 1.0.9); CHECK_UPDATE message handler; refreshUpdateBadge() sets a
toolbar badge via browser.action; a daily browser.alarms check plus on
startup/installed. New 'alarms' permission (non-prompting).
- popup: an 'Update available — vX' banner with an Update button that opens the
signed XPI (web root, /api stripped like OPEN_ARTIST_PAGE) → Firefox's native
install prompt. Never blocks the popup on a failed check.
No backend changes (endpoint already exists). Bump 1.0.8→1.0.9 so this ships;
from here on updates surface themselves instead of needing a manual reinstall.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The extension is installed per-instance from the operator's FC host, so Firefox's static
update_urlcan't apply and updates were manual. Adds a self-hosted-friendly update surface reusing the existing publicGET /api/extension/manifest({version, latest_url, sha256}):browser.alarmscheck flags a↑badge when a newer XPI is published, cleared when current. New non-promptingalarmspermission.No backend changes. Bumped 1.0.8 → 1.0.9 so it ships (also re-signs via web-ext 10). From here on, updates surface themselves instead of a manual reinstall.
CI green on
devheadd80a525: extension lint on v1.0.9 (run 2256) + full CI (run 2255).🤖 Generated with Claude Code
https://claude.ai/code/session_01NsmJSQxnNxGgtM5Yz4GAqi
The extension is installed per-instance from the operator's FC host, so Firefox's static update_url can't apply (each instance has a different host) and updates were fully manual. Add a self-hosted-friendly update surface that reuses the existing public GET /api/extension/manifest ({version, latest_url, sha256}): - lib/api.js: getExtensionManifest(). - background.js: checkForUpdateInfo() compares the instance's latest published version against runtime.getManifest().version (dotted-numeric compare so 1.0.10 > 1.0.9); CHECK_UPDATE message handler; refreshUpdateBadge() sets a toolbar badge via browser.action; a daily browser.alarms check plus on startup/installed. New 'alarms' permission (non-prompting). - popup: an 'Update available — vX' banner with an Update button that opens the signed XPI (web root, /api stripped like OPEN_ARTIST_PAGE) → Firefox's native install prompt. Never blocks the popup on a failed check. No backend changes (endpoint already exists). Bump 1.0.8→1.0.9 so this ships; from here on updates surface themselves instead of needing a manual reinstall. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>