AI Slop Code Risk Monitor

retorquere/zotero-better-bibtex

SlopCodeMonitor badge for retorquere/zotero-better-bibtex Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Make Zotero effective for us LaTeX holdouts

2.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for retorquere/zotero-better-bibtex, a TypeScript project with 7,256 GitHub stars. SynthScan examined 90,200 lines of code across 320 source files, recording 133 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 2.2 (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.

2.2
Adjusted Signal
2.2
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
7.3K
Stars
TypeScript
Language
90.2K
Lines of Code
320
Files
133
Pattern Hits
2026-10-31
Scan Date
0.03
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.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 6.4/100 · LOW

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

Agent Over-Engineering Ratio 2.7/100 · LOW

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

PR Review Velocity Impact 11.1/100 · LOW

Which changes need focused human review? 133 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 7MEDIUM 4LOW 118

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 133 distinct pattern matches across 13 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.

Unused Imports76 hits · 76 pts
SeverityFileLineSnippetContext
LOWtest/features/environment.py1CODE
LOWtest/features/steps/zotero.py2CODE
LOWtest/features/steps/zotero.py3CODE
LOWtest/features/steps/zotero.py6CODE
LOWtest/features/steps/zotero.py11CODE
LOWtest/features/steps/zotero.py14CODE
LOWtest/features/steps/zotero.py15CODE
LOWtest/features/steps/zotero.py15CODE
LOWtest/features/steps/zotero.py25CODE
LOWtest/features/steps/zotero.py26CODE
LOWtest/features/steps/zotero.py28CODE
LOWtest/features/steps/zotero.py77CODE
LOWtest/features/steps/zotero.py79CODE
LOWtest/features/steps/zotero.py80CODE
LOWtest/features/steps/citations.py3CODE
LOWtest/features/steps/citations.py3CODE
LOWtest/features/steps/steps.py4CODE
LOWtest/features/steps/steps.py6CODE
LOWtest/features/steps/steps.py18CODE
LOWtest/features/steps/steps.py19CODE
LOWtest/features/steps/steps.py20CODE
LOWtest/features/steps/steps.py22CODE
LOWtest/features/steps/steps.py26CODE
LOWtest/features/steps/library.py4CODE
LOWtest/features/steps/library.py4CODE
LOWtest/features/steps/library.py5CODE
LOWtest/features/steps/utils.py10CODE
LOWtest/features/steps/utils.py12CODE
LOWtest/features/steps/utils.py14CODE
LOWtest/features/steps/utils.py15CODE
LOWtest/features/steps/utils.py16CODE
LOWtest/features/steps/environment.py7CODE
LOWtest/features/steps/environment.py8CODE
LOWtest/features/steps/environment.py9CODE
LOWtest/features/steps/environment.py11CODE
LOWtest/features/steps/environment.py12CODE
LOWtest/features/steps/environment.py17CODE
LOWtest/features/steps/rdp.py3CODE
LOWutil/merge.py4CODE
LOWutil/mkpatch.py3CODE
LOWutil/mkpatch.py8CODE
LOWutil/mkpatch.py10CODE
LOWutil/changelog.py8CODE
LOWutil/mkpatch2.py3CODE
LOWutil/mkpatch2.py5CODE
LOWutil/mkpatch2.py6CODE
LOWutil/mkpatch2.py8CODE
LOWutil/mkpatch2.py9CODE
LOWutil/mkpatch2.py9CODE
LOWutil/mkpatch2.py10CODE
LOWutil/balance.py4CODE
LOWutil/balance.py7CODE
LOWutil/balance.py9CODE
LOWutil/balance.py11CODE
LOWutil/scrub-profile.py6CODE
LOWutil/scrub-profile.py8CODE
LOWutil/publish-debug-bridge.py4CODE
LOWutil/publish-debug-bridge.py5CODE
LOWutil/merge-durations.py3CODE
LOWutil/merge-durations.py5CODE
16 more matches not shown…
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippetContext
CRITICALtranslators/bibtex/unicode_translator.ts43 packages: this.translation.collected.preferences.packages.trim().split(/\s*,\s*/),CODE
CRITICALtranslators/bibtex/entry.ts925 const bibtexStrings = this.translation.collected.preferences.exportBibTeXStrings.startsWith('match')CODE
CRITICALtranslators/bibtex/entry.ts1066 if (this.translation.BetterBibTeX && this.translation.collected.preferences.bibtexURL.endsWith('-ish')) {CODE
CRITICALtranslators/csl/csl.ts41 if (this.translation.collected.preferences.postscript.trim()) {CODE
Empty Error Handlers6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHtest/features/steps/zotero.py990except:CODE
HIGHtest/features/steps/zotero.py544except psutil.NoSuchProcess:CODE
HIGHtest/features/steps/zotero.py553except psutil.NoSuchProcess:CODE
HIGHtest/features/steps/zotero.py610except requests.exceptions.RequestException:CODE
HIGHtest/features/steps/utils.py112except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):CODE
HIGHutil/merge.py31except Exception:CODE
Over-Commented Block13 hits · 13 pts
SeverityFileLineSnippetContext
LOWzotero-plugin.ini1[profile]COMMENT
LOWzotero-plugin.ini21# # extensions.zotero.prosec-linker.title.url.2COMMENT
LOWtranslators/bibtex/entry.ts1701// 'basque'COMMENT
LOWtranslators/bibtex/entry.ts1721// 'french'COMMENT
LOWtranslators/bibtex/entry.ts1741// 'malayalam'COMMENT
LOWtranslators/bibtex/entry.ts1761// 'syriac'COMMENT
LOWtest/features/steps/zotero.py381 if self.ext in ['.csl.json', '.csl.yml', '.hayagriva.yml']:COMMENT
LOWutil/json-rpc.sh1#!/bin/bashCOMMENT
LOWutil/cayw.sh1#!/bin/bashCOMMENT
LOWtypings/async-indexed-db.d.ts21 // delete(key: IDBValidKey | IDBKeyRange): IDBRequest<void>COMMENT
LOWsetup/babel_languages.py21 return self[name]COMMENT
LOWsetup/babel_languages.py41# COMMENT
LOWhooks/_gh_actions_expand.py1#!/usr/bin/env python3COMMENT
Deep Nesting11 hits · 9 pts
SeverityFileLineSnippetContext
LOWtest/features/steps/zotero.py96CODE
LOWtest/features/steps/zotero.py294CODE
LOWtest/features/steps/zotero.py568CODE
LOWtest/features/steps/zotero.py718CODE
LOWtest/features/steps/citations.py18CODE
LOWtest/features/steps/citations.py38CODE
LOWtest/features/steps/utils.py88CODE
LOWtest/features/steps/utils.py117CODE
LOWtest/features/steps/rdp.py56CODE
LOWutil/rebalance-old.py52CODE
LOWsetup/item.py73CODE
Excessive Try-Catch Wrapping7 hits · 8 pts
SeverityFileLineSnippetContext
LOWtest/features/steps/zotero.py624 except Exception as e:STRING
LOWtest/features/steps/steps.py584 except Exception as e:STRING
MEDIUMtest/features/steps/steps.py263def parse_json(text):CODE
LOWutil/merge.py31 except Exception:CODE
LOWutil/merge.py36 except Exception as err:CODE
MEDIUMutil/merge.py28def parse_content(text):CODE
LOWutil/migrate-prefs.py36 except Exception as err:CODE
Hyper-Verbose Identifiers7 hits · 7 pts
SeverityFileLineSnippetContext
LOWtest/features/steps/utils.py67def expand_scenario_variables(context, filename, star=True):CODE
LOWtest/features/steps/environment.py89def patch_scenario_with_softfail(scenario):CODE
LOWtest/features/steps/environment.py98 def scenario_run_with_softfail(scenario_run, *args, **kwargs):CODE
LOWcontent/better-bibtex.ts166function parseLibraryKeyFromCitekey(libraryKey) {CODE
LOWcontent/menu-helper.ts76export function selectedItemsHaveCitationKeyInExtra(): boolean {CODE
LOWcontent/menu-helper.ts83export async function applyCitationKeyFromExtra(move: boolean): Promise<void> {CODE
LOWcontent/cayw/pick.ts241function createDefaultDocumentData(documentId: string): string {CODE
Verbosity Indicators2 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡content/text.ts442 // Step 1: Converting to number assuming 0 in number systemCOMMENT
LOW⚡content/text.ts449 // Step 2: Getting rid of 0, as 0 is not part of number systemCOMMENT
Structural Annotation Overuse2 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡content/text.ts442 // Step 1: Converting to number assuming 0 in number systemCOMMENT
LOW⚡content/text.ts449 // Step 2: Getting rid of 0, as 0 is not part of number systemCOMMENT
Dead Code2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMtest/features/steps/zotero.py162CODE
MEDIUMtest/features/steps/zotero.py163CODE
Cross-Language Confusion1 hit · 2 pts
SeverityFileLineSnippetContext
HIGHtest/features/steps/steps.py404 context.zotero.execute('await Zotero.BetterBibTeX.TestSupport.pinCiteKey(null, action)', action=change)STRING
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtest/features/steps/utils.py108 # Check if process name contains the given name string.COMMENT
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWutil/zver.py21 step['attributes']['placeholder'] = versionsCODE