AI Slop Code Risk Monitor

shadps4-emu/shadPS4

SlopCodeMonitor badge for shadps4-emu/shadPS4 Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C++

1.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for shadps4-emu/shadPS4, a C++ project with 33,988 GitHub stars. SynthScan examined 333,636 lines of code across 1006 source files, recording 598 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.8 (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.8
Adjusted Signal
1.8
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
34.0K
Stars
C++
Language
333.6K
Lines of Code
1.0K
Files
598
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 8.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 0.7/100 · LOW

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

PR Review Velocity Impact 9.1/100 · LOW

Which changes need focused human review? 598 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 1MEDIUM 17LOW 580

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 598 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.

Over-Commented Block562 hits · 519 pts
SeverityFileLineSnippetContext
LOWCONTRIBUTING.md41// STD includes firstCOMMENT
LOWexternals/stb/stb_image_write.h201#ifdef _WIN32COMMENT
LOWexternals/stb/stb_image_write.h221#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED)COMMENT
LOWexternals/stb/stb_image_write.h801 } elseCOMMENT
LOWexternals/stb/stb_image_write.h881 (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush())COMMENT
LOWexternals/stb/stb_image.h121COMMENT
LOWexternals/stb/stb_image.h141// unsigned char *data = stbi_load(filename, &x, &y, &n, 0);COMMENT
LOWexternals/stb/stb_image.h161// *channels_in_file otherwise. If desired_channels is non-zero,COMMENT
LOWexternals/stb/stb_image.h181// more user-friendly ones.COMMENT
LOWexternals/stb/stb_image.h201// Additionally, stb_image will reject image files that have any of theirCOMMENT
LOWexternals/stb/stb_image.h221// ===========================================================================COMMENT
LOWexternals/stb/stb_image.h241// - Small source code footprint ("easy to maintain")COMMENT
LOWexternals/stb/stb_image.h261// supported by the compiler. For ARM Neon support, you must explicitlyCOMMENT
LOWexternals/stb/stb_image.h281// stb_image supports loading HDR images in general, and currently the RadianceCOMMENT
LOWexternals/stb/stb_image.h301//COMMENT
LOWexternals/stb/stb_image.h321// Call stbi_set_unpremultiply_on_load(1) as well to force a divide perCOMMENT
LOWexternals/stb/stb_image.h341// STBI_NO_PICCOMMENT
LOWexternals/stb/stb_image.h361// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greaterCOMMENT
LOWexternals/stb/stb_image.h541COMMENT
LOWexternals/stb/stb_image.h561 #endifCOMMENT
LOWexternals/stb/stb_image.h581COMMENT
LOWexternals/stb/stb_image.h601#ifndef STBI_ASSERTCOMMENT
LOWexternals/stb/stb_image.h621#endifCOMMENT
LOWexternals/stb/stb_image.h661#endifCOMMENT
LOWexternals/stb/stb_image.h681#ifndef STBI_MALLOCCOMMENT
LOWexternals/stb/stb_image.h701// but previous attempts to provide the SSE2 functions with runtimeCOMMENT
LOWexternals/stb/stb_image.h761#else // assume GCC-style if not VC++COMMENT
LOWexternals/stb/stb_image.h781COMMENT
LOWexternals/stb/stb_image.h981 return 0;COMMENT
LOWexternals/stb/stb_image.h1081 if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_validCOMMENT
LOWexternals/stb/stb_image.h1141 ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR orderCOMMENT
LOWexternals/stb/stb_image.h1721#ifndef STBI_NO_BMPCOMMENT
LOWexternals/stb/stb_image.h1921// - still fast on x86 (copying globals into locals doesn't help x86)COMMENT
LOWexternals/stb/stb_image.h2901#undef dct_trn8_32COMMENT
LOWexternals/stb/stb_image.h4081// public domain zlib decode v0.2 Sean Barrett 2006-11-18COMMENT
LOWexternals/stb/stb_image.h6161 if (bitdepth != 8 && bitdepth != 16)COMMENT
LOWexternals/stb/stb_image.h7481// *************************************************************************************************COMMENT
LOWexternals/renderdoc/renderdoc_app.h21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INCOMMENT
LOWexternals/renderdoc/renderdoc_app.h41#define RENDERDOC_CCCOMMENT
LOWexternals/renderdoc/renderdoc_app.h61COMMENT
LOWexternals/renderdoc/renderdoc_app.h81 // 1 - The application can enable or disable vsync at willCOMMENT
LOWexternals/renderdoc/renderdoc_app.h101 eRENDERDOC_Option_DebugDeviceMode = 2, // deprecated name of this enumCOMMENT
LOWexternals/renderdoc/renderdoc_app.h121COMMENT
LOWexternals/renderdoc/renderdoc_app.h141 // 0 - No verification is performed, and overwriting bounds may cause crashes or corruption inCOMMENT
LOWexternals/renderdoc/renderdoc_app.h161 //COMMENT
LOWexternals/renderdoc/renderdoc_app.h181 // 0 - unless a read is detected, initial contents will not be saved and willCOMMENT
LOWexternals/renderdoc/renderdoc_app.h201 // Mute API debugging output when the API validation mode option is enabledCOMMENT
LOWexternals/renderdoc/renderdoc_app.h221 // This will cause increased disk space use (which may cause a capture to fail if disk space isCOMMENT
LOWexternals/renderdoc/renderdoc_app.h381// This function will unload RenderDoc's crash handler.COMMENT
LOWexternals/renderdoc/renderdoc_app.h401// SetCaptureFilePathTemplate("my_captures/example");COMMENT
LOWexternals/renderdoc/renderdoc_app.h421// pathlength will be written with the length in bytes of the filename stringCOMMENT
LOWexternals/renderdoc/renderdoc_app.h441// Any existing comments will be overwritten.COMMENT
LOWexternals/renderdoc/renderdoc_app.h461//COMMENT
LOWexternals/renderdoc/renderdoc_app.h481// Capturing functionsCOMMENT
LOWexternals/renderdoc/renderdoc_app.h501#define RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE(inst) (*((void **)(inst)))COMMENT
LOWexternals/renderdoc/renderdoc_app.h521//COMMENT
LOWexternals/renderdoc/renderdoc_app.h541//COMMENT
LOWexternals/renderdoc/renderdoc_app.h561typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureTitle)(const char *title);COMMENT
LOWexternals/renderdoc/renderdoc_app.h601// 1.1.1 - Refactor: Renamed remote access to target control (to better disambiguate from remoteCOMMENT
LOWexternals/renderdoc/renderdoc_app.h721//COMMENT
502 more matches not shown…
Decorative Section Separators15 hits · 45 pts
SeverityFileLineSnippetContext
MEDIUMtests/CMakeLists.txt256# ===========================================================================COMMENT
MEDIUMtests/CMakeLists.txt258# ===========================================================================COMMENT
MEDIUMtests/CMakeLists.txt350# ===========================================================================COMMENT
MEDIUMtests/CMakeLists.txt352# ===========================================================================COMMENT
MEDIUMtests/CMakeLists.txt441# ===========================================================================COMMENT
MEDIUMtests/CMakeLists.txt443# ===========================================================================COMMENT
MEDIUMsrc/core/emulator_settings.cpp21// ── Singleton storage ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp25// ── nlohmann helpers for std::filesystem::path ───────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp89// ── Helpers ───────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp100// ── Singleton ────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp223// ── Game-specific override management ────────────────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp286 // ── Global config.json ─────────────────────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp353// ── Load ──────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp361 // ── Global config ──────────────────────────────────────────COMMENT
MEDIUMsrc/core/emulator_settings.cpp428 // ── Per-game override file ─────────────────────────────────COMMENT
Structural Annotation Overuse6 hits · 10 pts
SeverityFileLineSnippetContext
LOWdocuments/building-docker.md23## Step 1: Prepare the Docker EnvironmentCOMMENT
LOWdocuments/building-docker.md41## Step 2: Clone shadPS4 SourceCOMMENT
LOWdocuments/building-docker.md57## Step 3: Build with CMake Tools (GUI)COMMENT
LOWdocuments/building-docker.md90## Step 4: VSCode IntegrationCOMMENT
LOW⚡src/core/file_format/trp.cpp15 // Step 1: Encrypt NPcommIDCOMMENT
LOW⚡src/core/file_format/trp.cpp22 // Step 2: Decrypt EFSMCOMMENT
Verbosity Indicators4 hits · 8 pts
SeverityFileLineSnippetContext
LOWexternals/dr_flac/dr_flac.h5997 /* We found a FLAC frame. We need to check if it contains the sample we're looking for. */COMMENT
LOW⚡src/core/file_format/trp.cpp15 // Step 1: Encrypt NPcommIDCOMMENT
LOW⚡src/core/file_format/trp.cpp22 // Step 2: Decrypt EFSMCOMMENT
LOWsrc/core/libraries/sysmodule/sysmodule_internal.cpp191 // Now we need to check if the requested library is allowed to LLE.COMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHsrc/video_core/texture_cache/texture_cache.cpp285 // In this case we need to convert Rx float to a Dx[S8] as requestedCOMMENT
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMsrc/core/memory.h225 // If size is zero and boundary checks succeed, then skip more robust checkingCOMMENT
MEDIUM…hader_recompiler/ir/passes/phi_simplification_pass.cpp12// Essentially two SCCs are in same group if they have same number of Phis, in same blocks andCOMMENT
Fake / Example Data4 hits · 6 pts
SeverityFileLineSnippetContext
LOWtests/network/test_http_uri.cpp224 src.path = const_cast<char*>("user@example.com");CODE
LOW⚡src/core/libraries/network/ssl2.cpp149 const char* dummy_data = "dummy";CODE
LOW⚡src/core/libraries/network/ssl2.cpp150 u64 dummy_length = strlen(dummy_data) + 1;CODE
LOW⚡src/core/libraries/network/ssl2.cpp152 strncpy(data, dummy_data, dummy_length);CODE
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOWscripts/ps4_names2stubs.py7CODE
LOWscripts/ps4_names2stubs.py7CODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOW.github/workflows/build.yml428 # Check if release already exists and get IDCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/shader_recompiler/ir/ir_emitter.cpp2195// Example usage:COMMENT