AI Slop Code Risk Monitor

BlueWallet/BlueWallet

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

Bitcoin wallet for iOS & Android. Built with React Native

0.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for BlueWallet/BlueWallet, a TypeScript project with 3,342 GitHub stars. SynthScan examined 197,632 lines of code across 1200 source files, recording 165 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 0.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.

0.9
Adjusted Signal
0.9
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
3.3K
Stars
TypeScript
Language
197.6K
Lines of Code
1.2K
Files
165
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 2.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.8/100 · LOW

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

Agent Over-Engineering Ratio 1.6/100 · LOW

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

PR Review Velocity Impact 4.6/100 · LOW

Which changes need focused human review? 165 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 8LOW 156

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 165 distinct pattern matches across 9 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.

Fake / Example Data73 hits · 73 pts
SeverityFileLineSnippetContext
LOWloc/id_id.json62 "placeholder": "Faktur atau alamat",CODE
LOWloc/hy.json62 "placeholder": "Հաշիվ-ֆակտուրա կամ հասցե",CODE
LOWloc/tr_tr.json62 "placeholder": "Fatura veya adres",CODE
LOWloc/ua.json62 "placeholder": "Рахунок або адреса",CODE
LOWloc/hu_hu.json62 "placeholder": "Számla",CODE
LOWloc/es_419.json60 "placeholder": "Factura o dirección",CODE
LOWloc/pt_pt.json62 "placeholder": "Fatura ou endereço",CODE
LOWloc/sv_se.json62 "placeholder": "Faktura eller adress",CODE
LOWloc/bn.json62 "placeholder": "ইনভয়েস বা ঠিকানা",CODE
LOWloc/fo.json62 "placeholder": "Gjaldsumbøn ella adressa",CODE
LOWloc/ko_KR.json62 "placeholder": "인보이스 또는 주소",CODE
LOWloc/ms.json62 "placeholder": "Invois atau alamat",CODE
LOWloc/zh_cn.json60 "placeholder": "发票或地址",CODE
LOWloc/bg_bg.json62 "placeholder": "Фактура или адрес",CODE
LOWloc/ru.json62 "placeholder": "Инвойс или адрес",CODE
LOWloc/pl.json60 "placeholder": "Faktura lub adres",CODE
LOWloc/et_EE.json62 "placeholder": "Arve või aadress",CODE
LOWloc/th_th.json62 "placeholder": "ใบแจ้งหนี้หรือแอดเดรส",CODE
LOWloc/zar_afr.json62 "placeholder": "Faktuur of adres",CODE
LOWloc/kk@Cyrl.json62 "placeholder": "Шот немесе мекенжай",CODE
LOWloc/ur.json62 "placeholder": "انوائس یا پتہ",CODE
LOWloc/az.json62 "placeholder": "Faktura və ya ünvan",CODE
LOWloc/en.json60 "placeholder": "Invoice or address",CODE
LOWloc/ka.json62 "placeholder": "ინვოისი ან მისამართი",CODE
LOWloc/pa.json62 "placeholder": "ਇਨਵੌਇਸ ਜਾਂ ਪਤਾ",CODE
LOWloc/st_ZA.json62 "placeholder": "Invoisi kapa aterese",CODE
LOWloc/km.json62 "placeholder": "វិក្កយបត្រ ឬអាសយដ្ឋាន",CODE
LOWloc/sr_RS.json62 "placeholder": "Faktura ili adresa",CODE
LOWloc/it.json62 "placeholder": "Fattura o indirizzo",CODE
LOWloc/fi_fi.json62 "placeholder": "Lasku",CODE
LOWloc/kn.json62 "placeholder": "ಸರಕುಪಟ್ಟಿ ಅಥವಾ ವಿಳಾಸ",CODE
LOWloc/pcm.json62 "placeholder": "Invoice or address abeg",CODE
LOWloc/cy.json62 "placeholder": "Anfoneb neu gyfeiriad",CODE
LOWloc/gug_PY.json62 "placeholder": "Factura térã renda",CODE
LOWloc/ne.json62 "placeholder": "इनभ्वाइस वा ठेगाना",CODE
LOWloc/vi_vn.json62 "placeholder": "Hóa đơn hoặc địa chỉ",CODE
LOWloc/am.json62 "placeholder": "ደረሰኝ ወይም አድራሻ",CODE
LOWloc/zar_xho.json62 "placeholder": "Invoyisi okanye idilesi",CODE
LOWloc/sq_AL.json62 "placeholder": "Fatura ose adresa",CODE
LOWloc/el.json62 "placeholder": "Τιμολόγιο ή διεύθυνση",CODE
LOWloc/ro.json62 "placeholder": "Factură sau adresă",CODE
LOWloc/ff.json62 "placeholder": "Faktiir maa adreesi",CODE
LOWloc/hi.json62 "placeholder": "इनवॉइस या पता",CODE
LOWloc/ca.json62 "placeholder": "Factura o adreça",CODE
LOWloc/sl_SI.json62 "placeholder": "Račun ali naslov",CODE
LOWloc/si_LK.json62 "placeholder": "ඉන්වොයිසිය හෝ ලිපිනය",CODE
LOWloc/nl_nl.json62 "placeholder": "Factuur of adres",CODE
LOWloc/eu.json62 "placeholder": "Faktura edo helbidea",CODE
LOWloc/fil_PH.json62 "placeholder": "Invoice o address",CODE
LOWloc/he.json62 "placeholder": "חשבונית או כתובת",CODE
LOWloc/nb_no.json62 "placeholder": "Faktura eller adresse",CODE
LOWloc/fa.json62 "placeholder": "صورت‌حساب یا آدرس",CODE
LOWloc/da_dk.json62 "placeholder": "Faktura eller adresse",CODE
LOWloc/hak.json62 "placeholder": "發票抑係地址",CODE
LOWloc/bqi.json62 "placeholder": "سۊرت هساو یا آدرس",CODE
LOWloc/de_de.json62 "placeholder": "Rechnung oder Adresse",CODE
LOWloc/pt_br.json62 "placeholder": "Fatura ou endereço",CODE
LOWloc/zh_tw.json62 "placeholder": "發票或地址",CODE
LOWloc/lv.json62 "placeholder": "Rēķins vai adrese",CODE
LOWloc/fr_fr.json62 "placeholder": "Facture ou adresse",CODE
13 more matches not shown…
Hyper-Verbose Identifiers44 hits · 46 pts
SeverityFileLineSnippetContext
LOWloc/index.ts505export function formatBalanceWithoutSuffix(balance = 0, toUnit: string, withFormatting = false): string | number {CODE
LOWloc/index.ts551export function formatStringAddTwoWhiteSpaces(text: string): string {CODE
LOWtests/e2e/helperz.js203export async function extractTextFromElementById(id) {CODE
LOWtests/e2e/helperz.js273export async function tapAndTapAgainIfElementIsNotVisible(idToTap, idToCheckVisible) {CODE
LOWtests/e2e/helperz.js299export async function tapAndTapAgainIfTextIsNotVisible(textToTap, textToCheckVisible) {CODE
LOWtests/e2e/helperz.js494export async function restoreSynchronizationIfAnimatedQrClosed(timeoutMs = 2_000) {CODE
LOWtests/helpers/arkadeMocks.ts64export function clearArkadeMockCallHistory(): void {CODE
LOWtests/helpers/sdkProviderMocks.ts116export function restoreSdkBackgroundLoopStubs(): void {CODE
LOWtests/helpers/sdkProviderMocks.ts127export function installSdkBackgroundLoopStubs(): void {CODE
LOWnavigation/goFromCoinControlToSendDetails.ts13export function goFromCoinControlToSendDetails(CODE
LOWcomponents/Context/recentMenuItems.ts98export function removeRecentMenuItemsForWallets(walletIDs: ReadonlySet<string>): void {CODE
LOWcomponents/Context/recentMenuItems.ts113export function setAvailableRecentWalletIDs(walletIDs: ReadonlySet<string>): void {CODE
LOWcomponents/Context/recentMenuItems.ts119export async function setRecentMenuItemsEnabled(value: boolean): Promise<void> {CODE
LOWcomponents/Context/recentMenuItems.ts142export function subscribeToRecentMenuItems(listener: () => void): () => void {CODE
LOWhooks/useMenuActions.native.ts93export function setNativeMenuWalletsInitialized(initialized: boolean): void {CODE
LOWhooks/useClipboardDetection.ts29function pushClipboardDetectedSheet(params: { payload: string; kind: ClipboardPaymentKind; contentHash: string }): booleCODE
LOWhooks/useMenuActions.ts6export function setNativeMenuWalletsInitialized(_initialized: boolean): void {}CODE
LOWscreen/transactions/TransactionStatus.tsx57async function populateVinValuesFromPrevTxs(fetchedTx: ElectrumTransaction): Promise<void> {CODE
LOWreproducible-builds/apkdiff/tests/test_utils.py11 def test_identical_objects_return_empty_dict(self):CODE
LOWreproducible-builds/apkdiff/tests/test_utils.py17 def test_primitive_value_and_type_mismatches(self):CODE
LOWreproducible-builds/apkdiff/tests/test_utils.py30 def test_sequences_lists_and_tuples(self):CODE
LOWreproducible-builds/apkdiff/tests/test_utils.py80 def test_exclude_attributes_and_callables(self):CODE
LOW⚡reproducible-builds/apkdiff/tests/test_utils.py105 def test_show_diffs_flat_dictionary(self):CODE
LOW⚡reproducible-builds/apkdiff/tests/test_utils.py115 def test_show_diffs_with_list_data(self):CODE
LOW⚡reproducible-builds/apkdiff/tests/test_utils.py123 def test_show_diffs_nested_dictionary_indentation(self):CODE
LOW⚡reproducible-builds/apkdiff/tests/test_utils.py130 def test_show_diffs_empty_dict(self):CODE
LOW⚡reproducible-builds/apkdiff/tests/test_utils.py136def test_integration_deep_compare_and_show_diffs():CODE
LOWblue_modules/arkade-notifications.ts39export function ensureArkNotificationChannel(): void {CODE
LOWblue_modules/arkade-notifications.ts82async function isOsNotificationPermissionGranted(): Promise<boolean> {CODE
LOWblue_modules/arkade-background.ts310export function onArkBackgroundTaskTimeout(taskId: string): void {CODE
LOWblue_modules/arkade-background.ts324export async function registerArkBackgroundTask(): Promise<void> {CODE
LOWblue_modules/arkade-background.ts377export function reconcileArkBackgroundTaskResults(triggerRefreshForWallet: (walletId: string) => void): void {CODE
LOWblue_modules/currency.ts290async function restoreSavedPreferredFiatCurrencyAndExchangeFromStorage(): Promise<void> {CODE
LOWblue_modules/clipboardPayment.ts119export function isClipboardPaymentFromOwnWallet(payload: string, wallets: ClipboardOwnershipWallet[]): boolean {CODE
LOWblue_modules/clipboardPayment.ts137export function evaluateClipboardOnForeground(CODE
LOWblue_modules/clipboardPayment.ts175export function clipboardActionOnAppStateChange({CODE
LOWblue_modules/bip39WordSuggestions.ts79function hasCharacterOutsideLatinExtendedB(text: string): boolean {CODE
LOWblue_modules/bip39WordSuggestions.ts146export function getImportWalletSuggestions(text: string, cursor: number): string[] {CODE
LOWblue_modules/BlueElectrum.ts342function scheduleReconnectFromClient(client: typeof ElectrumClient, usingPeer: Peer, reason: string): void {CODE
LOWblue_modules/BlueElectrum.ts588export async function presentResetToDefaultsAlert(): Promise<boolean> {CODE
LOWblue_modules/BlueElectrum.ts703export async function presentElectrumDisconnectedHelpAlert(): Promise<void> {CODE
LOWblue_modules/BlueElectrum.ts822export function txhexToElectrumTransaction(txhex: string): ElectrumTransactionWithHex {CODE
LOWblue_modules/payjoin-client/utils.ts33export function getInputsScriptPubKeyType(psbt: Psbt): ScriptPubKeyType {CODE
LOWblue_modules/arkade-adapters/realm/realmInstance.ts38async function loadOrCreateEncryptionKey(namespace: string): Promise<Uint8Array> {CODE
Over-Commented Block32 hits · 32 pts
SeverityFileLineSnippetContext
LOWtests/setup.js261//COMMENT
LOWtests/unit/lightning-ark-derivation.test.ts21// ASP `unilateralExitDelay`.COMMENT
LOWtests/unit/lightning-ark-derivation.test.ts101 it('locks the namespace value so a derivation tweak cannot silently re-key Realm', () => {COMMENT
LOWtests/unit/lightning-ark-derivation.test.ts121 //COMMENT
LOWtests/helpers/sdkProviderMocks.ts81COMMENT
LOWios/BlueWallet-Bridging-Header.h1//COMMENT
LOWcomponents/TooltipMenu.tsx41 );COMMENT
LOWscreen/lnd/lndViewInvoice.tsx41 const [invoiceStatusChanged, setInvoiceStatusChanged] = useState<boolean>(false);COMMENT
LOWscripts/find-english-leftovers.js1// Lints loc/*.json for keys whose translated value still equals the English source.COMMENT
LOWscripts/clean-loc-strings.js1// Removes useless entries (and resulting empty sections) from every localeCOMMENT
LOWclass/wallet-import.ts121COMMENT
LOWclass/wallets/lightning-ark-wallet.ts81 public readonly typeReadable = LightningArkWallet.typeReadable;COMMENT
LOWclass/wallets/lightning-ark-wallet.ts561 } else {COMMENT
LOWclass/wallets/lightning-ark-wallet.ts661 // settles its boarding UTXO into a VTXO — the same moment its history rowCOMMENT
LOWblue_modules/arkade-notifications.ts1// Local-notification posting for actionable Ark swaps. Imported from headlessCOMMENT
LOWblue_modules/arkade-background.ts1// Background task module for Ark swap monitoring.COMMENT
LOWblue_modules/transactionDisplayState.ts1import type { LightningTransaction, Transaction } from '../class/wallets/types';COMMENT
LOWblue_modules/pako/lib/zlib/constants.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/inflate.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/inflate.js1321 break;COMMENT
LOWblue_modules/pako/lib/zlib/deflate.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/deflate.js441 * time through here. WIN_INIT is set to MAX_MATCH since the longest matchCOMMENT
LOWblue_modules/pako/lib/zlib/deflate.js461// * to end of window, whichever is less.COMMENT
LOWblue_modules/pako/lib/zlib/crc32.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/zstream.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/inffast.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/inffast.js201 }COMMENT
LOWblue_modules/pako/lib/zlib/adler32.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/inftrees.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/trees.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/gzheader.js1'use strict';COMMENT
LOWblue_modules/pako/lib/zlib/messages.js1'use strict';COMMENT
Excessive Try-Catch Wrapping8 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMios/Shared/MarketAPI+Electrum.swift56 print("Error during fetchNextBlockFee: \(error.localizedDescription)")CODE
MEDIUMios/Shared/MarketAPI+Electrum.swift71 print("Error fetching price: \(error.localizedDescription)")CODE
MEDIUMios/Shared/MarketAPI+Electrum.swift79 print("Error fetching next block fee: \(error.localizedDescription)")CODE
MEDIUM…AndMarketWidget/WalletInformationAndMarketWidget.swift79 print("Error fetching market data: \(error.localizedDescription). Retry \(attempt)/\(retries)")CODE
MEDIUMios/BlueWallet/AppDelegate.swift265 print("Error clearing directory: \(error.localizedDescription)")CODE
LOWreproducible-builds/apkdiff/util.py185 except Exception as err:CODE
LOWreproducible-builds/apkdiff/util.py187 except Exception as err:CODE
MEDIUMreproducible-builds/apkdiff/util.py58def safe_sort(iterable):CODE
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMscripts/release-notes.sh16# Define a function to apply the filter based on the parameterCOMMENT
MEDIUMscripts/remove-loc-key.sh13# Define the potential directories containing JSON filesCOMMENT
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHreproducible-builds/apkdiff/util.py151except (ValueError, IndexError):CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWscripts/remove-loc-key.sh3# Check if a nested key path is providedCOMMENT
LOWreproducible-builds/apkdiff/apkdiff.py304 # Check if package exists in both filesCOMMENT
Deep Nesting2 hits · 2 pts
SeverityFileLineSnippetContext
LOWreproducible-builds/apkdiff/util.py1CODE
LOWreproducible-builds/apkdiff/util.py25CODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWreproducible-builds/apkdiff/tests/test_apkdiff.py1# TODO: add tests to avoid regressions in apkdiff.py afterCOMMENT