Skip to content

GLP Ultra v3.2.0

Choose a tag to compare

@SysAdminDoc SysAdminDoc released this 07 Aug 03:07
· 48 commits to main since this release

GLP Ultra v3.2.0

SysAdminDoc/GLP_Userscript — one engine building the MV3 extension, the userscript, and the
Firefox variant.

Quote backlinks, a noise budget, media actions, accessibility controls, shareable packs, and
optional settings sync — plus six fixes, three of which were things the new features found.

Fixed

  • A tab could come up styled with every feature dead. The shim reads chrome.storage at
    document_start; when the mirrored copy differed from localStorage it pushed the difference
    straight into the engine, which began its feature run against a body the parser had not filled
    yet and marked the run done. The real page was never touched — CSS injected, body flagged
    active, no post numbers, no toolbar, no error anywhere. Startup now waits for the document.
  • Seven settings did nothing until the next page load. Back-to-top, both infinite scrolls, the
    scroll progress bar, thread previews, quick search, and auto-refresh had no apply handler
    because their init would have stacked duplicates. Each now guards re-entry.
  • Unmuting your last muted user left their posts hidden until a reload. The mute pass returned
    early on an empty list, skipping the cleanup that takes the class off. Switching the feature off
    entirely had the same effect. Found by the noise budget disagreeing with itself.
  • Auto-refresh kept counting down in a background tab, stacking refreshes against the moment
    the tab came back.
  • An image still loading was treated as chrome and skipped by the lightbox, the gallery, and the
    new media actions: naturalWidth is 0 until an image loads, and the shared predicate
    measured it during a document-idle pass.

Added

  • Quote backlinks. GLP marks each post with a reply<id> permalink and each quote with a
    "Quoting:" footer, which is enough to reconstruct who answered whom — an edge the site only
    exposes forward. A post now lists the replies that quoted it; hovering a chip shows an excerpt,
    clicking scrolls to it and flashes it, and a quote whose target is on the same page gains an
    in-page jump.
  • Noise budget. A toolbar chip counts what is being kept off the page — ads removed, muted and
    blocked posts, keyword hits, image-only replies, hidden and pinned threads, collapsed quotes —
    and opens a breakdown leading to the recovery shelf. Every figure but the ad count is read off
    the live DOM, so it cannot drift from what is actually hidden.
  • Save / Open / Copy link on post images. Saving fetches the blob so the file keeps its real
    name; a hotlinked third-party image cannot be fetched from a content script, so it falls back to
    opening the image and says why.
  • Accessibility controls. Reduce Motion, High Contrast, and Larger Click Targets, emitted last
    in the stylesheet on purpose — a theme that beats the motion or contrast setting is a bug.
  • Shareable packs. A theme pack carries the look, a filter pack carries mutes, blocks, and
    keyword rules. Importing a filter pack adds — lists unioned, keywords merged — so a pack
    someone else wrote can never delete your mutes.
  • Optional settings sync (off by default). Settings only, never the user lists, arbitrated by
    a stamp so the most recent change wins.

Verification

npm run verify — syntax and policy gates, the selector registry against the real captured GLP
pages, both builds, structural manifest checks for Chrome and Firefox, and 136 runtime checks
(up from 83) driving the unpacked extension in Chromium against those captures.

New gates were bait-verified: reverting each fix makes its checks fail. One check was found
passing for the wrong reason — a missing element made both sides of a comparison -1 — and the
behaviour it claimed to cover is now recorded as unobservable here rather than left as
reassurance. Firefox remains gated structurally only.

Install

Artifacts are unsigned by design.

  • Chrome / Edge / Brave: download glp-ultra-v3.2.0.zip, unzip, then chrome://extensions

    Developer mode > Load unpacked > pick the unzipped folder.

  • Firefox: download glp-ultra-firefox-v3.2.0.zip, unzip, then about:debugging >
    This Firefox > Load Temporary Add-on > pick manifest.json.
  • Userscript: install glp-ultra.user.js in Tampermonkey or Violentmonkey. The popup, options
    page, network-level ad blocking, and settings sync are extension-only.