AI Slop Code Risk Monitor

crownengine/crown

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

A complete and cross-platform game engine designed for flexibility, performance and fast iteration.

3.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for crownengine/crown, a C++ project with 2,464 GitHub stars. SynthScan examined 1,340,876 lines of code across 2562 source files, recording 4508 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 3.0 (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.

3.0
Adjusted Signal
3.0
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
2.5K
Stars
C++
Language
1.3M
Lines of Code
2.6K
Files
4.5K
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 13.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 15.7/100 · LOW

Which changes need focused human review? 4508 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 4MEDIUM 25LOW 4479

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 4508 distinct pattern matches across 13 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 Block4425 hits · 3817 pts
SeverityFileLineSnippetContext
LOWtools/launcher/launcher.cpp1/*COMMENT
LOW…ols/level_editor/resources/theme/Adwaita/_drawing.scss21 box-shadow: $shadows;COMMENT
LOW…ols/level_editor/resources/theme/Adwaita/_drawing.scss161// Button drawing functionCOMMENT
LOW…ols/level_editor/resources/theme/Default/_drawing.scss41// entriesCOMMENT
LOW…ols/level_editor/resources/theme/Default/_drawing.scss381// overshootCOMMENT
LOWtools/widgets/drag/infinite_drag_sampler.c1/*COMMENT
LOWtools/widgets/drag/infinite_drag_sampler.c21#endifCOMMENT
LOWtools/widgets/drag/infinite_drag_sampler.c61#define wl_display_dispatch_queue_pending (*crown_wl_display_dispatch_queue_pending)COMMENT
LOWtools/widgets/drag/infinite_drag_sampler.c141#define XGrabPointer (*crown_XGrabPointer)COMMENT
LOWtools/widgets/drag/infinite_drag_sampler.c301 X(PeekMessageW) \COMMENT
LOWtools/widgets/gtk/config.h1// To make gtkcolorpicker* compile.COMMENT
LOWdocs/conf.py1#!/usr/bin/env python3COMMENT
LOWdocs/conf.py61COMMENT
LOWdocs/_extensions/sphinx_sitemap/__init__.py1# Copyright (c) 2013 Michael Dowling <mtdowling@gmail.com>COMMENT
LOW3rdparty/md5/md5.c101#define T2 0xe8c7b756COMMENT
LOW3rdparty/md5/md5.c121#define T22 0x02441453COMMENT
LOW3rdparty/md5/md5.c141#define T42 0xeaa127faCOMMENT
LOW3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp1/*COMMENT
LOW3rdparty/bgfx/tools/shaderc/shaderc.cpp61 // c - computeCOMMENT
LOW3rdparty/bgfx/tools/shaderc/shaderc.cpp81 // metal<MSL version>-<SPIR-V version>COMMENT
LOW3rdparty/bgfx/tools/shaderc/shaderc.h21#include <bx/endian.h>COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h61 * helper macros.COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h81 * Use BGFX_STATE_BLEND_EQUATION(_equation) or BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA)COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h121#define BGFX_STATE_POINT_SIZE_SHIFT 52 //!< Point size bit shiftCOMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h181#define BGFX_STENCIL_TEST_LEQUAL UINT32_C(0x00020000) //!< Enable stencil test, less or equal.COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h201COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h221#define BGFX_STENCIL_OP_PASS_Z_SHIFT 28 //!< Stencil operation depth pass bit shiftCOMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h261#define BGFX_DISCARD_NONE UINT8_C(0x00) //!< Preserve everything.COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h281#define BGFX_BUFFER_COMPUTE_FORMAT_8X2 UINT16_C(0x0002) //!< 2 x 8-bit valuesCOMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h301#define BGFX_BUFFER_COMPUTE_READ UINT16_C(0x0100) //!< Buffer will be read by shader.COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h321#define BGFX_TEXTURE_RT_MSAA_X2 UINT64_C(0x0000002000000000) //!< Render target MSAAx2 mode.COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h341#define BGFX_SAMPLER_U_SHIFT 0COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h361#define BGFX_SAMPLER_MIN_SHIFT 6COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h381#define BGFX_SAMPLER_COMPARE_NOTEQUAL UINT32_C(0x00060000) //!< Compare when sampling depth texture: not equCOMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h441COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h461#define BGFX_RESET_FULLSCREEN_MASK UINT32_C(0x00000001)COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h481#define BGFX_CAPS_PRIMITIVE_ID UINT64_C(0x0000000000008000) //!< PrimitiveID is available in fragmentCOMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h501 | BGFX_CAPS_TEXTURE_COMPARE_RESERVED \COMMENT
LOW3rdparty/bgfx/include/bgfx/defines.h521#define BGFX_CAPS_FORMAT_TEXTURE_MSAA UINT32_C(0x00004000) //!< Texture can be sampled as MSAA.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h141 /// Notation:COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h481 ///COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h501 /// @remarksCOMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h521 /// @remarksCOMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h541 /// Not thread safe and it can be called from any thread.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h561 ///COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h581 /// found.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h601COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h721 /// a default rendering backend will be selected appropriate to the platform.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h861 uint32_t minResourceCbSize; //!< Minimum resource command buffer size.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h881 /// - `BGFX_CAPS_FORMAT_TEXTURE_IMAGE_READ` - Texture format can be used as imageCOMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h961 uint16_t num; //!< Number of elements in array.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1101 {COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1121 /// - `BGFX_STATE_WRITE_*` - Enable R, G, B, A or Z write.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1161 /// @param[in] _bstencil Back stencil state. If back is set to `BGFX_STENCIL_NONE`COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1181 ///COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1201 /// @param[in] _mtx Pointer to first matrix in array.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1241 /// @param[in] _handle Uniform.COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1261COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1281 ///COMMENT
LOW3rdparty/bgfx/include/bgfx/bgfx.h1301 ///COMMENT
4365 more matches not shown…
AI Slop Vocabulary21 hits · 61 pts
SeverityFileLineSnippetContext
MEDIUM3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp346 // Sanity check the iteration count to be robust against a certain class of bugs whereCOMMENT
MEDIUM3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp11903 // Essentially, we can only remove one set of swizzles, since that's what we have control over ...COMMENT
MEDIUM3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp12162 // We can look at result type which is more robust.COMMENT
MEDIUM3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross.cpp3965 // Essentially a map of block -> { variables accessed in the basic block }COMMENT
MEDIUM3rdparty/bgfx/3rdparty/spirv-cross/spirv_hlsl.cpp1776 // Sort input and output variables based on, from more robust to less robust:COMMENT
MEDIUM…3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp765// Creates a graphics robust access pass.COMMENT
MEDIUM…dparty/bgfx/3rdparty/spirv-tools/source/diagnostic.cpp92 case SPV_REQUESTED_TERMINATION: // Essentially success.CODE
MEDIUM…party/bgfx/3rdparty/spirv-tools/source/opt/ir_loader.h33// libspirv.h so that we can leverage the syntax checks implemented behind it.COMMENT
MEDIUM…dparty/bgfx/3rdparty/spirv-tools/source/opt/ccp_pass.h62 // CCP lattice. Essentially, if all the operands in |phi| have the sameCOMMENT
MEDIUM3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp5988 // TODO: It would be more robust to do a full recursive verification of the types satisfying SPIR-V rules.COMMENT
MEDIUM…rty/glslang/glslang/MachineIndependent/ParseHelper.cpp9557// for the parameter to the constructor (passed to this function). Essentially, it convertsCOMMENT
MEDIUM…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp8537// for the parameter to the constructor (passed to this function). Essentially, it convertsCOMMENT
MEDIUM…rty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp977 // take precision from it. This isn't fully robust now, but oh well.COMMENT
MEDIUM3rdparty/bimg/3rdparty/tinyexr/tinyexr.h1554 // TODO(syoyo): Add more robust out-of-bounds check in `rleUncompress`.COMMENT
MEDIUM3rdparty/stb/stb_vorbis.c51// 1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memoryCOMMENT
MEDIUM…ullet3/src/BulletSoftBody/btDeformableCorotatedForce.h102 PolarDecomposition(F, R, S); // this QR is not robust, consider using implicit shift svdCODE
MEDIUM…rc/BulletCollision/NarrowPhaseCollision/btConvexCast.h34//will need to digg deeper to make the algorithm more robustCOMMENT
MEDIUM…BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp97 // @@@ this needs to be made more robustCOMMENT
MEDIUM…cs/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp871 // so it is much simpler (and more robust) just to simply use inf (with the proper sign)COMMENT
MEDIUM3rdparty/bullet3/src/LinearMath/btMatrix3x3.h682 ///extractRotation is from "A robust method to extract the rotational part of deformations"COMMENT
MEDIUM3rdparty/ufbx/ufbx.h5027 // Using this and robust linear interpolation will handle stepped tangents correctlyCOMMENT
Structural Annotation Overuse14 hits · 25 pts
SeverityFileLineSnippetContext
LOW…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp155 // Step 1: Create the if merge block for structured modules.COMMENT
LOW…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp235 // Step 2: Build a new preheader for |loop_|, use the old oneCOMMENT
LOW…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp361 // Step 3: Duplicate |loop_|.COMMENT
LOW⚡…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp373 // Step 4: Specialize the loop. //COMMENT
LOW⚡…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp380 // Step 5: Connect convergent edges to the landing pads. //COMMENT
LOW…y/bgfx/3rdparty/spirv-tools/source/val/validate_id.cpp48/// NOTE: This function does NOT check module scoped functions which areCOMMENT
LOW…fx/3rdparty/spirv-tools/source/val/validate_layout.cpp427// NOTE: This function does not handle CFG related validationCOMMENT
LOW3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp4020 // Step 2: Construct a matrix from that array.COMMENT
LOW3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp5959// NOTE: This function can handle any store request; if it's not special itCOMMENT
LOW⚡…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7749 // Step 1: If there's an exact match, use it.COMMENT
LOW⚡…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7752 // Step 3: Re-select after type promotion is applied, to find proper candidate.COMMENT
LOW⚡…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7754 // Step 1: If there's an exact match, use it.COMMENT
LOW…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7810 // Step 3: Re-select after type promotion, to find proper candidateCOMMENT
LOW3rdparty/ufbx/ufbx.h5585// NOTE: This function flips the normals if the determinant is negative.COMMENT
Verbosity Indicators10 hits · 19 pts
SeverityFileLineSnippetContext
LOW…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp155 // Step 1: Create the if merge block for structured modules.COMMENT
LOW…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp235 // Step 2: Build a new preheader for |loop_|, use the old oneCOMMENT
LOW…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp361 // Step 3: Duplicate |loop_|.COMMENT
LOW⚡…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp373 // Step 4: Specialize the loop. //COMMENT
LOW⚡…3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp380 // Step 5: Connect convergent edges to the landing pads. //COMMENT
LOW3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp4020 // Step 2: Construct a matrix from that array.COMMENT
LOW⚡…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7749 // Step 1: If there's an exact match, use it.COMMENT
LOW⚡…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7752 // Step 3: Re-select after type promotion is applied, to find proper candidate.COMMENT
LOW⚡…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7754 // Step 1: If there's an exact match, use it.COMMENT
LOW…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp7810 // Step 3: Re-select after type promotion, to find proper candidateCOMMENT
Empty Error Handlers3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHdocs/_extensions/sphinx_last_updated_by_git.py307except KeyError:CODE
HIGHdocs/_extensions/sphinx_last_updated_by_git.py210except subprocess.CalledProcessError as e:CODE
HIGHdocs/_extensions/sphinx_sitemap/__init__.py56except BaseException:CODE
Unused Imports13 hits · 13 pts
SeverityFileLineSnippetContext
LOWexporters/blender/blender-2-83.py19CODE
LOWexporters/blender/blender-2-83.py20CODE
LOWexporters/blender/blender-2-83.py21CODE
LOWexporters/blender/blender-2-83.py277CODE
LOWexporters/blender/blender-2-83.py277CODE
LOWexporters/blender/blender-2-83.py278CODE
LOWexporters/blender/blender-2-83.py278CODE
LOWexporters/blender/blender-2-83.py313CODE
LOWdocs/_extensions/sphinxext/opengraph/_social_cards.py3CODE
LOWdocs/_extensions/sphinxext/opengraph/_meta_parser.py1CODE
LOWdocs/_extensions/sphinxext/opengraph/__init__.py1CODE
LOW…_extensions/sphinxext/opengraph/_description_parser.py1CODE
LOWdocs/_extensions/sphinxext/opengraph/_title_parser.py1CODE
Self-Referential Comments4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMdocs/conf.py7# This file is execfile()d with the current directory set to itsCOMMENT
MEDIUMdocs/_extensions/sphinxext/opengraph/_social_cards.py74 # Define the file path we'll use for this imageCOMMENT
MEDIUMdocs/_extensions/sphinxext/opengraph/_social_cards.py133 # Create the figure objects and return them so that we re-use them later.COMMENT
MEDIUM3rdparty/bx/3rdparty/ini/ini.h95#### Creating a new ini fileCOMMENT
TODO Padding6 hits · 8 pts
SeverityFileLineSnippetContext
LOW…rdparty/spirv-tools/source/val/validate_annotation.cpp331 // TODO: Add validations for all decorations.COMMENT
LOW…rdparty/spirv-tools/source/val/validate_annotation.cpp368 // TODO: Add validations for these decorations.COMMENT
LOW…rdparty/spirv-tools/source/val/validate_extensions.cpp3801 // TODO: Add validation rules for remaining cases as well.COMMENT
LOW…ty/glslang/glslang/MachineIndependent/linkValidate.cpp233 // TODO: implement support for geometry passthroughCOMMENT
LOW…bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp188 // TODO: implement.COMMENT
LOW3rdparty/bgfx/src/renderer_mtl.h1593 uint32_t m_frameNum; // TODO: implement (currently stays 0)CODE
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGH…y/bgfx/3rdparty/spirv-tools/source/util/small_vector.h40// TODO: I have implemented the public member functions from |std::vector| thatCOMMENT
Deep Nesting5 hits · 5 pts
SeverityFileLineSnippetContext
LOWexporters/blender/blender-2-83.py32CODE
LOWexporters/blender/blender-2-83.py49CODE
LOWexporters/blender/blender-2-83.py86CODE
LOWdocs/_extensions/sphinx_sitemap/__init__.py82CODE
LOWdocs/_extensions/sphinxext/opengraph/__init__.py83CODE
Hyper-Verbose Identifiers3 hits · 3 pts
SeverityFileLineSnippetContext
LOWdocs/_extensions/sphinxext/opengraph/_social_cards.py171def create_social_card_objects(CODE
LOWdocs/_extensions/sphinxext/opengraph/_social_cards.py315def _set_page_title_line_width() -> int:CODE
LOWdocs/_extensions/sphinxext/opengraph/_social_cards.py319def _set_description_line_width() -> int:CODE
Slop Phrases2 hits · 2 pts
SeverityFileLineSnippetContext
LOW3rdparty/bimg/3rdparty/lodepng/lodepng.cpp70lodepng source code. Don't forget to remove "static" if you copypaste themCODE
LOW…ulletDynamics/ConstraintSolver/btConeTwistConstraint.h317 // note: don't forget to enableMotor()COMMENT
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWdocs/_extensions/sphinxext/opengraph/_social_cards.py171CODE