AI Slop Code Risk Monitor

OpenRA/OpenRA

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

Open Source real-time strategy game engine for early Westwood games such as Command & Conquer: Red Alert written in C# using SDL and OpenGL. Runs on Windows, Linux, *BSD and Mac OS X.

0.5 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for OpenRA/OpenRA, a C# project with 17,698 GitHub stars. SynthScan examined 658,238 lines of code across 2550 source files, recording 129 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 0.5 (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.5
Adjusted Signal
0.5
Raw Pattern Score
100%
Time Factor
2026-10-28
Last Push
17.7K
Stars
C#
Language
658.2K
Lines of Code
2.5K
Files
129
Pattern Hits
2026-10-31
Scan Date
0.01
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.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.5/100 · LOW

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

Agent Over-Engineering Ratio 0.2/100 · LOW

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

PR Review Velocity Impact 2.5/100 · LOW

Which changes need focused human review? 129 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 20HIGH 1MEDIUM 10LOW 98

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 129 distinct pattern matches across 10 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 Indicators20 hits · 200 pts
SeverityFileLineSnippetContext
CRITICALOpenRA.Mods.Cnc/Traits/World/JumpjetActorLayer.cs43 terrainIndex = self.World.Map.Rules.TerrainInfo.GetTerrainIndex(info.TerrainType);CODE
CRITICALOpenRA.Mods.Cnc/Traits/SupportPowers/DropPodsPower.cs98 if (!self.World.Map.Rules.Actors.TryGetValue(unitType, out var actorInfo))CODE
CRITICAL…A.Mods.Common/Scripting/Properties/PlayerProperties.cs93 if (!Context.World.Map.Rules.Actors.TryGetValue(type, out var ai))CODE
CRITICAL…A.Mods.Common/Scripting/Properties/PlayerProperties.cs108 if (!Context.World.Map.Rules.Actors.ContainsKey(type))CODE
CRITICAL…ds.Common/Scripting/Properties/ProductionProperties.cs41 if (!Self.World.Map.Rules.Actors.TryGetValue(actorType, out var actorInfo))CODE
CRITICALOpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs125 if (!Context.World.Map.Rules.Actors.TryGetValue(type, out var ai))CODE
CRITICALOpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs146 var pqueue = Context.World.Map.Rules.Actors.Values.SelectMany(a => a.TraitInfos<ProductionQueueInfo>()CODE
CRITICALOpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs156 var pqueue = Context.World.Map.Rules.Actors.Values.SelectMany(a => a.TraitInfos<ProductionQueueInfo>()CODE
CRITICALOpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs172 if (!Context.World.Map.Rules.Actors.TryGetValue(type, out var ai))CODE
CRITICALOpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs182 if (!Context.World.Map.Rules.Actors.TryGetValue(type, out var ai))CODE
CRITICAL…A.Mods.Common/Scripting/Global/ReinforcementsGlobal.cs35 if (!Context.World.Map.Rules.Actors.TryGetValue(actorType, out var ai))CODE
CRITICALOpenRA.Mods.Common/ServerTraits/LobbyCommands.cs540 .Concat(server.Map.Players.Players.Values.Select(p => p.Color)).ToList();CODE
CRITICALOpenRA.Mods.Common/ServerTraits/LobbyCommands.cs1440 .Concat(server.Map.Players.Players.Values.Select(p => p.Color)).ToList();CODE
CRITICAL…enRA.Mods.Common/Traits/Buildings/GroundLevelBridge.cs79 var terrainIndex = self.World.Map.Rules.TerrainInfo.GetTerrainIndex(Info.TerrainType);CODE
CRITICALOpenRA.Mods.Common/Traits/Render/RenderSprites.cs293 .Select(a => int2.FromVector(a.Animation.Animation.Image.Size.AsVector2() * a.Animation.Animation.CurrentSequence.SCODE
CRITICAL…nRA.Mods.Common/Traits/World/SubterraneanActorLayer.cs42 terrainIndex = self.World.Map.Rules.TerrainInfo.GetTerrainIndex(info.TerrainType);CODE
CRITICAL…RA.Mods.Common/Traits/BotModules/HarvesterBotModule.cs387 var minCellCost = harv.Mobile.Locomotor.Info.TerrainSpeeds.Values.Min(ti => ti.Cost);CODE
CRITICAL….Mods.Common/Traits/SupportPowers/ParatroopersPower.cs96 if (!self.World.Map.Rules.Actors.TryGetValue(utLower, out var unitType))CODE
CRITICAL…Commands/Documentation/ExtractZeroBraneStudioLuaAPI.cs132 Console.WriteLine($" version = \"{utility.ModData.Manifest.Metadata.Version.Split('-').LastOrDefault()}\",");CODE
CRITICALOpenRA.Mods.Common/Widgets/ProductionTabsWidget.cs116 Groups = world.Map.Rules.Actors.Values.SelectMany(a => a.TraitInfos<ProductionQueueInfo>())CODE
Over-Commented Block88 hits · 88 pts
SeverityFileLineSnippetContext
LOWpackaging/functions.sh1#!/bin/shCOMMENT
LOWpackaging/functions.sh41 -p:CopyCncDll="${COPY_CNC_DLL}" -p:CopyD2kDll="${COPY_D2K_DLL}" \COMMENT
LOWpackaging/functions.sh121COMMENT
LOWpackaging/functions.sh141# Linux AppImage packagingCOMMENT
LOWpackaging/functions.sh181# Copy launch wrappers, application icons, desktop, and MIME files to the target directoryCOMMENT
LOWpackaging/macos/apphost.c1/*COMMENT
LOWpackaging/macos/buildpackage.sh1#!/bin/bashCOMMENT
LOWOpenRA.Mods.Common/WorldExtensions.cs201COMMENT
LOWOpenRA.Mods.Common/TraitsInterfaces.cs221 /// <summary>When null, the client should act as if it can dock but never do.</summary>COMMENT
LOWOpenRA.Mods.Common/TraitsInterfaces.cs861 /// Actors on the map are ignored, as if they were not present.COMMENT
LOWOpenRA.Mods.Common/TraitsInterfaces.cs881 /// blocking by the blocking rules.COMMENT
LOWOpenRA.Mods.Common/TraitsInterfaces.cs961 /// Calculates a path for the actor from multiple possible sources, whilst searching for an acceptable target.COMMENT
LOWOpenRA.Mods.Common/TraitsInterfaces.cs981 /// Determines if a path exists between source and target.COMMENT
LOWOpenRA.Mods.Common/Traits/World/PathFinder.cs81 /// Returned path is *reversed* and given target to source.COMMENT
LOWOpenRA.Mods.Common/Traits/World/PathFinder.cs101 bool laneBias = true)COMMENT
LOWOpenRA.Mods.Common/Traits/World/PathFinder.cs241 bool laneBias = true)COMMENT
LOWOpenRA.Mods.Common/Traits/World/PathFinder.cs261 /// </remarks>COMMENT
LOWOpenRA.Mods.Common/Pathfinder/HierarchicalPathFinder.cs21 /// <summary>COMMENT
LOWOpenRA.Mods.Common/Pathfinder/HierarchicalPathFinder.cs41 /// prioritize exploring nodes that lie closer to the target, rather than exploring nodes that take us away fromCOMMENT
LOWOpenRA.Mods.Common/Pathfinder/HierarchicalPathFinder.cs61 /// grid. Every region will be represented by one node in the abstract graph (an abstract node, for short).</para>COMMENT
LOWOpenRA.Mods.Common/Pathfinder/HierarchicalPathFinder.cs81 /// <see cref="Locomotor.CanMoveFreelyInto(Actor, CPos, SubCell, BlockedByActor, Actor, bool)"/>. It will be awareCOMMENT
LOWOpenRA.Mods.Common/Pathfinder/HierarchicalPathFinder.cs121 /// A lookup will fail, rather than return an empty list.COMMENT
LOWOpenRA.Mods.Common/Pathfinder/HierarchicalPathFinder.cs641 /// <para>COMMENT
LOWOpenRA.Mods.Common/Pathfinder/HierarchicalPathFinder.cs1221 /// of the original node to provide a better cost estimate.COMMENT
LOWOpenRA.Mods.Common/Pathfinder/Grid.cs21 /// <remarks>COMMENT
LOWOpenRA.Mods.Common/Pathfinder/PathSearch.cs121 return search;COMMENT
LOWOpenRA.Mods.Common/Pathfinder/PathSearch.cs161 }COMMENT
LOWOpenRA.Mods.Common/EditorBrushes/EditorBlit.cs141 // - Its a sparse blit; andCOMMENT
LOWOpenRA.Mods.Common/UpdateRules/UpdatePath.cs21 //COMMENT
LOWOpenRA.Mods.Common/Activities/Enter.cs41 moveCooldownHelper = new MoveCooldownHelper(self.World, move as Mobile) { RetryIfDestinationBlocked = true };COMMENT
LOW…enRA.Mods.Common/Activities/Move/MoveCooldownHelper.cs1using OpenRA.Activities;COMMENT
LOW…enRA.Mods.Common/Activities/Move/MoveCooldownHelper.cs41 /// <summary>COMMENT
LOW…/UtilityCommands/Documentation/DocumentationHelpers.cs141 typesPerFile[filePath] = list = [];COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs41 public enum GraphModeCOMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs301 GraphMode mode = GraphMode.Identifier)COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs321 /// filler should capture and manipulate any necessary input and outputCOMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs421 return output;COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs741COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs1041 /// counter-clockwise (as defined in MapGenerator.Direction).COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs1121 /// Trace the borders between true and false regions of an input matrix, returning an arrayCOMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs1261 /// <para>COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs1361 return changesAcc;COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs1621 links[point] = 0;COMMENT
LOWOpenRA.Mods.Common/MapGenerator/MatrixUtils.cs1681 while (i != startAt);COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Direction.cs261 return best;COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Direction.cs281 /// Supplying a zero-offset will throw. Assumes that CVec(1, 0)COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Terraformer.cs661 outside: false,COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Terraformer.cs741 random,COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Terraformer.cs901 /// <param name="random">Random source for locations and actor type selection.</param>COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Terraformer.cs1141 /// <summary>COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Terraformer.cs1221 }COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Terraformer.cs1241 Matrix<PathPartitionZone> zoneMask,COMMENT
LOWOpenRA.Mods.Common/MapGenerator/Terraformer.cs2241 /// <summary>COMMENT
LOWOpenRA.Mods.Common/MapGenerator/NoiseUtils.cs41 /// <summary>COMMENT
LOWOpenRA.Mods.Common/MapGenerator/LatTiler.cs61COMMENT
LOWOpenRA.Mods.Common/MapGenerator/TilingPath.cs161 }COMMENT
LOWOpenRA.Mods.Common/MapGenerator/TilingPath.cs181 /// </summary>COMMENT
LOWOpenRA.Mods.Common/MapGenerator/TilingPath.cs201 /// <summary>COMMENT
LOWOpenRA.Mods.Common/MapGenerator/TilingPath.cs321COMMENT
LOWOpenRA.Mods.Common/MapGenerator/TilingPath.cs341 // There is a matrix for each possible connection type, and each matrix stores theCOMMENT
28 more matches not shown…
Decorative Section Separators8 hits · 24 pts
SeverityFileLineSnippetContext
MEDIUMmods/ts/chrome.yaml49# ----------------------------------------------------------------------COMMENT
MEDIUMmods/ts/chrome.yaml51# ----------------------------------------------------------------------COMMENT
MEDIUMmods/ts/chrome.yaml251# ----------------------------------------------------------------------COMMENT
MEDIUMmods/ts/chrome.yaml253# ----------------------------------------------------------------------COMMENT
MEDIUMmods/ts/chrome.yaml454# ----------------------------------------------------------------------COMMENT
MEDIUMmods/ts/chrome.yaml456# ----------------------------------------------------------------------COMMENT
MEDIUMmods/ts/chrome.yaml521# ----------------------------------------------------------------------COMMENT
MEDIUMmods/ts/chrome.yaml523# ----------------------------------------------------------------------COMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHOpenRA.Mods.D2k/UtilityCommands/D2kMapImporter.cs511 // Just get a template that contains a tile with the same ID as requestedCOMMENT
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMpackaging/format-docs.py3# This file is part of OpenRA, which is free software. It is madeCOMMENT
MEDIUMpackaging/windows/fixlauncher.py2# This file is part of OpenRA, which is free software. It is madeCOMMENT
Hyper-Verbose Identifiers6 hits · 6 pts
SeverityFileLineSnippetContext
LOW…s/cnc/maps/the-tiberium-strain/the-tiberium-strain.lua228local function ReinforceVillageFlameTank()CODE
LOW…s/cnc/maps/the-tiberium-strain/the-tiberium-strain.lua283local function ReinforceVillageHelicopter()CODE
LOWmods/ra/maps/proving-grounds/proving-grounds.lua495local function ReinforceCrateParatroopers()CODE
LOWmods/ra/maps/allies-07/allies07.lua66local function CompleteObjectiveWithSpeech(objective, speech, markDelay, speechDelay)CODE
LOWmods/ra/maps/allies-07/allies07.lua87local function InitialAlliedReinforcements()CODE
LOWmods/ra/maps/allies-07/allies07.lua317local function ClearSubActivityCompleted()CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWlaunch-dedicated.sh4# Usage:COMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWlaunch-dedicated.sh7# Read the file to see which settings you can overrideCOMMENT
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWOpenRA.Game/Server/OrderBuffer.cs99 // We need to check if we have a connection slower than our baseline and then use that as our offset.COMMENT
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpackaging/format-docs.py29CODE