AI Slop Code Risk Monitor

runelite/runelite

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

Open source Old School RuneScape client

1.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for runelite/runelite, a Java project with 5,517 GitHub stars. SynthScan examined 429,194 lines of code across 1911 source files, recording 72 pattern matches distributed across 3 syntactic categories. The legacy adjusted pattern signal is 1.6 (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.

1.6
Adjusted Signal
1.6
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
5.5K
Stars
Java
Language
429.2K
Lines of Code
1.9K
Files
72
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 0.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 7.6/100 · LOW

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

Agent Over-Engineering Ratio 0.0/100 · LOW

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

PR Review Velocity Impact 7.1/100 · LOW

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

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 72 distinct pattern matches across 3 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.

Hallucination Indicators62 hits · 680 pts
SeverityFileLineSnippetContext
CRITICAL…t/runelite/client/plugins/slayer/SlayerPluginTest.java190 net.runelite.http.api.chat.Task task = new net.runelite.http.api.chat.Task();CODE
CRITICAL…t/runelite/client/plugins/slayer/SlayerPluginTest.java213 net.runelite.http.api.chat.Task task = new net.runelite.http.api.chat.Task();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java186 // Construct using net.runelite.client.party.Party.Join.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java427 // Construct using net.runelite.client.party.Party.Part.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java701 // Construct using net.runelite.client.party.Party.Data.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1193 // Construct using net.runelite.client.party.Party.C2S.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1609 // Construct using net.runelite.client.party.Party.UserJoin.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1914 // Construct using net.runelite.client.party.Party.UserPart.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2313 // Construct using net.runelite.client.party.Party.PartyData.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2863 // Construct using net.runelite.client.party.Party.S2C.newBuilder()COMMENT
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java257 return new net.runelite.client.party.Party.Join();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java442 return new net.runelite.client.party.Party.Part();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java793 return new net.runelite.client.party.Party.Data();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java970 return net.runelite.client.party.Party.Join.getDefaultInstance();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java986 msg_ != net.runelite.client.party.Party.Join.getDefaultInstance()) {CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java987 msg_ = net.runelite.client.party.Party.Join.newBuilder((net.runelite.client.party.Party.Join) msg_)CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1020 return net.runelite.client.party.Party.Part.getDefaultInstance();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1036 msg_ != net.runelite.client.party.Party.Part.getDefaultInstance()) {CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1037 msg_ = net.runelite.client.party.Party.Part.newBuilder((net.runelite.client.party.Party.Part) msg_)CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1070 return net.runelite.client.party.Party.Data.getDefaultInstance();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1086 msg_ != net.runelite.client.party.Party.Data.getDefaultInstance()) {CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1087 msg_ = net.runelite.client.party.Party.Data.newBuilder((net.runelite.client.party.Party.Data) msg_)CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1364 return new net.runelite.client.party.Party.C2S();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1680 return new net.runelite.client.party.Party.UserJoin();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java1985 return new net.runelite.client.party.Party.UserPart();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2461 return new net.runelite.client.party.Party.PartyData();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2640 return net.runelite.client.party.Party.UserJoin.getDefaultInstance();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2656 msg_ != net.runelite.client.party.Party.UserJoin.getDefaultInstance()) {CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2657 msg_ = net.runelite.client.party.Party.UserJoin.newBuilder((net.runelite.client.party.Party.UserJoin) msg_)CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2690 return net.runelite.client.party.Party.UserPart.getDefaultInstance();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2706 msg_ != net.runelite.client.party.Party.UserPart.getDefaultInstance()) {CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2707 msg_ = net.runelite.client.party.Party.UserPart.newBuilder((net.runelite.client.party.Party.UserPart) msg_)CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2740 return net.runelite.client.party.Party.PartyData.getDefaultInstance();CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2756 msg_ != net.runelite.client.party.Party.PartyData.getDefaultInstance()) {CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java2757 msg_ = net.runelite.client.party.Party.PartyData.newBuilder((net.runelite.client.party.Party.PartyData) msg_)CODE
CRITICAL…ent/src/main/java/net/runelite/client/party/Party.java3034 return new net.runelite.client.party.Party.S2C();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2861 return net.runelite.api.Skill.ATTACK.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2863 return net.runelite.api.Skill.DEFENCE.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2865 return net.runelite.api.Skill.STRENGTH.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2870 return net.runelite.api.Skill.HITPOINTS.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2874 return net.runelite.api.Skill.RANGED.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2876 return net.runelite.api.Skill.PRAYER.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2879 return net.runelite.api.Skill.MAGIC.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2881 return net.runelite.api.Skill.COOKING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2885 return net.runelite.api.Skill.WOODCUTTING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2887 return net.runelite.api.Skill.FLETCHING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2889 return net.runelite.api.Skill.FISHING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2892 return net.runelite.api.Skill.FIREMAKING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2894 return net.runelite.api.Skill.CRAFTING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2896 return net.runelite.api.Skill.SMITHING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2898 return net.runelite.api.Skill.MINING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2901 return net.runelite.api.Skill.HERBLORE.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2904 return net.runelite.api.Skill.AGILITY.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2906 return net.runelite.api.Skill.THIEVING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2908 return net.runelite.api.Skill.SLAYER.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2910 return net.runelite.api.Skill.FARMING.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2914 return net.runelite.api.Skill.RUNECRAFT.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2916 return net.runelite.api.Skill.HUNTER.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2919 return net.runelite.api.Skill.CONSTRUCTION.getName();CODE
CRITICAL⚡…te/client/plugins/chatcommands/ChatCommandsPlugin.java2921 return net.runelite.api.Skill.SAILING.getName();CODE
2 more matches not shown…
Over-Commented Block9 hits · 9 pts
SeverityFileLineSnippetContext
LOWlibs.versions.toml1#COMMENT
LOW…va/net/runelite/cache/definitions/ModelDefinition.java241 v1 = (v8x * v5x + v8y * v5y + v8z * v5z) * f;COMMENT
LOW…es/net/runelite/client/plugins/gpu/regions/regions.txt1// Copyright (c) 2023, Adam <Adam@sigterm.info>COMMENT
LOW…es/net/runelite/client/plugins/gpu/regions/regions.txt21// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORTCOMMENT
LOW…esources/net/runelite/client/plugins/skybox/skybox.txt1// Copyright (c) 2019, AbexCOMMENT
LOW…esources/net/runelite/client/plugins/skybox/skybox.txt21// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;COMMENT
LOW…esources/net/runelite/client/plugins/skybox/skybox.txt41//COMMENT
LOW…ava/net/runelite/client/plugins/gpu/ModelUploader.java801 // t1 = vertex[texA]COMMENT
LOW…in/java/net/runelite/client/plugins/gpu/GpuPlugin.java341 // [LWJGL] OpenGL debug messageCOMMENT
Fake / Example Data1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…client/plugins/menuentryswapper/ShiftWithdrawMode.java40 // chambers of xeric storage units do not have an "all-but-1" option or a "placeholder" option, so these options will cCOMMENT