AI Slop Code Risk Monitor

love2d/love

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

LÖVE is an awesome 2D game framework for Lua.

2.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for love2d/love, a C++ project with 8,895 GitHub stars. SynthScan examined 602,179 lines of code across 1061 source files, recording 1288 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.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.

2.1
Adjusted Signal
2.1
Raw Pattern Score
100%
Time Factor
2026-10-26
Last Push
8.9K
Stars
C++
Language
602.2K
Lines of Code
1.1K
Files
1.3K
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 9.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 1.3/100 · LOW

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

PR Review Velocity Impact 11.1/100 · LOW

Which changes need focused human review? 1288 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 0HIGH 0MEDIUM 63LOW 1225

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 1288 distinct pattern matches across 9 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 Block1204 hits · 1069 pts
SeverityFileLineSnippetContext
LOWCMakeLists.txt1#COMMENT
LOWCMakeLists.txt1341#COMMENT
LOWCMakeLists.txt1781#COMMENT
LOWCMakeLists.txt1801#COMMENT
LOWCMakeLists.txt1821# vulkan headersCOMMENT
LOWCMakeLists.txt1841# src/libraries/vulkanheaders/vulkan_ios.hCOMMENT
LOWtesting/resources/vk_layer_settings.txt1COMMENT
LOWtesting/resources/vk_layer_settings.txt21# =====================COMMENT
LOWtesting/resources/vk_layer_settings.txt41COMMENT
LOWtesting/resources/vk_layer_settings.txt61# Handle WrappingCOMMENT
LOWtesting/resources/vk_layer_settings.txt81COMMENT
LOWtesting/resources/vk_layer_settings.txt101# =====================COMMENT
LOWtesting/resources/vk_layer_settings.txt121# =====================COMMENT
LOWtesting/resources/vk_layer_settings.txt141# =====================COMMENT
LOWtesting/resources/vk_layer_settings.txt161# <LayerIdentifier>.gpuav_max_buffer_device_addressesCOMMENT
LOWtesting/resources/vk_layer_settings.txt181# with GPU-AV enabled in the VkShaderModuleCreateInfo pNextCOMMENT
LOWtesting/resources/vk_layer_settings.txt201# commandsCOMMENT
LOWtesting/resources/vk_layer_settings.txt221# Specifies that the validation layers reserve a descriptor set binding slot forCOMMENT
LOWtesting/resources/vk_layer_settings.txt241#khronos_validation.gpuav_debug_validate_instrumented_shaders = falseCOMMENT
LOWtesting/resources/vk_layer_settings.txt261COMMENT
LOWtesting/resources/vk_layer_settings.txt281# =====================COMMENT
LOWtesting/resources/vk_layer_settings.txt301# <LayerIdentifier>.enable_message_limitCOMMENT
LOW.github/workflows/main.yml381 name: test-output-windows-${{ steps.vars.outputs.arch }}-opengles-${{ steps.report2.outputs.conclusion }}COMMENT
LOW.github/workflows/main.yml401# powershell.exe C:/VulkanSDK/1.3.231.1/runtime/x64/vulkaninfo.exe --summaryCOMMENT
LOWsrc/love.cpp21#include "common/version.h"COMMENT
LOWsrc/love.cpp41#include <windows.h>COMMENT
LOWsrc/libraries/enet/enet.cpp21 * THE SOFTWARE.COMMENT
LOWsrc/libraries/enet/libenet/unix.c1/** COMMENT
LOWsrc/libraries/enet/libenet/unix.c21COMMENT
LOWsrc/libraries/enet/libenet/unix.c41#ifndef HAS_GETADDRINFOCOMMENT
LOWsrc/libraries/enet/libenet/include/enet/enet.h21#include "enet/types.h"COMMENT
LOWsrc/libraries/enet/libenet/include/enet/win32.h1/** COMMENT
LOWsrc/libraries/enet/libenet/include/enet/win32.h41#elseCOMMENT
LOWsrc/libraries/enet/libenet/include/enet/unix.h1/** COMMENT
LOWsrc/libraries/enet/libenet/include/enet/unix.h41#define ENET_SOCKETSET_EMPTY(sockset) FD_ZERO (& (sockset))COMMENT
LOWsrc/libraries/Wuff/wuff.h21 #define WUFF_EXPORT __declspec(dllexport)COMMENT
LOWsrc/libraries/Wuff/wuff.h241COMMENT
LOWsrc/libraries/Wuff/wuff_internal.h1#ifndef WUFF_INTERNAL_HCOMMENT
LOWsrc/libraries/Wuff/wuff_config.h1#ifndef WUFF_CONFIG_HCOMMENT
LOWsrc/libraries/tinyexr/tinyexr.h21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h41// notice, this list of conditions and the following disclaimer.COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h61//COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h81// #include "tinyexr.h"COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h101#endifCOMMENT
LOWsrc/libraries/tinyexr/tinyexr.h121COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h261 int width;COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h281extern int IsEXR(const char *filename);COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h341 const char *filename,COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h361extern int LoadEXRImageFromFile(EXRImage *image, const EXRHeader *header,COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h381// errorCOMMENT
LOWsrc/libraries/tinyexr/tinyexr.h401 const unsigned char *memory,COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h421 const EXRHeader *exr_header,COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h441// Loads multi-part OpenEXR deep image.COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h461COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h481#if __cplusplus > 199711LCOMMENT
LOWsrc/libraries/tinyexr/tinyexr.h501namespace tinyexr {COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h521#if TINYEXR_USE_MINIZCOMMENT
LOWsrc/libraries/tinyexr/tinyexr.h541#if __has_warning("-Wmacro-redefined")COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h821COMMENT
LOWsrc/libraries/tinyexr/tinyexr.h841// API's.COMMENT
1144 more matches not shown…
Decorative Section Separators47 hits · 151 pts
SeverityFileLineSnippetContext
MEDIUM⚡testing/resources/vk_layer_settings.txt5# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt13# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt21# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt29# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt36# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt43# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt49# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt56# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt62# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt69# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt76# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt83# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt92# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt101# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt109# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt115# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt121# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt127# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt133# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt141# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt148# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt154# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt160# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt166# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt172# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt178# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt185# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt192# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt198# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt205# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt212# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt219# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt229# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt238# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt244# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt250# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt257# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt263# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt269# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt275# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt281# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt287# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt293# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt300# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt306# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt312# =====================COMMENT
MEDIUM⚡testing/resources/vk_layer_settings.txt319# =====================COMMENT
AI Slop Vocabulary14 hits · 42 pts
SeverityFileLineSnippetContext
MEDIUMsrc/libraries/ddsparse/ddsparse.cpp63 // likely written by D3DX. The more robust solution is to use the 'DX10'COMMENT
MEDIUMsrc/libraries/tinyexr/tinyexr.h7808 // TODO(syoyo): Add more robust out-of-bounds check in `rleUncompress`.COMMENT
MEDIUMsrc/libraries/spirv_cross/spirv_glsl.cpp346 // Sanity check the iteration count to be robust against a certain class of bugs whereCOMMENT
MEDIUMsrc/libraries/spirv_cross/spirv_glsl.cpp12383 // Essentially, we can only remove one set of swizzles, since that's what we have control over ...COMMENT
MEDIUMsrc/libraries/spirv_cross/spirv_glsl.cpp12642 // We can look at result type which is more robust.COMMENT
MEDIUMsrc/libraries/spirv_cross/spirv_glsl.cpp20958 // Definitely not.COMMENT
MEDIUMsrc/libraries/spirv_cross/spirv_msl.cpp18658 // We don't always use proper type hierarchy for synthesized types, so be robust.COMMENT
MEDIUMsrc/libraries/spirv_cross/spirv_cross.cpp4045 // Essentially a map of block -> { variables accessed in the basic block }COMMENT
MEDIUMsrc/libraries/spirv_cross/spirv_hlsl.cpp1843 // Sort input and output variables based on, from more robust to less robust:COMMENT
MEDIUMsrc/libraries/glslang/SPIRV/GlslangToSpv.cpp6668 // TODO: It would be more robust to do a full recursive verification of the types satisfying SPIR-V rules.COMMENT
MEDIUM…ies/glslang/glslang/MachineIndependent/ParseHelper.cpp9943// for the parameter to the constructor (passed to this function). Essentially, it convertsCOMMENT
MEDIUMsrc/modules/filesystem/physfs/Filesystem.cpp329 // more robust and more performant, so they should be favored, if possible.COMMENT
MEDIUMsrc/modules/font/BMFontRasterizer.cpp67// This is not entirely robust...COMMENT
MEDIUMsrc/modules/graphics/opengl/Graphics.cpp327 // Always enable seamless cubemap filtering when possible.COMMENT
Slop Phrases11 hits · 15 pts
SeverityFileLineSnippetContext
LOWsrc/libraries/lodepng/lodepng.cpp70lodepng source code. Don't forget to remove "static" if you copypaste themCODE
LOWsrc/libraries/physfs/physfs.h1140 * Don't forget to call PHYSFS_freeList() with the return value from thisCOMMENT
MEDIUMsrc/libraries/box2d/common/b2_settings.cpp45// You can modify this to use your logging facility.COMMENT
LOWsrc/libraries/vma/vk_mem_alloc.h16842// At the end, don't forget to:COMMENT
LOWsrc/libraries/vma/vk_mem_alloc.h18895// At the end, don't forget to destroy it!COMMENT
LOWsrc/libraries/vma/vk_mem_alloc.h18930// At the end, don't forget to destroy it!COMMENT
LOWsrc/libraries/vma/vk_mem_alloc.h680 To prepare for this possibility, don't forget to add appropriate flags likeCODE
LOWsrc/libraries/vma/vk_mem_alloc.h2678don't forget to free them.CODE
LOWsrc/libraries/vma/vk_mem_alloc.h2725don't forget to free it as well.CODE
LOWsrc/libraries/vma/vk_mem_alloc.h16879Don't forget to destroy your buffer and allocation objects when no longer needed:CODE
LOWsrc/libraries/vma/vk_mem_alloc.h18041If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the alCODE
Hyper-Verbose Identifiers5 hits · 5 pts
SeverityFileLineSnippetContext
LOWsrc/libraries/vma/vk_mem_alloc.h1545To be used with function vmaBeginDefragmentationPass().CODE
LOWsrc/libraries/vma/vk_mem_alloc.h17115The easiest way to copy data from a host pointer to an allocation is to use convenience function vmaCopyMemoryToAllocatiCODE
LOWsrc/libraries/vma/vk_mem_alloc.h17144Copy in the other direction - from an allocation to a host pointer can be performed the same way using function vmaCopyACODE
LOWsrc/libraries/vma/vk_mem_alloc.h17592 using default pools with dedicated function vmaCreateBufferWithAlignment().CODE
LOWsrc/libraries/vma/vk_mem_alloc.h18257use special function vmaCreateBufferWithAlignment(), which takes additional parameter `minAlignment`.CODE
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/libraries/dr/dr_flac.h5974 /* We found a FLAC frame. We need to check if it contains the sample we're looking for. */COMMENT
LOWsrc/libraries/glslang/SPIRV/SpvBuilder.cpp4418 // Step 2: Construct a matrix from that array.COMMENT
LOWsrc/libraries/box2d/b2_world.h105 /// The purpose of this function is to support sub-stepping. Sub-stepping is often used to maintainCOMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/libraries/glslang/SPIRV/SpvBuilder.cpp4418 // Step 2: Construct a matrix from that array.COMMENT
LOWsrc/libraries/glslang/SPIRV/GlslangToSpv.cpp6639// NOTE: This function can handle any store request; if it's not special itCOMMENT
Excessive Try-Catch Wrapping1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMsrc/modules/love/boot.lua503 print("Error: " .. tostring(main))CODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…es/glslang/glslang/MachineIndependent/linkValidate.cpp233 // TODO: implement support for geometry passthroughCOMMENT