AI Slop Code Risk Monitor

zxlie/FeHelper

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

😍FeHelper--Web前端助手(Awesome!Chrome & Firefox & MS-Edge Extension, All in one Toolbox!)

1.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for zxlie/FeHelper, a JavaScript project with 5,683 GitHub stars. SynthScan examined 107,047 lines of code across 309 source files, recording 112 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.9 (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.

1.9
Adjusted Signal
1.9
Raw Pattern Score
100%
Time Factor
2026-10-22
Last Push
5.7K
Stars
JavaScript
Language
107.0K
Lines of Code
309
Files
112
Pattern Hits
2026-10-31
Scan Date
0.00
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 3.0/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 61 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 8.0/100 · LOW

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

PR Review Velocity Impact 8.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 0HIGH 1MEDIUM 41LOW 70

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 6 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.

Decorative Section Separators39 hits · 122 pts
SeverityFileLineSnippetContext
MEDIUMtest/enhancements.test.js7// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/enhancements.test.js9// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/enhancements.test.js69// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/enhancements.test.js71// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/enhancements.test.js109// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/enhancements.test.js111// ═══════════════════════════════════════════════════════COMMENT
MEDIUM⚡test/json-utils.test.js49// ═══════════════════════════════════════════════════════COMMENT
MEDIUM⚡test/json-utils.test.js51// ═══════════════════════════════════════════════════════COMMENT
MEDIUM⚡test/json-utils.test.js61// ═══════════════════════════════════════════════════════COMMENT
MEDIUM⚡test/json-utils.test.js63// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js29// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js31// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js90// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js92// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js125// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js127// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js218// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js220// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js295// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js297// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js319// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js321// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js416// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js418// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js436// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js438// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js451// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js453// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js467// ═══════════════════════════════════════════════════════COMMENT
MEDIUMtest/json-utils.test.js469// ═══════════════════════════════════════════════════════COMMENT
MEDIUM⚡apps/json-format/json-utils.js7// ─── HTML 转义 ──────────────────────────────────────────────COMMENT
MEDIUM⚡apps/json-format/json-utils.js17// ─── URL 检测 ───────────────────────────────────────────────COMMENT
MEDIUM⚡apps/json-format/json-utils.js23// ─── BigNumber duck-typing ──────────────────────────────────COMMENT
MEDIUMapps/json-format/json-utils.js35// ─── 类型判断 ───────────────────────────────────────────────COMMENT
MEDIUMapps/json-format/json-utils.js48// ─── BigNumber → 字符串 ─────────────────────────────────────COMMENT
MEDIUMapps/json-format/json-utils.js264// ─── 深度解包嵌套 JSON 字符串 ──────────────────────────────COMMENT
MEDIUMapps/json-format/json-utils.js320// ─── Unicode 编解码 ─────────────────────────────────────────COMMENT
MEDIUMapps/json-format/json-utils.js358// ─── 安全的 safeStringify(保留 BigInt 精度)──────────────COMMENT
MEDIUMapps/json-format/json-utils.js555// ─── toast 安全版(XSS 防护)────────────────────────────────COMMENT
Hyper-Verbose Identifiers57 hits · 57 pts
SeverityFileLineSnippetContext
LOWtest/json-format-ai-actions.test.js39 expect(source).toContain('function buildJsonStructureSummary(source)');CODE
LOWapps/background/open-mode.js16function shouldReuseExistingToolTab(opts = {}) {CODE
LOWapps/datetime-calc/index.js1293function getUTCTimestampFromFixedOffsetLocal(timeStr, offsetMinutes) {CODE
LOWapps/regexp/index.js1465function populateVisualRegexPreset() {CODE
LOWapps/regexp/index.js1529 function updateFlagsInputFromCheckbox() {CODE
LOWapps/poster-maker/js/templateRenderer.js417function applyDetectedTextOverrides(root) {CODE
LOWapps/qr-code/fh.qr-content-utils.js131function buildWifiQrContentFromDescription(description) {CODE
LOWapps/qr-code/fh.qr-content-utils.js192function buildContactQrContentFromDescription(description) {CODE
LOWapps/qr-code/fh.qr-content-utils.js228function buildSmsQrContentFromDescription(description) {CODE
LOWapps/qr-code/fh.qr-content-utils.js263function buildEmailQrContentFromDescription(description) {CODE
LOWapps/qr-code/fh.qr-content-utils.js344function buildEventQrContentFromDescription(description) {CODE
LOWapps/qr-code/fh.qr-content-utils.js394function buildLocationQrContentFromDescription(description) {CODE
LOWapps/qr-code/fh.qr-content-utils.js422function buildQrContentFromDescription(description) {CODE
LOWapps/static/js/tool-layout.js61 function readChromeStorageSettings(callback) {CODE
LOWapps/static/js/tool-layout.js85 function syncToolDarkModeFromStorage() {CODE
LOWapps/static/js/tool-layout.js94 function ensureToolDarkModeWatcher() {CODE
LOWapps/static/js/tool-layout.js194 function collectTitleFromBrandContainer(container, brandLink, titleNodes) {CODE
LOWapps/static/js/dark-mode.js136 function readChromeStorageSettings(callback) {CODE
LOWapps/static/js/dark-mode.js209 function syncAutoDarkModeFromStorage(options) {CODE
LOWapps/static/js/dark-mode.js227 function ensureAutoDarkModeWatcher(options) {CODE
LOWapps/aiagent/fh.ai.js101 function getPreferredBuiltInOutputLanguage() {CODE
LOWapps/aiagent/fh.ai.js111 function getBuiltInTextLanguageOptions() {CODE
LOWapps/aiagent/fh.ai.js122 function buildBuiltInCreateOptions(extraOptions) {CODE
LOWapps/aiagent/fh.ai-inline.js58function renderInlineMarkdownFallback(source) {CODE
LOWapps/json-format/json-worker.js621function getBigNumberDisplayString(value) {CODE
LOWapps/json-format/json-worker.js635function tryConvertBigNumberToString(value) {CODE
LOWapps/json-format/json-worker.js662function rebuildBigNumberFromParts(value) {CODE
LOWapps/json-format/json-worker.js699function getAvailableBigNumberCtor() {CODE
LOWapps/json-format/json-utils.js49export function rebuildBigNumberFromParts(value) {CODE
LOWapps/json-format/json-utils.js82export function getBigNumberDisplayString(value) {CODE
LOWapps/json-format/json-utils.js123function replaceOutsideQuotedSegments(text, regex, replacer) {CODE
LOWapps/json-format/json-utils.js226export function normalizePreservedJsonPointer(path) {CODE
LOWapps/json-format/json-utils.js299export function unpackTopLevelEscapedJSON(value) {CODE
LOWapps/json-format/json-utils.js383export function sanitizeJsonDownloadFilename(note, fallbackPrefix = 'FeHelper', maxLength = 64) {CODE
LOWapps/json-format/index.js83function createJsonAiAvailabilityState() {CODE
LOWapps/json-format/index.js119function collectJsonStructureStats(value, path, stats, depth = 0) {CODE
LOWapps/json-format/index.js182function buildJsonStructureSummary(source) {CODE
LOWapps/json-format/index.js1924function unpackTopLevelEscapedJSON(value) {CODE
LOWapps/json-format/index.js1981function replaceOutsideQuotedSegments(text, regex, replacer) {CODE
LOWapps/json-format/format-lib.js2173 function getOrCreateImgPreview() {CODE
LOWapps/json-format/format-lib.js2568 function getBigNumberDisplayString(value) {CODE
LOWapps/json-format/format-lib.js2582 function tryConvertBigNumberToString(value) {CODE
LOWapps/json-format/format-lib.js2609 function rebuildBigNumberFromParts(value) {CODE
LOWapps/json-format/format-lib.js2646 function getAvailableBigNumberCtor() {CODE
LOWapps/json-format/json-auto-utils.js26 function rebuildBigNumberFromParts(value) {CODE
LOWapps/json-format/json-auto-utils.js57 function getBigNumberDisplayString(value) {CODE
LOWapps/json-format/json-auto-utils.js100 function replaceOutsideQuotedSegments(text, regex, replacer) {CODE
LOWapps/json-format/json-auto-utils.js208 function normalizePreservedJsonPointer(path) {CODE
LOWapps/json-format/json-auto-utils.js220 function parseStrictJSONWithBigInt(text) {CODE
LOWapps/json-format/json-auto-utils.js288 function unpackTopLevelEscapedJSON(value) {CODE
LOWapps/json-format/json-auto-utils.js366 function extractBalancedJSONContainer(source) {CODE
LOWapps/json-format/json-auto-utils.js502 function getStandaloneHTMLJSONCandidate(signals, options) {CODE
LOWapps/json-format/json-auto-utils.js558 function deletePreservedValueAtPath(rootValue, keys) {CODE
LOWapps/json-format/json-auto-utils.js607 function downloadJsonBlobWithAnchor(blob, filename, environment) {CODE
LOWapps/json-format/table-utils.js94export function isRenderableTableViewData(tableViewData) {CODE
LOWapps/json-format/table-utils.js104export function buildRenderableTableViewData(input) {CODE
LOWapps/color-picker/content-script.js263 function dissableColorPickerFromHere() {CODE
Fake / Example Data11 hits · 12 pts
SeverityFileLineSnippetContext
LOWwebsite/docs/mock-data.md169CREATE TABLE fake_data (CODE
LOWwebsite/docs/mock-data.md178INSERT INTO fake_data (name, email, phone, gender, age, address) VALUESCODE
LOW.agents/skills/design-taste-frontend/SKILL.md615### 9.D Content & Data ("Jane Doe" Effect)COMMENT
LOW.agents/skills/design-taste-frontend/SKILL.md616* **NO generic names.** "John Doe", "Sarah Chan", "Jack Su" → use creative, realistic, locale-appropriate names.COMMENT
LOWapps/mock-data/index.html232 <script type="text/javascript" src="fake-data-lib.js"></script>CODE
LOWapps/mock-data/index.js287 const tableName = 'fake_data';CODE
LOWapps/mock-data/index.js433 link.download = `fake-data-${Date.now()}.${extension}`;CODE
LOWapps/json-diff/index.js645 jsonBox.left.setOption('placeholder', placeholders.left);CODE
LOWapps/json-diff/index.js646 jsonBox.right.setOption('placeholder', placeholders.right);CODE
LOW⚡apps/code-compress/htmlminifier.min.js7require=function o(a,s,u){function l(t,e){if(!s[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return CODE
LOWapps/json-format/content-script.js306 .attr('placeholder', searchDisabled ? '请使用浏览器查找' : '搜索 Key / 值');CODE
Cross-Language Confusion (JS/TS)1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHapps/code-beautify/beautify.js1905 // but still return True as though you hadCOMMENT
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM⚡apps/code-compress/htmlminifier.min.js7require=function o(a,s,u){function l(t,e){if(!s[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return CODE
MEDIUM⚡apps/code-compress/htmlminifier.min.js7require=function o(a,s,u){function l(t,e){if(!s[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return CODE
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWapps/code-beautify/beautify.js441COMMENT
LOWapps/code-beautify/beautify.js2081// license. The Unicode regexps (for identifiers and whitespace) wereCOMMENT