AI Slop Code RIsk Monitor

PaperMC/Paper

The most widely used, high performance Minecraft server that aims to fix gameplay and mechanics inconsistencies

23.8 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for PaperMC/Paper, a Java project with 12,722 GitHub stars. SynthScan examined 357,046 lines of code across 3419 source files, recording 780 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 23.8 (Elevated 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.

23.8
Adjusted Signal
23.8
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
12.7K
Stars
Java
Language
357.0K
Lines of Code
3.4K
Files
780
Pattern Hits
2026-10-12
Scan Date
0.22
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 0.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 69.5/100 · HIGH

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 65.9/100 · HIGH

Which changes need focused human review? 780 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 767HIGH 0MEDIUM 2LOW 11

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 780 distinct pattern matches across 5 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 Indicators767 hits · 8485 pts
SeverityFileLineSnippetContext
CRITICAL…r-api/src/test/java/org/bukkit/support/TestServer.java43 return io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(((Class<Keyed>)invocationOnMockCODE
CRITICALpaper-api/src/main/java/org/bukkit/RegionAccessor.java457 com.google.common.base.Preconditions.checkArgument(type.getEntityClass() != null, "%s is not a valid EntityType,CODE
CRITICALpaper-api/src/main/java/org/bukkit/RegionAccessor.java462 com.google.common.base.Preconditions.checkArgument(type.getEntityClass() != null, "%s is not a valid EntityType,CODE
CRITICALpaper-api/src/main/java/org/bukkit/Server.java1373 return this.broadcast(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserCODE
CRITICALpaper-api/src/main/java/org/bukkit/FireworkEffect.java47 public static final net.kyori.adventure.util.Index<String, org.bukkit.FireworkEffect.Type> NAMES = net.kyori.advCODE
CRITICAL…ava/org/bukkit/configuration/ConfigurationSection.java1090 return this.getComponent(path, net.kyori.adventure.text.minimessage.MiniMessage.miniMessage(), fallback);CODE
CRITICAL…ava/org/bukkit/configuration/ConfigurationSection.java1103 this.setComponent(path, net.kyori.adventure.text.minimessage.MiniMessage.miniMessage(), value);CODE
CRITICAL…-api/src/main/java/org/bukkit/entity/LivingEntity.java1415 com.google.common.base.Preconditions.checkArgument(hand != null && hand.isHand(), String.format("Expected a valiCODE
CRITICALpaper-api/src/main/java/org/bukkit/entity/Player.java80 return net.kyori.adventure.identity.Identity.identity(this.getUniqueId());CODE
CRITICALpaper-api/src/main/java/org/bukkit/entity/Player.java2829 this.sendResourcePacks(net.kyori.adventure.resource.ResourcePackRequest.resourcePackRequest()CODE
CRITICALpaper-api/src/main/java/org/bukkit/entity/Player.java2833 .packs(net.kyori.adventure.resource.ResourcePackInfo.resourcePackInfo(uuid, java.net.URI.create(url), hash))CODE
CRITICALpaper-api/src/main/java/org/bukkit/entity/Player.java3607 return net.kyori.adventure.text.event.HoverEvent.showEntity(op.apply(net.kyori.adventure.text.event.HoverEvent.SCODE
CRITICALpaper-api/src/main/java/org/bukkit/entity/Entity.java1159 return net.kyori.adventure.text.event.HoverEvent.showEntity(op.apply(net.kyori.adventure.text.event.HoverEvent.SCODE
CRITICAL…c/main/java/org/bukkit/plugin/SimplePluginManager.java600 callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.SeCODE
CRITICAL…c/main/java/org/bukkit/plugin/SimplePluginManager.java673 callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.CODE
CRITICALpaper-api/src/main/java/org/bukkit/plugin/Plugin.java211 return net.kyori.adventure.text.logger.slf4j.ComponentLogger.logger(getLogger().getName());CODE
CRITICALpaper-api/src/main/java/org/bukkit/plugin/Plugin.java227 return org.apache.logging.log4j.LogManager.getLogger(getLogger().getName());CODE
CRITICAL…i/src/main/java/org/bukkit/plugin/java/JavaPlugin.java292 private static final PluginLoader INSTANCE = net.kyori.adventure.util.Services.service(PluginLoader.class)CODE
CRITICAL…i/src/main/java/org/bukkit/plugin/java/JavaPlugin.java296 init(server, description, dataFolder, file, classLoader, description, com.destroystokyo.paper.utils.PaperPluginLCODE
CRITICAL…ain/java/org/bukkit/plugin/java/PluginClassLoader.java74 this.logger = com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(description); // Paper - Register loggerCODE
CRITICAL…ain/java/org/bukkit/plugin/java/PluginClassLoader.java77 this.classLoaderGroup = io.papermc.paper.plugin.provider.classloader.PaperClassLoaderStorage.instance().registerCODE
CRITICAL⚡…ain/java/org/bukkit/plugin/java/PluginClassLoader.java322 if (org.bukkit.configuration.serialization.ConfigurationSerializable.class.isAssignableFrom(clazz)) {CODE
CRITICAL⚡…ain/java/org/bukkit/plugin/java/PluginClassLoader.java324 org.bukkit.configuration.serialization.ConfigurationSerialization.registerClass(serializable);CODE
CRITICAL⚡…ain/java/org/bukkit/plugin/java/PluginClassLoader.java329 if (org.bukkit.configuration.serialization.ConfigurationSerializable.class.isAssignableFrom(clazz)) {CODE
CRITICAL⚡…ain/java/org/bukkit/plugin/java/PluginClassLoader.java331 org.bukkit.configuration.serialization.ConfigurationSerialization.unregisterClass(serializable);CODE
CRITICAL…ava/org/bukkit/plugin/messaging/StandardMessenger.java544 channel = org.apache.commons.lang3.StringUtils.normalizeSpace(channel);CODE
CRITICAL…/src/main/java/org/bukkit/permissions/Permissible.java139 return net.kyori.adventure.util.TriState.byBoolean(this.hasPermission(permission));CODE
CRITICAL…/src/main/java/org/bukkit/permissions/Permissible.java153 return net.kyori.adventure.util.TriState.byBoolean(this.hasPermission(permission));CODE
CRITICALpaper-api/src/main/java/org/bukkit/map/MapCursor.java71 this.caption = caption == null ? null : net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legCODE
CRITICALpaper-api/src/main/java/org/bukkit/map/MapCursor.java124 this.caption = caption == null ? null : net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legCODE
CRITICALpaper-api/src/main/java/org/bukkit/map/MapCursor.java270 return this.caption == null ? null : net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacyCODE
CRITICALpaper-api/src/main/java/org/bukkit/map/MapCursor.java281 this.caption = caption == null ? null : net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legCODE
CRITICAL…i/src/main/java/org/bukkit/scoreboard/DisplaySlot.java32 public static final net.kyori.adventure.util.Index<String, DisplaySlot> NAMES = net.kyori.adventure.util.Index.creatCODE
CRITICAL…pi/src/main/java/org/bukkit/scoreboard/Scoreboard.java174 return this.registerNewObjective(name, criteria, net.kyori.adventure.text.serializer.legacy.LegacyComponentSeriaCODE
CRITICAL…src/main/java/org/bukkit/inventory/SmithingRecipe.java48 com.google.common.base.Preconditions.checkArgument(!result.isEmpty() || this instanceof ComplexRecipe, "Recipe cCODE
CRITICAL…/src/main/java/org/bukkit/inventory/InventoryView.java286 return net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(this.getCODE
CRITICAL…-api/src/main/java/org/bukkit/inventory/ItemStack.java1097 return io.papermc.paper.inventory.ItemRarity.valueOf(this.getItemMeta().getRarity().name());CODE
CRITICAL…src/main/java/org/bukkit/command/SimpleCommandMap.java145 String[] args = org.apache.commons.lang3.StringUtils.split(commandLine, ' '); // Paper - fix adjacent spaces (frCODE
CRITICAL…src/main/java/org/bukkit/command/SimpleCommandMap.java170 server.getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.deCODE
CRITICAL…src/main/java/org/bukkit/command/SimpleCommandMap.java176 server.getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.deCODE
CRITICAL…src/main/java/org/bukkit/command/SimpleCommandMap.java257 server.getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.deCODE
CRITICALpaper-api/src/main/java/org/bukkit/command/Command.java202 if (!permissionMessage.equals(net.kyori.adventure.text.Component.empty())) {CODE
CRITICALpaper-api/src/main/java/org/bukkit/command/Command.java203 target.sendMessage(permissionMessage.replaceText(net.kyori.adventure.text.TextReplacementConfig.builder().maCODE
CRITICALpaper-api/src/main/java/org/bukkit/command/Command.java341 return net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serializeOrNull(permCODE
CRITICALpaper-api/src/main/java/org/bukkit/command/Command.java412 this.permissionMessage = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deCODE
CRITICAL⚡paper-api/src/main/java/org/bukkit/command/Command.java467 broadcastCommandMessage(source, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySectiCODE
CRITICAL⚡paper-api/src/main/java/org/bukkit/command/Command.java475 net.kyori.adventure.text.TextComponent.Builder result = net.kyori.adventure.text.Component.text()CODE
CRITICAL⚡paper-api/src/main/java/org/bukkit/command/Command.java479 .append(net.kyori.adventure.text.Component.text(": "))CODE
CRITICALpaper-api/src/main/java/org/bukkit/command/Command.java501 net.kyori.adventure.text.TextComponent.Builder colored = net.kyori.adventure.text.Component.text()CODE
CRITICALpaper-api/src/main/java/org/bukkit/command/Command.java504 .append(net.kyori.adventure.text.Component.text("["), result, net.kyori.adventure.text.Component.text("]"));CODE
CRITICAL…pi/src/main/java/org/bukkit/command/CommandSender.java139 this.sendMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serialize(CODE
CRITICAL…pi/src/main/java/org/bukkit/command/CommandSender.java161 this.sendMessage(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(message, this));CODE
CRITICAL…pi/src/main/java/org/bukkit/command/CommandSender.java174 this.sendMessage(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(message, this, resolCODE
CRITICAL…pi/src/main/java/org/bukkit/command/CommandSender.java183 this.sendMessage(net.kyori.adventure.text.Component.text(message));CODE
CRITICAL…pi/src/main/java/org/bukkit/command/CommandSender.java211 this.sendMessage(new net.md_5.bungee.api.chat.TextComponent(components).toLegacyText());CODE
CRITICAL…n/java/org/bukkit/command/PluginCommandYamlParser.java77 newCmd.permissionMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySectCODE
CRITICAL…in/java/org/bukkit/command/defaults/ReloadCommand.java75 return com.google.common.collect.Lists.newArrayList("permissions", "commands"); // PaperCODE
CRITICAL…ain/java/org/bukkit/event/inventory/InventoryType.java198 this.defaultTitleComponent = net.kyori.adventure.text.Component.text(defaultTitle); // Paper - AdventureCODE
CRITICAL…/main/java/org/bukkit/event/block/SignChangeEvent.java56 this.adventure$lines.add(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection(CODE
CRITICAL…/main/java/org/bukkit/event/block/SignChangeEvent.java114 return this.adventure$lines.stream().map(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.leCODE
707 more matches not shown…
Over-Commented Block10 hits · 10 pts
SeverityFileLineSnippetContext
LOW…t/java/org/bukkit/metadata/MetadataConversionTest.java1// Copyright (C) 2011 Ryan MichelaCOMMENT
LOW…-api/src/main/java/org/bukkit/inventory/ItemStack.java1241 // *COMMENT
LOW…-server/src/main/resources/configurations/commands.yml1# This is the Bukkit commands configuration file for Paper.COMMENT
LOWpaper-server/src/main/resources/configurations/help.yml1# This is the Bukkit help configuration file for Paper.COMMENT
LOWpaper-server/src/main/resources/configurations/help.yml21# general-topics:COMMENT
LOWpaper-server/src/main/resources/configurations/help.yml41# COMMENT
LOWpaper-server/src/main/resources/configurations/help.yml61# Docs: https://docs.papermc.io/COMMENT
LOW…bukkit/craftbukkit/inventory/CraftInventoryPlayer.java81 ServerPlayer player = ((CraftPlayer) this.getHolder()).getHandle();COMMENT
LOW…bukkit/craftbukkit/inventory/CraftInventoryPlayer.java101 // The player's hotbar is indexed 0-8 in setItem(). The order goes: 0-8 hotbar, 9-35 normal inventory, 36 boots,COMMENT
LOWbuild-data/dev-imports.txt1# You can use this file to import files from minecraft libraries into the projectCOMMENT
Self-Referential Comments1 hit · 4 pts
SeverityFileLineSnippetContext
MEDIUM⚡paper-server/src/main/resources/configurations/help.yml7# This file is divided up into the following parts:COMMENT
Decorative Section Separators1 hit · 4 pts
SeverityFileLineSnippetContext
MEDIUM⚡paper-server/src/main/resources/configurations/help.yml15# ================================================================COMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOW⚡paper-server/src/main/resources/configurations/help.yml17# Set this to true to list the individual command help topics in the master help.COMMENT