AI Slop Code Risk Monitor

robolectric/robolectric

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

Android Unit Testing Framework

0.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for robolectric/robolectric, a Java project with 6,075 GitHub stars. SynthScan examined 413,856 lines of code across 2693 source files, recording 299 pattern matches distributed across 8 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-10-30
Last Push
6.1K
Stars
Java
Language
413.9K
Lines of Code
2.7K
Files
299
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.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.3/100 · LOW

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

Agent Over-Engineering Ratio 0.0/100 · LOW

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

PR Review Velocity Impact 4.6/100 · LOW

Which changes need focused human review? 299 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 10HIGH 0MEDIUM 1LOW 288

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 299 distinct pattern matches across 8 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.

Over-Commented Block270 hits · 240 pts
SeverityFileLineSnippetContext
LOW…va/org/robolectric/shadows/ShadowArscAssetManager.java1141COMMENT
LOW…va/org/robolectric/shadows/ShadowArscAssetManager.java1301 final Ref<ResTable_config> config = new Ref<>(new ResTable_config());COMMENT
LOW…/org/robolectric/shadows/ShadowLegacyCursorWindow.java321COMMENT
LOW…n/java/org/robolectric/shadows/ShadowImageDecoder.java141 imgStream.isNinePatch());COMMENT
LOW…n/java/org/robolectric/shadows/ShadowImageDecoder.java161 // SkFILEStream fileStream(new SkFILEStream(file));COMMENT
LOW…src/main/java/org/robolectric/shadows/NativeInput.java241 * Key events.COMMENT
LOW…src/main/java/org/robolectric/shadows/NativeInput.java261 // int source,COMMENT
LOW…java/org/robolectric/shadows/ShadowVectorDrawable.java21import android.graphics.drawable.VectorDrawable;COMMENT
LOW…java/org/robolectric/shadows/ShadowVectorDrawable.java141 path.strokeLineJoin = strokeLineJoin;COMMENT
LOW…java/org/robolectric/shadows/ShadowVectorDrawable.java221 group.pivotX = pivotX;COMMENT
LOW…java/org/robolectric/shadows/ShadowVectorDrawable.java241 // private static native float nGetPivotX(long groupPtr);COMMENT
LOW…java/org/robolectric/shadows/ShadowVectorDrawable.java261 // private static native void nSetStrokeAlpha(long pathPtr, float alpha);COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java121 // #include <sys/types.h>COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java141 // #include "nativehelper/ScopedPrimitiveArray.h"COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java161 // jfieldID mData;COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java181 // };COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java241 return;COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java261 // PLOG(ERROR) << "capget";COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java281 // // Generic idmap parametersCOMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java301 // }COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java1761 @Implementation(minSdk = P)COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java1781 // {"nativeList", "(JLjava/lang/String;)[Ljava/lang/String;", (void*)NativeList},COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java1801 // {"nativeGetResourceArray", "(JI[I)I", (void*)NativeGetResourceArray},COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java1821 // {"nativeThemeCreate", "(J)J", (void*)NativeThemeCreate},COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java1841 // {"nativeVerifySystemIdmaps", "()V", (void*)NativeVerifySystemIdmaps},COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java1861 // GetFieldIDOrDie(env, typedValue, "changingConfigurations", "I");COMMENT
LOW…/org/robolectric/shadows/ShadowArscAssetManager10.java1881 // gSparseArrayOffsets.put =COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java801COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java821 // AINPUT_MOTION_RANGE_TOUCH_MAJOR = AMOTION_EVENT_AXIS_TOUCH_MAJOR;COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java841 // *COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java861 // */COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java881 // * Note that when chording keys, this value is the down time of the most recentlyCOMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java901 // /** Get the button state of all buttons that are pressed. */COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java921 // * Get the X coordinate offset.COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java941 // * Get the precision of the Y coordinates being reported.COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java961 // * The tool type indicates the type of tool used to make contact such as aCOMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java981 // * Get the current X coordinate of this event for the given pointer index.COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1001 // * This represents some approximation of the area of the screen beingCOMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1021 // * The tool area represents the estimated size of the finger or pen that isCOMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1041 // */COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1061 // /**COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1081 // float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index,COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1101 // * occurred between this event and the previous motion event.COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1121 // * Get the historical length of the major axis of an ellipse that describes the touch areaCOMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1141 // * touching the device independent of its actual touch area at the point of contact.COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1161 // * upwards, is perfectly circular or is of unknown orientation. A positive angleCOMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1181 // *COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1201 // int32_t AInputQueue_hasEvents(AInputQueue* queue);COMMENT
LOW…n/java/org/robolectric/shadows/NativeAndroidInput.java1221 // #ifdef __cplusplusCOMMENT
LOW…ava/org/robolectric/shadows/ShadowLocationManager.java1481 }COMMENT
LOW…java/org/robolectric/shadows/ShadowArscApkAssets9.java41 minSdk = P,COMMENT
LOW…java/org/robolectric/shadows/ShadowArscApkAssets9.java181 }COMMENT
LOW…java/org/robolectric/shadows/ShadowArscApkAssets9.java281 // (void*)NativeLoadFromFd},COMMENT
LOW…a/org/robolectric/shadows/ShadowArscAssetManager9.java101 private static long systemCppAssetManager2Ref;COMMENT
LOW…a/org/robolectric/shadows/ShadowArscAssetManager9.java121 // #include "android-base/logging.h"COMMENT
LOW…a/org/robolectric/shadows/ShadowArscAssetManager9.java141 // #include "utils/String.h"COMMENT
LOW…a/org/robolectric/shadows/ShadowArscAssetManager9.java161 // jfieldID mDensity;COMMENT
LOW…a/org/robolectric/shadows/ShadowArscAssetManager9.java181 // jfieldID native_ptr;COMMENT
LOW…a/org/robolectric/shadows/ShadowArscAssetManager9.java241 // PLOG(ERROR) << "failed to fork for idmap";COMMENT
LOW…a/org/robolectric/shadows/ShadowArscAssetManager9.java261 // if (capset(&capheader, &capdata) != 0) {COMMENT
210 more matches not shown…
Hallucination Indicators10 hits · 105 pts
SeverityFileLineSnippetContext
CRITICAL…java/org/robolectric/shadows/ShadowPackageManager.java675 // From com.android.server.pm.PackageManagerService.compareSignatures().COMMENT
CRITICAL…notation/processing/ksp/RobolectricKspProcessorTest.kt265 assertThat(contentVisible).contains("return org.robolectric.shadow.api.Shadow.extract(actual);")CODE
CRITICAL…tric/annotation/processing/ksp/ShadowProviderWriter.kt159 output.writeText(" return org.robolectric.shadow.api.Shadow.extract(actual);\n")CODE
CRITICAL…ic/annotation/processing/RobolectricProcessorTest.java204 com.google.common.io.Resources.asByteSource(CODE
CRITICAL…ic/annotation/processing/RobolectricProcessorTest.java205 com.google.common.io.Resources.getResource(CODE
CRITICAL…g/robolectric/util/reflector/ReflectorClassWriter.java548 return org.objectweb.asm.commons.Method.getMethod(method);CODE
CRITICAL…g/robolectric/util/reflector/ReflectorClassWriter.java556 this(org.objectweb.asm.commons.Method.getMethod(method), method);CODE
CRITICAL…ric/src/test/java/org/robolectric/RobolectricTest.java156 ClassLoader loader = android.content.res.ColorStateList.class.getClassLoader();CODE
CRITICAL…a/org/robolectric/shadows/ShadowBitmapFactoryTest.java529 InputStream inputStream = com.google.common.io.Resources.getResource(imagePath).openStream();CODE
CRITICAL…a/org/robolectric/shadows/ShadowBitmapFactoryTest.java567 return toByteArray(com.google.common.io.Resources.getResource(imagePath));CODE
TODO Padding7 hits · 10 pts
SeverityFileLineSnippetContext
LOW…java/org/robolectric/shadows/ShadowLegacyTypeface.java212 // TODO: implement this properlyCOMMENT
LOW…rg/robolectric/shadows/BluetoothGattProxyDelegate.java153 // TODO: implement properlyCOMMENT
LOW…in/java/org/robolectric/shadows/ShadowFontBuilder.java125 // TODO: implementCOMMENT
LOW…in/java/org/robolectric/res/android/ResourceTypes.java1207 // TODO: implement aboveCOMMENT
LOW…/main/java/org/robolectric/res/android/LoadedArsc.java535 // TODO: implement aboveCOMMENT
LOW…/java/org/robolectric/res/android/CppAssetManager.java138 // TODO: implement this?COMMENT
LOW…/java/org/robolectric/res/android/CppAssetManager.java272 // TODO: implement this?COMMENT
Fake / Example Data5 hits · 6 pts
SeverityFileLineSnippetContext
LOW…/robolectric/shadows/ShadowNativeStaticLayoutTest.java93 "Lorem ipsum dolor sit amet, consectetur adipiscing "CODE
LOW…/robolectric/shadows/ShadowNativeStaticLayoutTest.java93 "Lorem ipsum dolor sit amet, consectetur adipiscing "CODE
LOW⚡…bolectric/junit/rules/ExpectedLogMessagesRuleTest.java64 final Throwable throwable = new Throwable("lorem ipsum");CODE
LOW⚡…bolectric/junit/rules/ExpectedLogMessagesRuleTest.java71 final IllegalArgumentException exception = new IllegalArgumentException("lorem ipsum");CODE
LOW⚡…bolectric/junit/rules/ExpectedLogMessagesRuleTest.java79 final Throwable throwable = new Throwable("lorem ipsum");CODE
Example Usage Blocks4 hits · 6 pts
SeverityFileLineSnippetContext
LOWscripts/install-android-prebuilt.sh7# Usage:COMMENT
LOWscripts/deploy-android.sh5# Usage:COMMENT
LOWscripts/build-android.sh7# Usage:COMMENT
LOWscripts/sync-android.sh5# Usage:COMMENT
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/codeql.yml57 # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize howCOMMENT
Structural Annotation Overuse1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…java/org/robolectric/res/android/CppAssetManager2.java1542 // NOTE: This function does not do reference traversal. If you want to follow references toCOMMENT
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…rc/main/java/org/robolectric/res/android/ResTable.java1234 // TODO(BC): The following code block was a best effort attempt to directly transliterateCOMMENT