GLP Ultra v3.5.0
GLP Ultra v3.5.0
SysAdminDoc/GLP_Userscript — the roadmap's risk table has named these mitigations since Phase 3
with nothing behind them. This is the four that were still missing, and the defect found while
implementing the fifth.
Fixed
A failing site got hammered as fast as it could refuse. The fetch queue stamped its
rate-limiter clock only after a successful response. So on a run of failures the elapsed time
kept growing, the computed delay went negative, and the one-second floor between requests stopped
applying exactly when it mattered — a thread watcher with twenty threads on it emptying its queue
into a site that was already saying no.
Both outcomes stamp the clock now, and a refusal also backs off: the server's own Retry-After
when it sent one, otherwise exponential from the caller's floor, capped at a minute so an outage
cannot park the queue for hours. Consecutive failures and the remaining backoff are reported in
diagnostics, so a watcher that has gone quiet says why.
Added
Safe mode, so custom CSS cannot lock you out of the settings that undo it. Pasting
* { display: none !important } into Custom CSS hid the settings panel along with the page — it
measured 0px wide — and the setting is saved, so reloading brought the same page straight back.
There was no way to reach the control that would remove it.
Two layers now. The recovery surfaces are re-asserted after the user's rules at a specificity
their scoped selectors can reach, which covers the blanket-rule footgun. Deliberately
out-specifying that is still possible, so safe mode drops custom CSS entirely — and it is
reachable from two places page CSS cannot touch: the userscript manager's menu, and the extension
popup, which is a separate document.
GLP Ultra takes precedence over Dark Reader. Two dark themes over one page wash out the
accents each palette was measured against, and it reads as a theme bug rather than as two
extensions disagreeing. Uses <meta name="darkreader-lock"> — Dark Reader's own documented
opt-out, which it honours live rather than only at load — and removes it again the moment GLP
Ultra stops theming, so switching it off hands the page back instead of leaving it light.
The settings payload an upgrade is about to prune is banked first. Loading keeps only the keys
the current schema declares, and the first save after that writes the pruned object back — so
anything a predecessor stored under a name this build does not know disappeared with the upgrade,
silently. One copy of the pre-upgrade payload is now kept and offered back from the recovery shelf
with an undo. It is mirrored to chrome.storage, because a recovery artifact that dies when site
data is cleared is not much of one.
Verification
189 runtime checks, up from 173, driving the unpacked extension against the real captures.
Each of the above is asserted by doing the thing rather than by reading the code: pasting the
blanket rule and measuring the panel that should have vanished, reloading with safe mode on
because a reload is the first thing anyone locked out will try, serving 429 Retry-After: 7 to
the thread the watcher polls, and restoring a banked payload to watch a pre-upgrade value come
back. Every one of them was run against the bug restored, and fails there.
Install
Artifacts are unsigned by design.
- Chrome / Edge / Brave: download
glp-ultra-v3.5.0.zip, unzip, thenchrome://extensionsDeveloper mode > Load unpacked > pick the unzipped folder.
- Firefox: download
glp-ultra-firefox-v3.5.0.zip, unzip, thenabout:debugging>
This Firefox > Load Temporary Add-on > pickmanifest.json. - Userscript: install
glp-ultra.user.jsin Tampermonkey or Violentmonkey.