Skip to content

feat: in-app update notifier + live filter-list refresh - #18

Merged
neon798 merged 2 commits into
mainfrom
feat/update-notifier-live-refresh
Jul 7, 2026
Merged

neon798 merged 2 commits into
mainfrom
feat/update-notifier-live-refresh

Conversation

@neon798

@neon798 neon798 commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Part 1 of the update/refresh plan — two Claude-owned backends. Built (incremental) + Marionette-validated in a real browser. Grok's UI (update banner, list-status panel) lands separately after review.

Update notifier (notify-only)

NeonwolfUpdateCheck.sys.mjs checks the GitHub Releases API ~daily and sets neonwolf.update.availableVersion/.url if a newer build exists. No download/apply; the updater stays compiled out. neonwolf.version.full baked at build for the comparison. Gated by neonwolf.update.checkEnabled.

Live filter-list refresh (task #5)

UBONetFilter periodically + on-demand re-fetches the lists from their canonical hosts and rebuilds in place, bypassing RemoteSettings sync so the dump-only delete hazard can't fire. Bundled dump is the per-list fallback — a failed fetch never drops a list, the engine never degrades to empty. Reuses the serialized rebuild machinery from the userFilters work.

Validation

chrome:// ESM import works; _isNewer correct across release/FF-version bumps; engine still blocks doubleclick (no regression); refreshNow rebuild keeps blocking intact + sets lastRefresh; one-shot trigger resets.

🤖 Generated with Claude Code

neon798 and others added 2 commits July 6, 2026 13:47
Two Claude-owned backends (Part 1 of the update/refresh plan); both built
(incremental) and Marionette-validated. Grok's UI for these lands separately
after review.

Update notifier (notify-only; updater stays --disable-updater):
- NeonwolfUpdateCheck.sys.mjs (chrome:// ESM, init'd from the shields panel)
  checks the GitHub Releases API ~daily and, if a newer tag exists, sets
  neonwolf.update.availableVersion/.url for the UI. No download/apply.
- neonwolf.version.full ("<version>-<release>") baked at build by
  neonwolf-patches.py; _isNewer compares version-release segment-wise.
- Prefs seeded in overrides.cfg; gated by neonwolf.update.checkEnabled.

Live filter-list refresh (native-ubo-snfe.patch, task #5):
- UBONetFilter periodically (+ manual neonwolf.shields.lists.refreshNow)
  re-fetches lists from LIST_URLS (mirrors fetch-adblock-lists.sh) and rebuilds
  the engine in place via the existing serialized rebuild path, BYPASSING
  RemoteSettings sync so the dump-only delete hazard can't fire. Bundled dump is
  the per-list fallback (a failed fetch never drops a list; engine never goes
  empty). No selfie write, so warm starts stay fast. Prefs: autoRefresh,
  refreshIntervalHours, refreshNow, lastRefresh.

Validated: chrome:// ESM import works; _isNewer correct; engine still blocks
doubleclick; refreshNow rebuild keeps blocking intact and sets lastRefresh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…cker, filters import/export

Grok's display-layer batch, Claude-reviewed + fixed + built + Marionette-validated,
completing the frontends for the update-notifier and live-refresh backends.

- Update banner (neonwolf-update-banner.js): reads neonwolf.update.availableVersion/
  .url, dismissible; validated showing "Neonwolf <ver> is available".
- Filter-list status panel (neonwolf-shields-lists.*): per-list rows, lastRefresh
  time (epoch SECONDS — fixed from Grok's ms assumption), auto-refresh toggle,
  Refresh-now button writing neonwolf.shields.lists.refreshNow.
- Element picker (neonwolf-element-picker{,-content}.js): frame-script overlay,
  click-to-pick cosmetic rule appended to userFilters. Transport confirmed working
  in FF152 (frame script injects/runs). Hardened: preview built via createElement/
  textContent (no innerHTML from page DOM); removed attacker-controllable
  content.window hook.
- Custom-filters import/export/subscribe: IOUtils used as global (not imported);
  nsIFilePicker.open uses the {done} callback shape.
- Registered all new chrome files in jar.mn + browser.xhtml; seeded
  dismissedVersion + subscriptions prefs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@neon798
neon798 merged commit 3d7fbac into main Jul 7, 2026
1 check passed
@neon798
neon798 deleted the feat/update-notifier-live-refresh branch July 7, 2026 03:24
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