AI Slop Code Risk Monitor

wevm/viem

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

TypeScript Interface for Ethereum

0.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for wevm/viem, a TypeScript project with 3,625 GitHub stars. SynthScan examined 480,895 lines of code across 2793 source files, recording 112 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 0.3 (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.3
Adjusted Signal
0.3
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
3.6K
Stars
TypeScript
Language
480.9K
Lines of Code
2.8K
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 0.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.4/100 · LOW

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

Agent Over-Engineering Ratio 0.5/100 · LOW

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

PR Review Velocity Impact 1.2/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 0MEDIUM 0LOW 112

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.

Hyper-Verbose Identifiers44 hits · 44 pts
SeverityFileLineSnippetContext
LOWtest/src/account-abstraction.ts214export async function createVerifyingPaymasterServer(CODE
LOWtest/src/utils.ts175export async function deployOffchainLookupExample({CODE
LOWvectors/src/transaction.ts37export async function generateTransactionVectors() {CODE
LOWscripts/generateTempoAbis.ts536 function routerCallbackDataParameter(checkout: string) {CODE
LOWsrc/celo/fees.ts59async function estimateFeePerGasInFeeCurrency(CODE
LOWsrc/celo/fees.ts85async function estimateMaxPriorityFeePerGasInFeeCurrency(CODE
LOWsrc/experimental/erc7846/actions/connect.ts96function formatRequestCapabilities(CODE
LOWsrc/experimental/erc7846/actions/connect.ts164function formatResponseCapabilities(CODE
LOW…t-abstraction/utils/formatters/userOperationRequest.ts11export function formatUserOperationRequest(CODE
LOW…t-abstraction/utils/formatters/userOperationReceipt.ts9export function formatUserOperationReceipt(CODE
LOW…ction/utils/userOperation/getUserOperationTypedData.ts31export function getUserOperationTypedData(CODE
LOW…raction/actions/bundler/waitForUserOperationReceipt.ts69export function waitForUserOperationReceipt(CODE
LOWsrc/op-stack/serializers.ts49function serializeTransactionDeposit(CODE
LOWsrc/op-stack/utils/getWithdrawalHashStorageSlot.ts21export function getWithdrawalHashStorageSlot({CODE
LOWsrc/op-stack/utils/extractWithdrawalMessageLogs.ts28export function extractWithdrawalMessageLogs({CODE
LOWsrc/op-stack/utils/extractTransactionDepositedLogs.ts28export function extractTransactionDepositedLogs({CODE
LOWsrc/utils/stateOverride.ts62export function serializeAccountStateOverride(CODE
LOWsrc/utils/transaction/serializeTransaction.ts392function serializeTransactionLegacy(CODE
LOWsrc/utils/ens/errors.ts11export function isNullUniversalResolverError(err: unknown): boolean {CODE
LOWsrc/utils/signature/signatureToCompactSignature.ts30export function signatureToCompactSignature(CODE
LOWsrc/utils/signature/compactSignatureToSignature.ts30export function compactSignatureToSignature({CODE
LOWsrc/utils/signature/recoverTransactionAddress.ts31export async function recoverTransactionAddress(CODE
LOWsrc/utils/signature/serializeCompactSignature.ts23export function serializeCompactSignature({CODE
LOWsrc/utils/hash/normalizeSignature.test.ts100test('function submitBlocksWithCallbacks(bool isDataCompressed, bytes calldata data, ((uint16,(uint16,uint16,uint16,byteCODE
LOWsrc/utils/hash/normalizeSignature.test.ts103 'function submitBlocksWithCallbacks(bool isDataCompressed, bytes calldata data, ((uint16,(uint16,uint16,uint16,bytCODE
LOWsrc/utils/authorization/serializeAuthorizationList.ts16export function serializeAuthorizationList(CODE
LOWsrc/tempo/Account.ts823export function getKeyAuthorizationSignPayload(CODE
LOWsrc/tempo/internal/utils.ts105function findDeclaredTokenBySymbol(CODE
LOWsrc/tempo/internal/relay/utils.ts21export function formatFillTransactionRequest(CODE
LOWsrc/tempo/internal/relay/utils.ts35export function normalizeFillTransactionRequest(CODE
LOWsrc/tempo/internal/relay/utils.ts69function normalizeKeyAuthorization(value: unknown) {CODE
LOWsrc/tempo/internal/relay/utils.ts97export function isSerializedTempoTransaction(CODE
LOWsrc/tempo/internal/relay/utils.ts108export function normalizeTempoTransaction(CODE
LOWsrc/tempo/internal/relay/accounts.ts1205async function getSubmittedTransactionHash(CODE
LOWsrc/tempo/internal/relay/accounts.ts1434function isSerializedTempoTransaction(value: unknown): value is Hex.Hex {CODE
LOWsrc/tempo/internal/relay/feePayer.accounts.test.ts180async function configurableKeyAuthorization(CODE
LOWsrc/tempo/actions/earn.ts3097function resolveMinimumShareAmount(parameters: MinimumShareAmountParameters) {CODE
LOWsrc/tempo/actions/earn.ts3106async function assertPreparedZoneRequestChain(CODE
LOWsrc/tempo/actions/receivePolicy.ts1296function assertValidRecoveryAuthority(recoveryAuthority: Address) {CODE
LOW…sync/utils/paymaster/getApprovalBasedPaymasterInput.ts19export function getApprovalBasedPaymasterInput(CODE
LOWsrc/zksync/actions/claimFailedDeposit.ts257 'function bridgeRecoverFailedTransfer(uint256 _chainId, address _depositSender, bytes32 _assetId, bytes _assetDataCODE
LOWsrc/actions/public/call.ts541function hasStateOverrideForAddress(CODE
LOWsrc/actions/public/call.ts555function toDeploylessCallViaBytecodeData(parameters: { code: Hex; data: Hex }) {CODE
LOWsrc/actions/public/call.ts568function toDeploylessCallViaFactoryData(parameters: {CODE
Fake / Example Data34 hits · 39 pts
SeverityFileLineSnippetContext
LOW⚡test/kzg/lorem-ipsum.txt1Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies orci quam, sit amet eleifend ante fringilla nec. PCODE
LOW⚡test/kzg/lorem-ipsum.txt1Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies orci quam, sit amet eleifend ante fringilla nec. PCODE
LOW⚡test/kzg/lorem-ipsum.txt3Sed semper elementum massa non viverra. Sed sit amet magna et ipsum tristique vulputate. Pellentesque in libero sem. SusCODE
LOW⚡test/kzg/lorem-ipsum.txt217Fusce vel enim pellentesque, elementum diam eu, vulputate velit. Nunc libero tellus, elementum id quam sit amet, auctor CODE
LOW⚡test/kzg/lorem-ipsum.txt217Fusce vel enim pellentesque, elementum diam eu, vulputate velit. Nunc libero tellus, elementum id quam sit amet, auctor CODE
LOW⚡test/kzg/lorem-ipsum.txt219Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum facilisis, purus eu pCODE
LOW⚡test/kzg/lorem-ipsum.txt223Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu lacus lectus. Fusce a tellus lacus. Interdum et malesCODE
LOW⚡test/kzg/lorem-ipsum.txt223Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu lacus lectus. Fusce a tellus lacus. Interdum et malesCODE
LOW⚡test/kzg/lorem-ipsum.txt301Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies orci quam, sit amet eleifend ante fringilla nec. PCODE
LOW⚡test/kzg/lorem-ipsum.txt301Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies orci quam, sit amet eleifend ante fringilla nec. PCODE
LOW⚡test/kzg/lorem-ipsum.txt303Sed semper elementum massa non viverra. Sed sit amet magna et ipsum tristique vulputate. Pellentesque in libero sem. SusCODE
LOW⚡test/kzg/lorem-ipsum.txt517Fusce vel enim pellentesque, elementum diam eu, vulputate velit. Nunc libero tellus, elementum id quam sit amet, auctor CODE
LOW⚡test/kzg/lorem-ipsum.txt517Fusce vel enim pellentesque, elementum diam eu, vulputate velit. Nunc libero tellus, elementum id quam sit amet, auctor CODE
LOW⚡test/kzg/lorem-ipsum.txt519Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum facilisis, purus eu pCODE
LOW⚡test/kzg/lorem-ipsum.txt523Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu lacus lectus. Fusce a tellus lacus. Interdum et malesCODE
LOW⚡test/kzg/lorem-ipsum.txt523Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu lacus lectus. Fusce a tellus lacus. Interdum et malesCODE
LOWtest/kzg/lorem-ipsum.txt23Mauris ultricies elit urna, vel aliquet purus auctor vitae. Praesent viverra odio tellus, quis posuere nulla aliquet at.CODE
LOWtest/kzg/lorem-ipsum.txt23Mauris ultricies elit urna, vel aliquet purus auctor vitae. Praesent viverra odio tellus, quis posuere nulla aliquet at.CODE
LOWtest/kzg/lorem-ipsum.txt253Donec sem nisl, ultrices a tellus ut, pellentesque facilisis nulla. Sed et sapien ut eros condimentum porttitor. Fusce sCODE
LOWtest/kzg/lorem-ipsum.txt253Donec sem nisl, ultrices a tellus ut, pellentesque facilisis nulla. Sed et sapien ut eros condimentum porttitor. Fusce sCODE
LOWtest/kzg/lorem-ipsum.txt287Fusce venenatis interdum elit, quis rutrum orci posuere non. In eleifend est quis diam facilisis, ac malesuada massa ornCODE
LOWtest/kzg/lorem-ipsum.txt287Fusce venenatis interdum elit, quis rutrum orci posuere non. In eleifend est quis diam facilisis, ac malesuada massa ornCODE
LOWtest/kzg/lorem-ipsum.txt323Mauris ultricies elit urna, vel aliquet purus auctor vitae. Praesent viverra odio tellus, quis posuere nulla aliquet at.CODE
LOWtest/kzg/lorem-ipsum.txt323Mauris ultricies elit urna, vel aliquet purus auctor vitae. Praesent viverra odio tellus, quis posuere nulla aliquet at.CODE
LOWtest/kzg/lorem-ipsum.txt553Donec sem nisl, ultrices a tellus ut, pellentesque facilisis nulla. Sed et sapien ut eros condimentum porttitor. Fusce sCODE
LOWtest/kzg/lorem-ipsum.txt553Donec sem nisl, ultrices a tellus ut, pellentesque facilisis nulla. Sed et sapien ut eros condimentum porttitor. Fusce sCODE
LOWtest/kzg/lorem-ipsum.txt587Fusce venenatis interdum elit, quis rutrum orci posuere non. In eleifend est quis diam facilisis, ac malesuada massa ornCODE
LOWtest/kzg/lorem-ipsum.txt587Fusce venenatis interdum elit, quis rutrum orci posuere non. In eleifend est quis diam facilisis, ac malesuada massa ornCODE
LOWsrc/utils/abi/encodeAbiParameters.test.ts841 // cast abi-encode "a(string)" "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc faucibus lorem a liberCOMMENT
LOWsrc/utils/abi/encodeAbiParameters.test.ts841 // cast abi-encode "a(string)" "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc faucibus lorem a liberCOMMENT
LOWsrc/utils/abi/encodeAbiParameters.test.ts852 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc faucibus lorem a libero auctor condimentum. DCODE
LOWsrc/utils/abi/encodeAbiParameters.test.ts852 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc faucibus lorem a libero auctor condimentum. DCODE
LOWsrc/utils/abi/decodeAbiParameters.test.ts449 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc faucibus lorem a libero auctor condimentum. DonCODE
LOWsrc/utils/abi/decodeAbiParameters.test.ts449 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc faucibus lorem a libero auctor condimentum. DonCODE
Over-Commented Block28 hits · 28 pts
SeverityFileLineSnippetContext
LOWtest/setup.global.ts1import * as executionInstances from './src/anvil.js'COMMENT
LOWenvironments/next/next-env.d.ts1/// <reference types="next" />COMMENT
LOWenvironments/tsc/tsconfig.json1{COMMENT
LOWenvironments/tsc/tsconfig.json21 // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when tCOMMENT
LOWenvironments/tsc/tsconfig.json41 // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports.COMMENT
LOWenvironments/tsc/tsconfig.json61 // "noEmit": true, /* Disable emitting files from a compilation. */COMMENT
LOWsite/pages/experimental/erc7846/connect.md101// @log: }]COMMENT
LOWsite/pages/experimental/erc7846/connect.md141// @log: address: '0x90F79bf6EB2c4f870365E785982E1f101E93b906',COMMENT
LOW…es/account-abstraction/actions/bundler/introduction.md1# TODOCOMMENT
LOWsite/pages/docs/actions/public/simulateCalls.md101// @log: [COMMENT
LOWsite/pages/docs/actions/public/simulateCalls.md181// @log: address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",COMMENT
LOWsite/pages/docs/actions/public/simulateCalls.md201// @log: },COMMENT
LOWsite/pages/docs/actions/public/simulateCalls.md261 to: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',COMMENT
LOWsite/pages/docs/actions/public/getBlockReceipts.md21// @log: {COMMENT
LOWsite/pages/docs/actions/public/watchBlocks.md21const unwatch = publicClient.watchBlocks( // [!code focus:99]COMMENT
LOWsite/pages/docs/actions/public/fillTransaction.md21import { account, publicClient } from './client'COMMENT
LOW…pages/docs/actions/wallet/prepareTransactionRequest.md21})COMMENT
LOWsite/pages/docs/glossary/errors.md1# Errors [Glossary of Errors in viem.]COMMENT
LOWsite/pages/docs/glossary/errors.md21### `AbiFunctionNotFoundError`COMMENT
LOWsite/pages/docs/glossary/errors.md41COMMENT
LOWsite/pages/docs/glossary/errors.md61### `ContractFunctionZeroDataError`COMMENT
LOWsite/pages/docs/glossary/errors.md81### `EnsAvatarInvalidMetadataError`COMMENT
LOWsite/pages/docs/glossary/errors.md101### `IntrinsicGasTooLowError`COMMENT
LOWsite/pages/docs/glossary/errors.md121### `InvalidParamsRpcError`COMMENT
LOWsite/pages/docs/glossary/errors.md141COMMENT
LOW…-abstraction/actions/bundler/sendUserOperation.test.ts721COMMENT
LOWsrc/utils/buildRequest.ts301 if (error.code === LimitExceededRpcError.code) return trueCOMMENT
LOWsrc/actions/wallet/prepareTransactionRequest.ts381 )COMMENT
Verbosity Indicators3 hits · 6 pts
SeverityFileLineSnippetContext
LOW⚡src/tempo/actions/token.test.ts3249 // Step 1: Prepare update quote token (should emit NextQuoteTokenSet)COMMENT
LOW⚡src/tempo/actions/token.test.ts3255 // Step 2: Finalize the update (should emit QuoteTokenUpdateFinalized)COMMENT
LOWsrc/actions/public/waitForTransactionReceipt.ts349 // We need to check if it has potentially been replaced.COMMENT
Structural Annotation Overuse2 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡src/tempo/actions/token.test.ts3249 // Step 1: Prepare update quote token (should emit NextQuoteTokenSet)COMMENT
LOW⚡src/tempo/actions/token.test.ts3255 // Step 2: Finalize the update (should emit QuoteTokenUpdateFinalized)COMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/tempo/Relay.ts212export function handleRequest(CODE