AI Slop Code Risk Monitor

gorhill/uBlock

SlopCodeMonitor badge for gorhill/uBlock Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.

0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for gorhill/uBlock, a JavaScript project with 68,954 GitHub stars. SynthScan examined 257,981 lines of code across 671 source files, recording 112 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 0.6 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

0.6
Adjusted Signal
0.6
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
69.0K
Stars
JavaScript
Language
258.0K
Lines of Code
671
Files
112
Pattern Hits
2026-10-31
Scan Date
0.01
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 2.0/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 100 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.9/100 · LOW

Are imports declared and package/API names verified? 12 finding(s).

Agent Over-Engineering Ratio 1.5/100 · LOW

Are wrappers, guards, and repeated structures necessary? 77 finding(s).

PR Review Velocity Impact 2.9/100 · LOW

Which changes need focused human review? 112 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 4HIGH 0MEDIUM 1LOW 107

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 112 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers77 hits · 78 pts
SeverityFileLineSnippetContext
LOWplatform/firefox/vapi-scripting.js248function onCreatedNavigationTarget(details) {CODE
LOWplatform/mv3/make-rulesets.js720async function processGenericCosmeticFilters(CODE
LOWplatform/mv3/make-rulesets.js888async function processScriptletFramework() {CODE
LOWplatform/mv3/extension/js/scripting-manager.js366export async function getRegisteredContentScripts() {CODE
LOWplatform/mv3/extension/js/ruleset-manager.js201export async function updateDynamicAndSessionRules() {CODE
LOWplatform/mv3/extension/js/ruleset-manager.js440export async function getDefaultRulesetsFromEnv() {CODE
LOWplatform/mv3/extension/js/ruleset-manager.js714async function getEnabledRulesetsDetails(stockOnly = false) {CODE
LOWplatform/mv3/extension/js/action.js76export async function registerToolbarIconToggler(context) {CODE
LOWplatform/mv3/extension/js/background.js169async function onPermissionGrantedThruExtension(details, origins) {CODE
LOWplatform/mv3/extension/js/background.js186async function onPermissionGrantedThruBrowser(origins) {CODE
LOWplatform/mv3/extension/js/ubo-parser.js312function convertInitiatorDomainsToRequestDomains(rule) {CODE
LOWplatform/mv3/extension/js/filter-manager-ui.js90async function removeSelectorsFromHostname(node) {CODE
LOWplatform/mv3/extension/js/filter-manager-ui.js107async function unremoveSelectorsFromHostname(node) {CODE
LOWplatform/mv3/extension/js/filter-manager-ui.js205async function debounceRenderCustomFilters() {CODE
LOWplatform/mv3/extension/js/picker-ui.js245function attributeNameFromSelector(part) {CODE
LOWplatform/mv3/extension/js/imported-lists.js55async function scheduleImportedListsUpdate(lists) {CODE
LOWplatform/mv3/extension/js/imported-lists.js85export async function updateEnabledImportedLists(toEnable, toDisable) {CODE
LOWplatform/mv3/extension/js/imported-lists.js153export async function getImportedListCompiledData(listid) {CODE
LOWplatform/mv3/extension/js/mode-manager.js304async function writeFilteringModeDetails(afterDetails) {CODE
LOWplatform/mv3/extension/js/mode-manager.js383export async function syncWithBrowserPermissions() {CODE
LOWplatform/mv3/extension/js/report.js69async function reportSpecificFilterIssue() {CODE
LOWplatform/mv3/extension/js/filter-manager.js69export async function customFiltersFromHostname(hostname) {CODE
LOWplatform/mv3/extension/js/filter-manager.js118export async function moveManagedCustomScriptlets() {CODE
LOWplatform/mv3/extension/js/offscreen/compile-filters.js165function sanitizeCompiledCosmeticFilter(compiled) {CODE
LOWsrc/web_accessible_resources/google-ima-dai.js99 var initializePodStreamRequest = function initializePodStreamRequest(instance, podStreamRequest) {CODE
LOWsrc/web_accessible_resources/google-ima-dai.js161 var VideoStitcherLiveStreamRequest = function VideoStitcherLiveStreamRequest(videoStitcherLiveStreamRequest) {CODE
LOWsrc/web_accessible_resources/google-ima-dai.js170 var VideoStitcherVodStreamRequest = function VideoStitcherVodStreamRequest(videoStitcherVodStreamRequest) {CODE
LOWsrc/web_accessible_resources/google-ima-dai.js222 var getStoredDaiSdkFeatureFlags = function getStoredDaiSdkFeatureFlags(instance) {CODE
LOWsrc/web_accessible_resources/google-ima-dai.js267 var hasVideoStitcherLiveIdentifiers = function hasVideoStitcherLiveIdentifiers(streamRequest) {CODE
LOWsrc/web_accessible_resources/google-ima-dai.js275 var hasVideoStitcherVodIdentifiers = function hasVideoStitcherVodIdentifiers(streamRequest) {CODE
LOWsrc/web_accessible_resources/google-ima-dai.js388 var createStreamDataFromResponse = function createStreamDataFromResponse(streamRequest, cuepoints, responseData)CODE
LOWsrc/js/scriptlet-filtering.js105function assembleIsolatedWorldWrapper(isolatedCode, options) {CODE
LOWsrc/js/diff-updater.js183async function fetchPatchDetailsFromCDNs(assetDetails) {CODE
LOWsrc/js/support.js230function reportSpecificFilterIssue() {CODE
LOWsrc/js/benchmarks.js133export async function benchmarkStaticNetFiltering(options = {}) {CODE
LOWsrc/js/benchmarks.js283export async function benchmarkDynamicNetFiltering() {CODE
LOWsrc/js/benchmarks.js310export async function benchmarkCosmeticFiltering() {CODE
LOWsrc/js/benchmarks.js354export async function benchmarkScriptletFiltering() {CODE
LOWsrc/js/assets.js614function updateAssetSourceRegistry(json, silent = false) {CODE
LOWsrc/js/static-net-filtering.js5672function parseRedirectRequestValue(directive) {CODE
LOWsrc/js/traffic.js368function onBeforeBehindTheSceneRequest(fctxt) {CODE
LOWsrc/js/resources/object-prune.js162function trustedPruneInboundObject(CODE
LOWsrc/js/resources/object-prune.js242function trustedPruneOutboundObject(CODE
LOWsrc/js/resources/json-edit.js118function trustedEditOutboundObject(propChain = '', jsonq = '') {CODE
LOWsrc/js/resources/json-edit.js551function trustedEditObjectOnGetter(...args) {CODE
LOWsrc/js/resources/json-edit.js654function trustedEditObjectOnSetter(...args) {CODE
LOWsrc/js/resources/json-edit.js902function trustedJsonEditXhrResponse(jsonq = '', ...args) {CODE
LOWsrc/js/resources/json-edit.js1020function trustedJsonEditXhrRequest(jsonq = '', ...args) {CODE
LOWsrc/js/resources/json-edit.js1142function trustedJsonEditFetchResponse(jsonq = '', ...args) {CODE
LOWsrc/js/resources/json-edit.js1298function trustedEditInboundElement(...args) {CODE
LOWsrc/js/resources/json-edit.js1351function trustedJsonEditFetchRequest(jsonq = '', ...args) {CODE
LOWsrc/js/resources/json-edit.js1525function trustedJsonlEditXhrResponse(jsonq = '', ...args) {CODE
LOWsrc/js/resources/json-edit.js1656function trustedJsonlEditFetchResponse(jsonq = '', ...args) {CODE
LOWsrc/js/resources/localstorage.js182export function trustedSetLocalStorageItem(key = '', value = '', ...varargs) {CODE
LOWsrc/js/resources/localstorage.js197export function trustedSetSessionStorageItem(key = '', value = '', ...varargs) {CODE
LOWsrc/js/resources/prevent-settimeout.js205export function preventRequestAnimationFrame(CODE
LOWsrc/js/resources/scriptlets.js1560function trustedReplaceFetchResponse(...args) {CODE
LOWsrc/js/resources/scriptlets.js1576function trustedReplaceXhrResponse(CODE
LOWsrc/js/resources/scriptlets.js1815function trustedReplaceOutboundText(CODE
LOWsrc/js/resources/scriptlets.js1882function trustedSuppressNativeMethod(CODE
17 more matches not shown…
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippetContext
CRITICALplatform/mv3/extension/js/dnr-parser.js190 rule.action.redirect.transform.queryTransform.addOrReplaceParams.push({});CODE
CRITICALplatform/mv3/extension/js/dnr-parser.js197 const item = rule.action.redirect.transform.queryTransform.addOrReplaceParams.at(-1);CODE
CRITICALplatform/mv3/extension/js/dnr-parser.js214 rule.action.redirect.transform.queryTransform.removeParams.push(node.val);CODE
CRITICALsrc/lib/codemirror/lib/codemirror.js8869 return this.cm.display.wrapper.ownerDocument.getSelection()CODE
Over-Commented Block18 hits · 18 pts
SeverityFileLineSnippetContext
LOWsrc/css/popup-fenix.css421 flex-direction: row;COMMENT
LOWsrc/css/popup-fenix.css441#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).is3p:not(.hasScript):not(.hasFrame) *,COMMENT
LOWsrc/css/popup-fenix.css501#firewall > div > span[data-acount]::before,COMMENT
LOWsrc/js/tab.js81})();COMMENT
LOWsrc/js/tab.js101//COMMENT
LOWsrc/js/tab.js141COMMENT
LOWsrc/js/tab.js761 mostRecentRootDocURL = '';COMMENT
LOWsrc/js/tab.js881 //COMMENT
LOWsrc/js/reverselookup-worker.js101// completely unaffected by reverse lookup requirements.COMMENT
LOWsrc/js/jsonpath.js161 return JSONPath.toJSON(obj, null, ...args)COMMENT
LOWsrc/js/benchmarks.js41// https://cdn.cliqz.com/adblocking/requests_top500.json.gzCOMMENT
LOWsrc/js/static-net-filtering.js41// need to be called by module clients. For now, I want modularizing withCOMMENT
LOWsrc/js/traffic.js241COMMENT
LOWsrc/js/traffic.js321 // +--------+--------+--------+--------|COMMENT
LOWsrc/js/codemirror/search.js1// The following code is heavily based on the standard CodeMirrorCOMMENT
LOWsrc/js/resources/scriptlets.js441 fn: adjustSetTimeout,COMMENT
LOWsrc/js/scriptlets/epicker.js1221// - Install the element picker UI, and wait for the component to establishCOMMENT
LOWsrc/lib/codemirror/lib/codemirror.js341 else { bidiOther = i; }COMMENT
Fake / Example Data8 hits · 8 pts
SeverityFileLineSnippetContext
LOWdocs/tests/procedural-cosmetic-filters.html147 <div class="pass"><div class="fail"><a>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempoCODE
LOWdocs/tests/procedural-cosmetic-filters.html147 <div class="pass"><div class="fail"><a>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempoCODE
LOWdocs/tests/procedural-html-filters.html117 <div class="pass"><div class="fail"><a>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempoCODE
LOWdocs/tests/procedural-html-filters.html117 <div class="pass"><div class="fail"><a>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempoCODE
LOWsrc/js/static-filtering-parser.js3321 'part', 'placeholder',CODE
LOWsrc/js/cloud-ui.js154 dom.attr(input, 'placeholder', self.cloud.options.defaultDeviceName);CODE
LOWsrc/js/i18n.js258 const text = i18n$(elem.getAttribute('placeholder'));CODE
LOWsrc/js/i18n.js260 elem.setAttribute('placeholder', text);CODE
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/js/dashboard-common.js34 // Step 1: build dictionary for existing lines.COMMENT
LOWsrc/js/dashboard-common.js60 // Step 2: use above dictionary to filter out duplicate lines.COMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/js/dashboard-common.js34 // Step 1: build dictionary for existing lines.COMMENT
LOWsrc/js/dashboard-common.js60 // Step 2: use above dictionary to filter out duplicate lines.COMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/js/assets.js390// Support the seamless loading of sublists.COMMENT