AI Slop Code Risk Monitor

monkeytypegame/monkeytype

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

The most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.

0.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for monkeytypegame/monkeytype, a TypeScript project with 20,967 GitHub stars. SynthScan examined 1,770,103 lines of code across 1890 source files, recording 198 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 0.1 (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.1
Adjusted Signal
0.1
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
21.0K
Stars
TypeScript
Language
1.8M
Lines of Code
1.9K
Files
198
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.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 0.4/100 · LOW

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

PR Review Velocity Impact 0.7/100 · LOW

Which changes need focused human review? 198 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 4LOW 190

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 198 distinct pattern matches across 11 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 Identifiers127 hits · 132 pts
SeverityFileLineSnippetContext
LOWfrontend/storybook/.storybook/main.ts46function patchAnimatedModalToNotThrow(): Plugin {CODE
LOWfrontend/storybook/.storybook/main.ts88 export function updateAccountChartButtons() {}CODE
LOWfrontend/storybook/.storybook/main.ts110function stubVirtualLanguageHashes(): Plugin {CODE
LOWfrontend/__tests__/commandline/navigation.spec.ts95export function brokenLinksDoNotTypeCheck(): void {CODE
LOWfrontend/static/quotes/code_python.json353 "text": "def combinations_with_replacement(iterable, r):\n\t# combinations_with_replacement('ABC', 2) --> AA AB ACCODE
LOWfrontend/static/quotes/code_python.json359 "text": "def combinations_with_replacement(iterable, r):\n\tpool = tuple(iterable)\n\tn = len(pool)\n\tfor indicesCODE
LOWfrontend/static/challenges/sourcecode.txt3129async function updateLeaderboardAndNotifyChanges(leaderboardTime) {CODE
LOWfrontend/static/challenges/sourcecode.txt20793export function isSingleListCommandLineActive() {CODE
LOWfrontend/static/challenges/sourcecode.txt21041function generateSingleListOfCommands() {CODE
LOWfrontend/static/challenges/sourcecode.txt24215export function setCurrentWordElementIndex(val) {CODE
LOWfrontend/static/challenges/sourcecode.txt24894export function arrangeCharactersRightToLeft() {CODE
LOWfrontend/static/challenges/sourcecode.txt24900export function arrangeCharactersLeftToRight() {CODE
LOWfrontend/static/challenges/sourcecode.txt27244export function incrementIncompleteSeconds(val) {CODE
LOWfrontend/static/challenges/sourcecode.txt27383export function setKeypressTimingsTooLong() {CODE
LOWfrontend/src/ts/auth.tsx582function getPreferredAuthenticationMethod(CODE
LOWfrontend/src/ts/auth.tsx601export function isUsingAuthenticationReactive(authMethod: AuthMethod): boolean {CODE
LOW⚡frontend/src/ts/auth.tsx620export function isUsingPasswordAuthentication(): boolean {CODE
LOW⚡frontend/src/ts/auth.tsx630export function getAuthMethodEmailReactive(CODE
LOW⚡frontend/src/ts/auth.tsx636export function hasAdditionalAuthMethodsReactive(authMethod: AuthMethod) {CODE
LOWfrontend/src/ts/firebase.ts115export async function signInWithEmailAndPassword(CODE
LOWfrontend/src/ts/firebase.ts178export async function createUserWithEmailAndPassword(CODE
LOWfrontend/src/ts/test/words-generator.ts320async function applyEnglishPunctuationToWord(word: string): Promise<string> {CODE
LOWfrontend/src/ts/test/words-generator.ts379async function applyBritishEnglishToWord(CODE
LOWfrontend/src/ts/test/custom-text.ts169export function getCustomTextIsPipeDelimiter(CODE
LOWfrontend/src/ts/test/custom-text.ts211export function getCustomTextLongProgress(name: string): number {CODE
LOWfrontend/src/ts/test/custom-text.ts218export function setCustomTextLongProgress(CODE
LOWfrontend/src/ts/test/screenshot.ts58export async function captureAndCopyToClipboard(): Promise<void> {CODE
LOWfrontend/src/ts/test/test-ui.ts153export function afterTestCompositionUpdate(): void {CODE
LOWfrontend/src/ts/test/english-punctuation.ts70function shouldWholeReplacementWordBeCapitalised(CODE
LOWfrontend/src/ts/test/funbox/active.ts15export function isFunboxActiveWithProperty(property: FunboxProperty): boolean {CODE
LOWfrontend/src/ts/test/funbox/list.ts62export function getActiveFunboxesWithProperty(CODE
LOWfrontend/src/ts/test/funbox/list.ts74export function findSingleActiveFunboxWithProperty(CODE
LOWfrontend/src/ts/test/funbox/list.ts112export function isFunboxActiveWithFunction(CODE
LOWfrontend/src/ts/test/events/data.ts321export function logEventsDataToTheConsole(): void {CODE
LOWfrontend/src/ts/test/events/data.ts341export function logEventsDataToTheConsoleTable(): void {CODE
LOWfrontend/src/ts/test/events/stats.ts144export function getStartToFirstKeypressMs(eventLog: EventLog): number {CODE
LOWfrontend/src/ts/test/events/stats.ts180function getRawLastKeypressToEndMs(eventLog: EventLog): number {CODE
LOWfrontend/src/ts/test/events/stats.ts320export function getDateBasedTestDurationMs(eventLog: EventLog): number {CODE
LOW⚡frontend/src/ts/test/events/live-cache.ts50export function getLiveCachedMsSinceLastInputEvent(): number | null {CODE
LOW⚡frontend/src/ts/test/events/live-cache.ts54export function getLiveCachedTimerStartMs(): number | null {CODE
LOW⚡frontend/src/ts/test/events/live-cache.ts58export function getLiveCachedTestDurationMs(now: number): number {CODE
LOWfrontend/src/ts/config/validation.ts38export function isConfigValueValidBoolean(key: string, val: boolean): boolean {CODE
LOWfrontend/src/ts/config/funbox-validation.ts4export function canSetConfigWithCurrentFunboxes(CODE
LOWfrontend/src/ts/config/funbox-validation.ts77export function getFunboxUnsupportedReason(CODE
LOWfrontend/src/ts/config/persistence.ts41export function saveFullConfigToLocalStorage(noDbCheck = false): void {CODE
LOWfrontend/src/ts/input/state.ts23export function incrementIncorrectShiftsInARow(): void {CODE
LOWfrontend/src/ts/input/state.ts27export function resetIncorrectShiftsInARow(): void {CODE
LOWfrontend/src/ts/input/state.ts47export function getLastInsertCompositionTextData(): string {CODE
LOWfrontend/src/ts/input/state.ts51export function setLastInsertCompositionTextData(value: string): void {CODE
LOWfrontend/src/ts/input/input-element.ts24export function appendToInputElementValue(value: string): void {CODE
LOWfrontend/src/ts/input/input-element.ts38export function moveInputElementCaretToTheEnd(): void {CODE
LOWfrontend/src/ts/input/input-element.ts43export function replaceInputElementLastValueChar(char: string): void {CODE
LOWfrontend/src/ts/input/hotkeys/utils.ts44function isInteractiveElementFocused(): boolean {CODE
LOWfrontend/src/ts/input/hotkeys/utils.ts59function handleHotkeyOnInteractiveElement(CODE
LOWfrontend/src/ts/input/handlers/insert-text.ts380function normalizeDataAndUpdateInputIfNeeded(CODE
LOWfrontend/src/ts/input/helpers/fail-or-finish.ts12export function checkIfFailedDueToMinBurst(options: {CODE
LOWfrontend/src/ts/input/helpers/fail-or-finish.ts46export function checkIfFailedDueToDifficulty(options: {CODE
LOWfrontend/src/ts/utils/strings.ts67export function capitalizeFirstLetterOfEachWord(str: string): string {CODE
LOWfrontend/src/ts/utils/strings.ts313export function areCharactersVisuallyEqual(CODE
LOWfrontend/src/ts/utils/strings.ts401export function replaceUnderscoresWithSpaces(text: string): string {CODE
67 more matches not shown…
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippetContext
CRITICALfrontend/static/challenges/sourcecode.txt26099 ChartController.result.options.annotation.annotations.push({CODE
CRITICALfrontend/static/challenges/sourcecode.txt26145 ChartController.result.options.annotation.annotations.push({CODE
CRITICALfrontend/static/challenges/sourcecode.txt26422 ChartController.result.options.annotation.annotations.push({CODE
CRITICALfrontend/src/ts/components/ui/form/FieldIndicator.tsx33 text={props.field.state.meta.errors.join(", ")}CODE
Over-Commented Block43 hits · 34 pts
SeverityFileLineSnippetContext
LOWfrontend/storybook/stories/UserProfile.stories.tsx121 // null,COMMENT
LOWfrontend/__tests__/test/events/helpers.spec.ts301 inputValue: "hell",COMMENT
LOWfrontend/static/challenges/sourcecode.txt901 approved: false,COMMENT
LOWfrontend/static/challenges/sourcecode.txt2481 // if (result.timestamp > Math.round(Date.now() / 1000) * 1000 + 10) {COMMENT
LOWfrontend/static/challenges/sourcecode.txt3541// return false;COMMENT
LOWfrontend/static/challenges/sourcecode.txt3561// // language: result.language,COMMENT
LOWfrontend/static/challenges/sourcecode.txt3581// if (pbs[result.mode][result.mode2] === undefined) {COMMENT
LOWfrontend/static/challenges/sourcecode.txt3601// //no pbCOMMENT
LOWfrontend/static/challenges/sourcecode.txt3621// }COMMENT
LOWfrontend/static/challenges/sourcecode.txt3641// // User.findOne({ uid: userdata.uid }, (err, user) => {COMMENT
LOWfrontend/static/challenges/sourcecode.txt9341 // Get the action to complete.COMMENT
LOWfrontend/static/challenges/sourcecode.txt11441COMMENT
LOWfrontend/static/challenges/sourcecode.txt16841 gap: 0.5rem;COMMENT
LOWfrontend/static/challenges/sourcecode.txt17041 // }COMMENT
LOWfrontend/static/challenges/sourcecode.txt17881 // margin-top: 6px;COMMENT
LOWfrontend/static/challenges/sourcecode.txt17901 // div#KeyU.keymap-key,COMMENT
LOWfrontend/static/challenges/sourcecode.txt17921 // div#KeyLeftBracket.keymap-key,COMMENT
LOWfrontend/static/challenges/sourcecode.txt17941 // div#KeyM.keymap-key {COMMENT
LOWfrontend/static/challenges/sourcecode.txt18881 ret = colors[color];COMMENT
LOWfrontend/static/challenges/sourcecode.txt18901 // async function check() {COMMENT
LOWfrontend/static/challenges/sourcecode.txt19941 if ($target.attr("tab") == "preset") {COMMENT
LOWfrontend/static/challenges/sourcecode.txt19981 ".pageSettings .section.themes .tabContainer .customTheme input[type=color]"COMMENT
LOWfrontend/static/challenges/sourcecode.txt20001 // document.documentElement.style.setProperty($colorVar, $pickedColor);COMMENT
LOWfrontend/static/challenges/sourcecode.txt21241 // setTheme(Config.theme, true);COMMENT
LOWfrontend/static/challenges/sourcecode.txt21261// }COMMENT
LOWfrontend/static/challenges/sourcecode.txt26781 // $("#top .config .wordCount").removeClass("hidden");COMMENT
LOWfrontend/static/challenges/sourcecode.txt26801 // $("#top .config .wordCount").addClass("hidden");COMMENT
LOWfrontend/static/themes/rainbow_trail.css41#showWordHistoryButton:hover > i,COMMENT
LOWfrontend/src/styles/media-queries-green.scss21 // .legend div {COMMENT
LOWfrontend/src/styles/test.scss201 border-bottom: 2px solid transparent;COMMENT
LOWfrontend/src/ts/sentry.ts21 release: envConfig.clientVersion,COMMENT
LOWfrontend/src/ts/sentry.ts81COMMENT
LOWfrontend/src/ts/test/events/timing-stats.ts21 mean: number;COMMENT
LOWfrontend/src/ts/controllers/eg-ad-controller.ts61 // )[0];COMMENT
LOWfrontend/src/ts/controllers/pw-ad-controller.ts241 // }COMMENT
LOWfrontend/src/ts/controllers/pw-ad-controller.ts261// ramp.destroyUnits(toDestroy);COMMENT
LOWbackend/src/api/controllers/result.ts301 throw new Error("No anticheat module found");COMMENT
LOWscripts/profile-build.sh1#!/usr/bin/env bashCOMMENT
LOWpackages/release/src/buildChangelog.js1import { exec } from "child_process";COMMENT
LOWpackages/release/src/buildChangelog.js181COMMENT
LOWpackages/release/src/buildChangelog.js201// }COMMENT
LOWpackages/release/src/buildChangelog.js221COMMENT
LOWpackages/release/src/buildChangelog.js301 // "d2739e4f193137db4d86450f0d50b3489d75c106 d2739e4f1 docs: add new feature (#1234)",COMMENT
Verbosity Indicators4 hits · 8 pts
SeverityFileLineSnippetContext
LOWfrontend/src/ts/controllers/pw-ad-controller.ts11// Step 1: Create the Ramp Object, NOTE: selector id needed for tagged units onlyCOMMENT
LOWfrontend/src/ts/controllers/pw-ad-controller.ts141 // Step 2: Creates the Ramp ScriptsCOMMENT
LOW⚡packages/schemas/src/shared.ts61// // Step 1: Define the schema for specific string values "10" and "25"COMMENT
LOW⚡packages/schemas/src/shared.ts64// // Step 2: Use this schema as the key schema for another objectCOMMENT
Structural Annotation Overuse4 hits · 8 pts
SeverityFileLineSnippetContext
LOWfrontend/src/ts/controllers/pw-ad-controller.ts11// Step 1: Create the Ramp Object, NOTE: selector id needed for tagged units onlyCOMMENT
LOWfrontend/src/ts/controllers/pw-ad-controller.ts141 // Step 2: Creates the Ramp ScriptsCOMMENT
LOW⚡packages/schemas/src/shared.ts61// // Step 1: Define the schema for specific string values "10" and "25"COMMENT
LOW⚡packages/schemas/src/shared.ts64// // Step 2: Use this schema as the key schema for another objectCOMMENT
Fake / Example Data7 hits · 7 pts
SeverityFileLineSnippetContext
LOWfrontend/storybook/stories/InputField.stories.tsx76 <InputField placeholder="placeholder" field={() => createFieldMock({})} />CODE
LOWfrontend/static/quotes/code_arduino.json311 "text": "void setup() {\n\tSerial.begin(9600);\n\twhile (!Serial) {\n\t\t;\n\t}\n\tSerial.println(\"\n\nString indCODE
LOWfrontend/static/quotes/code_arduino.json311 "text": "void setup() {\n\tSerial.begin(9600);\n\twhile (!Serial) {\n\t\t;\n\t}\n\tSerial.println(\"\n\nString indCODE
LOWfrontend/static/challenges/sourcecode.txt20783 $("#commandInput input").attr("placeholder", placeholder);CODE
LOWfrontend/static/languages/code_nix.json96 "placeholder",CODE
LOWfrontend/static/languages/code_python_5k.json3500 "placeholder",CODE
LOWfrontend/static/languages/english_25k.json3831 "placeholder",CODE
AI Slop Vocabulary2 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/static/quotes/code_arduino.json449 "text": "#include <LiquidCrystal.h>\nLiquidCrystal lcd(12, 11, 5, 4, 3, 2);\nconst int switchPin = 6;\nint switchSCODE
MEDIUMscripts/profile-build.sh3# keystroke harness next to it.COMMENT
Self-Referential Comments2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/static/quotes/code_ruby.json17 "text": "class MegaGreeter\n\tattr_accessor :names\n\n\t# Create the object\n\tdef initialize(names = \"World\")\nCODE
MEDIUMfrontend/static/quotes/code_bash.json53 "text": "#!/bin/bash\n\n# Create a new directory\nNEW_DIR=\"/path/to/new_directory\"\nmkdir -p \"$NEW_DIR\"\necho CODE
Redundant / Tautological Comments2 hits · 2 pts
SeverityFileLineSnippetContext
LOWfrontend/static/quotes/code_bash.json23 "text": "#!/bin/bash\n\n# Check if a file exists\nFILE=\"/path/to/file.txt\"\nif [ -f \"$FILE\" ]; then\n echo \"CODE
LOWpackages/release/bin/deployBackend.sh17# Print the outputCOMMENT
Overly Generic Function Names2 hits · 2 pts
SeverityFileLineSnippetContext
LOW…tend/__tests__/elements/test-activity-calendar.spec.ts1219function getData(from: string, to: string): number[] {CODE
LOWfrontend/src/ts/test/custom-text.ts157export function getData(): CustomTextSettings {CODE
Slop Phrases1 hit · 1 pts
SeverityFileLineSnippetContext
LOWfrontend/static/languages/typing_of_the_dead.json4374 "Don't forget to wear your wig",CODE