feat(browser): adblock on|off|status — the per-site off switch for pinned uBlock Origin Lite (DIVE-4516) - #83
Merged
Merged
Conversation
…for pinned uBlock Origin Lite (DIVE-4516) The stack half of this row installs ONE extension into agent Chrome profiles by managed policy and blocks every other. Some sites break under filtering, and uBOL's own per-site switch lives in its popup, which is not scriptable from a seat. The one that is, is Chrome policy's `ExtensionSettings.<id>.runtime_blocked_hosts`. That key is documented against content-script injection and extension API access, and uBOL Lite filters through declarativeNetRequest in the network stack — a different mechanism — so it was MEASURED before the verb was built on it, on exact-swallow at Chrome 153 (receipt on DIVE-4516): with the key set, the DNR block disappeared and the content script stopped injecting; removing it restored both. - Root, like `setup`, because chrome policy on Linux is machine-level only. - `/var/lib/5dive/browser/ubol/adblock-off` is the source of truth, so the nightly root converge that re-renders the policy file preserves a site a seat turned off. - Both host patterns are written: `*://*.example.com` does not match `example.com`, and a wildcard-only off switch would report success while leaving the apex filtered. - The verb says a running `serve` may need a restart rather than promising live pickup: only fresh launches were measured. 18 new arms in tests/browser_plugin_unit.sh (531 pass, 0 fail). Mutation checked: a wildcard-only off switch reds 3 arms; leaving an empty array instead of deleting the key reds 1. README and the connect-site skill say when to reach for it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
5dive browser adblock on|off|status <site>— the per-site off switch for thepinned uBlock Origin Lite that DIVE-4516's stack half installs into agent Chrome
profiles by managed policy. The plugin half of that row.
The premise was measured before it was built on
uBOL's own per-site switch lives in its popup and is not scriptable from a seat.
The one that is, is Chrome policy's
ExtensionSettings.<id>.runtime_blocked_hosts— and that key is documented against content-script injection and extension API
access, while uBOL Lite filters through declarativeNetRequest, a static
ruleset evaluated in the network stack. Different mechanisms; the row said measure
it rather than assume it.
Measured on exact-swallow at Chrome 153 (receipt on the row, 2026-09-14): with the
key set for the host, the DNR block disappeared (0 → 3000 divs, 149 B → 65002 B)
and the content script stopped injecting; removing it restored both. It is a
real off switch, and it is total for that host.
Four decisions worth reviewing
setup. Chrome policy on Linux is machine-level only — there is noper-user policy path — so
adblockjoinssetupas the second verb a root calleris not dropped out of at the bottom of
bin/browser.T2c8asserts no thirdverb quietly joins them.
/var/lib/5dive/browser/ubol/adblock-off. The nightly root converge re-rendersthe whole policy file; a site turned off at 14:00 that lived only in that file
would be silently re-filtered at 03:00, with nobody to notice.
*://*.example.comdoes not matchexample.com, so awildcard-only off switch reports success and leaves the apex — the host the seat
actually typed — still filtered. Mutating this to wildcard-only reds 3 arms.
says
shot/readtake it on their next render and a browser already runningunder
servemay needserve <site> --stop.A box with no policy file still records the setting and says so plainly, rather than
reporting an off switch it did not apply.
Checked
tests/browser_plugin_unit.sh— 531 arms, 531 pass (513 before, 18 new).Mutation-checked on this tree: a wildcard-only off switch reds 3; leaving an empty
array instead of deleting the key reds 1. The non-root refusal is covered by a
paired positive/negative (
T91refuses at exit 77,T93succeeds under a rootcaller), not by a mutant — the mutant patch for it did not apply cleanly and is not
claimed here.
Plugin version 1.6.0. README and the connect-site skill both say when to reach for
it. Not raising
_BS_PLUGIN_MINin 5dive-api: that is the fleet rollout knob,and it should turn when the CRX this verb switches off is actually on the boxes.
🤖 Generated with Claude Code