GLP Ultra v3.1.0
GLP Ultra v3.1.0
Watcher, recovery, diagnostics, context-menu actions, a Firefox build — and a fix for silent
data loss that affected every extension user.
Fixed — settings, mutes, blocks, tags, and hidden threads reset on every reload
In the extension build only, every stored value came back as its default after a page load, with
no error anywhere. The engine is written against Tampermonkey semantics: it serializes before
every GM_setValue and parses after every GM_getValue. The MV3 shim parsed on read as well, so
the engine parsed an already-parsed object, threw, and fell back to defaults inside its own
catch. The shim now returns exactly what was stored, and the runtime harness reloads the page
and asserts that both a setting and the mute list survive.
Upgrading does not recover values lost before this release — they were never written back.
Added
- Thread watcher. Watch a thread and it is polled through the shared rate-limited fetch
queue, walking to its last page before counting posts so an unread delta means new replies
rather than a new page. The digest shows unread counts, last-checked age, and failed-check
state; hidden tabs pause background checks by default; the toolbar badge shows the unread
total. - Recovery shelf. One surface listing hidden threads, muted users, blocked users, and the
filters currently hiding things — each restorable on its own, from any route. Hidden threads
now remember their titles. - Diagnostics panel. Route, active features, settings changed from defaults, per-feature
worst-run timings, fetch queue state, recorded errors, and selector health, with a Copy button.
Selector health reports whether each registry surface is carried by its primary selector or a
fallback — the early warning for site drift. - Context-menu actions. Hide this thread, Mute this user, Tag this user, Preview this image,
Export this thread. Each reports why nothing happened instead of failing quietly. - Update notices. After a version change, the settings a build added are named, computed by
diffing the stored payload against the defaults. - Firefox build.
npm run package:firefoxproduces the Gecko variant. Everything but the
manifest is identical to the Chrome build.
Also in this release: thread export to Markdown / HTML / JSON with a media manifest, mute match
modes (exact, contains, regex), private notes on tagged users, a local trust overlay, full data
backup and restore, media privacy mode with click-to-load embeds, X/Twitter embed normalization,
and hover image previews.
Also fixed
mainNav's primary selector.topnav.topnav_mainmatches neither captured GLP page, so that
surface had been resolving through fallbacks all along;.mainpagenavlinksis the primary now.
The thread route no longer expects a site-wide main nav it does not have.- The image lightbox added a document click listener on every
initand never removed one, so
re-enabling the feature stacked another copy.
Verification
npm run verify — syntax and policy gates, selector registry against the real captured GLP
pages, both builds, structural manifest checks for Chrome and Firefox, and 83 runtime checks
driving the unpacked extension in Chromium against those captures.
Firefox is gated structurally only: the runtime harness drives Chromium, and Firefox cannot load
a temporary MV3 add-on from the command line without further tooling.
Install
Artifacts are unsigned by design.
- Chrome / Edge / Brave: download
glp-ultra-v3.1.0.zip, unzip, thenchrome://extensionsDeveloper mode > Load unpacked > pick the unzipped folder.
- Firefox: download
glp-ultra-firefox-v3.1.0.zip, unzip, thenabout:debugging>
This Firefox > Load Temporary Add-on > pickmanifest.json. Grant the host permission from the
add-on's permissions tab if you want the network-level ad blocking. - Userscript: install
glp-ultra.user.jsin Tampermonkey or Violentmonkey. The popup,
options page, and network-level ad blocking are extension-only.