AI Slop Code Risk Monitor

facebook/igl

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

Intermediate Graphics Library (IGL) is a cross-platform library that commands the GPU. It provides a single low-level cross-platform interface on top of various graphics APIs (e.g. OpenGL, Metal and Vulkan).

2.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for facebook/igl, a C++ project with 3,238 GitHub stars. SynthScan examined 278,639 lines of code across 1334 source files, recording 609 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 2.3 (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.3
Adjusted Signal
2.3
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
3.2K
Stars
C++
Language
278.6K
Lines of Code
1.3K
Files
609
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 10.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.2/100 · LOW

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

Agent Over-Engineering Ratio 1.2/100 · LOW

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

PR Review Velocity Impact 11.0/100 · LOW

Which changes need focused human review? 609 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 3MEDIUM 12LOW 594

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 609 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 Block534 hits · 519 pts
SeverityFileLineSnippetContext
LOWshell/openxr/XrPlatform.h21COMMENT
LOWshell/openxr/XrComposition.h1/*COMMENT
LOWshell/openxr/XrApp.h1/*COMMENT
LOWshell/openxr/XrLog.h21#elseCOMMENT
LOWshell/openxr/mobile/XrApp.cpp21COMMENT
LOWshell/openxr/mobile/AndroidMain.cpp21#ifdef ATTACH_DEBUGGERCOMMENT
LOWshell/openxr/mobile/opengl/XrAppImplGLES.cpp1/*COMMENT
LOWshell/shared/extension/SymbolFactoryLoader.cpp1/*COMMENT
LOWshell/shared/extension/SymbolFactoryLoader.cpp21 #endifCOMMENT
LOWshell/shared/input/InputDispatcher.h1/*COMMENT
LOWshell/shared/platform/PresentationRateController.h21 /// The rate named by PresentationRateRequest::hz.COMMENT
LOWshell/shared/platform/PresentationRateController.h61/// The outcome of the most recent request, plus what is presenting right now.COMMENT
LOWshell/shared/platform/PresentationRateController.h101 [[nodiscard]] virtual PresentationRateCapabilities getCapabilities() const noexcept = 0;COMMENT
LOWshell/shared/platform/TickSourceRateBackend.h21/// and naming the refusal when it cannot deliver one — lives here rather than once perCOMMENT
LOWshell/shared/platform/TickSourceRateBackend.h41COMMENT
LOWshell/shared/platform/TickSourceRateBackend.cpp121 const float rounded = std::round(ratio);COMMENT
LOWshell/shared/platform/FrameDividerRateBackend.h21struct DisplayRates {COMMENT
LOWshell/shared/platform/FrameDividerRateBackend.h41struct FrameDivider {COMMENT
LOWshell/shared/platform/Factory.cpp1/*COMMENT
LOWshell/shared/platform/apple/PresentationRateApple.mm1/*COMMENT
LOWshell/shared/platform/apple/PresentationRateApple.h21COMMENT
LOWshell/shared/platform/mac/DisplayLinkRatePacer.h21/// at the display's rate; only the frame does not.COMMENT
LOWshell/shared/platform/mac/DisplayLinkRatePacer.h41 /// per display-link callback and nowhere else. A divisor that changed since the lastCOMMENT
LOWshell/shared/platform/android/PresentationRateAndroid.h21///COMMENT
LOWshell/shared/platform/android/PlatformAndroid.cpp1/*COMMENT
LOWshell/shared/fileLoader/FileLoader.cpp1/*COMMENT
LOWshell/shared/fileLoader/win/FileLoaderWin.cpp1/*COMMENT
LOWshell/shared/fileLoader/win/FileLoaderWin.cpp101 // @fb-onlyCOMMENT
LOWshell/shared/fileLoader/win/FileLoaderWin.cpp121 // @fb-onlyCOMMENT
LOWshell/shared/fileLoader/linux/FileLoaderLinux.cpp161 // @fb-onlyCOMMENT
LOWshell/shared/fileLoader/linux/FileLoaderLinux.cpp181 // @fb-onlyCOMMENT
LOWshell/shared/fileLoader/linux/FileLoaderLinux.cpp201 // @fb-onlyCOMMENT
LOWshell/shared/fileLoader/android/FileLoaderAndroid.cpp21COMMENT
LOWshell/shared/fileLoader/android/FileLoaderAndroid.cpp41// @fb-onlyCOMMENT
LOWshell/shared/renderSession/RenderSession.cpp1/*COMMENT
LOWshell/shared/profiling/IglPerfetto.h41/// TrackEvent category. The buffer is held in memory and flushed toCOMMENT
LOWshell/shared/imageLoader/ImageLoader.cpp1/*COMMENT
LOWshell/shared/imageLoader/ImageLoader.cpp21#include <IGLU/texture_loader/xtc1/TextureLoaderFactory.h>COMMENT
LOWshell/shared/testShell/TestShell.cpp1/*COMMENT
LOWshell/ios/ViewController.mm21#import <shell/shared/input/InputDispatcher.h>COMMENT
LOWshell/ios/ViewController.mm41COMMENT
LOWshell/ios/RenderSessionController.mm21COMMENT
LOWshell/ios/RenderSessionController.mm121 }COMMENT
LOWshell/ios/AppDelegate.mm21#import <UIKit/UITabBarItem.h>COMMENT
LOWshell/ios/AppDelegate.mm81#if IGL_BACKEND_WEBGPUCOMMENT
LOWshell/mac/ViewController.mm21#import <AppKit/NSOpenGLView.h>COMMENT
LOWshell/mac/ViewController.mm41#include <shell/shared/platform/apple/PresentationRateApple.h>COMMENT
LOWshell/mac/ViewController.mm221 // After a resize, sessions that built their framebuffer once would keep attachments of the oldCOMMENT
LOWshell/mac/ViewController.mm461 // @fb-onlyCOMMENT
LOWshell/mac/ViewController.mm741 // @fb-onlyCOMMENT
LOWshell/mac/DisplayLinkRatePacing.h21/// for the callback to consult, a rate backend installed on the platform, and a teardownCOMMENT
LOWshell/mac/AppDelegate.mm141 // @fb-onlyCOMMENT
LOWshell/android/jni/TinyRenderer.cpp21#include <igl/opengl/egl/PlatformDevice.h>COMMENT
LOWshell/android/jni/TinyRenderer.cpp701 // Ask the compositor for the panel's best mode once, here, rather than once per request.COMMENT
LOWshell/android/jni/Jni.cpp1/*COMMENT
LOWshell/android/jni/TinyRenderer.h1/*COMMENT
LOWshell/android/jni/TinyRenderer.h41 float displayMaxRefreshRateHz = 0.0f);COMMENT
LOWshell/android/jni/TinyRenderer.h61COMMENT
LOWshell/windows/common/GlfwShell.cpp1/*COMMENT
LOWshell/windows/common/GlfwShell.h21#if IGL_ANGLECOMMENT
474 more matches not shown…
Hyper-Verbose Identifiers19 hits · 26 pts
SeverityFileLineSnippetContext
LOWtools/slang/glsl2slang.py1422 def declaration_or_expression(self, tokens: list[Token]) -> str:CODE
LOW⚡tools/slang/glsl2slang_test.py66 def test_vector_comparisons_become_operators(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py72 def test_products_follow_the_matrix_rule(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py82 def test_compound_matrix_product(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py86 def test_truncating_matrix_constructor_becomes_a_cast(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py90 def test_block_member_matrices(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py96 def test_uniform_block_and_sampler(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py111 def test_unnamed_block_members_get_an_instance(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py119 def test_loose_uniforms_gather_into_a_buffer(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py128 def test_storage_buffer_atomics(self) -> None:CODE
LOWtools/slang/glsl2slang_test.py146 def test_rejects_textures_the_abi_lacks(self) -> None:CODE
LOWtools/slang/glsl2slang_test.py160 def test_stages_share_a_program_in_namespaces(self) -> None:CODE
LOWtools/slang/glsl2slang_test.py184 def test_rejects_frag_color_with_declared_outputs(self) -> None:CODE
LOWtools/slang/glsl2slang_test.py193 def test_compute_builtins_and_shared_memory(self) -> None:CODE
LOWtools/slang/glsl2slang_test.py218 def test_keeps_comments_and_preprocessor_lines(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py230 def test_drops_version_and_precision(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py237 def test_unclosed_array_is_a_conversion_error(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py241 def test_assignments_need_a_name(self) -> None:CODE
LOW⚡tools/slang/glsl2slang_test.py245 def test_reflect_reports_a_failing_tool(self) -> None:CODE
Decorative Section Separators9 hits · 25 pts
SeverityFileLineSnippetContext
MEDIUMtools/slang/glsl2slang.py39# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMtools/slang/glsl2slang.py107# ---------------------------------------------------------------------------------------------STRING
MEDIUMtools/slang/glsl2slang.py207# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMtools/slang/glsl2slang.py521# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMtools/slang/glsl2slang.py845# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMtools/slang/glsl2slang.py909# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMtools/slang/glsl2slang.py1182# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMtools/slang/glsl2slang.py1484# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMtools/slang/glsl2slang.py1767# ---------------------------------------------------------------------------------------------COMMENT
Deep Nesting17 hits · 17 pts
SeverityFileLineSnippetContext
LOWtools/slang/glsl2slang.py66CODE
LOWtools/slang/glsl2slang.py873CODE
LOWtools/slang/glsl2slang.py1154CODE
LOWtools/slang/glsl2slang.py1703CODE
LOWtools/slang/glsl2slang.py1824CODE
LOWtools/slang/glsl2slang.py430CODE
LOWtools/slang/glsl2slang.py450CODE
LOWtools/slang/glsl2slang.py966CODE
LOWtools/slang/glsl2slang.py1227CODE
LOWtools/slang/generate_slang.py346CODE
LOWtools/slang/generate_slang.py421CODE
LOWtools/slang/generate_slang.py726CODE
LOWtools/slang/generate_slang.py265CODE
LOWthird-party/bootstrap.py161CODE
LOWthird-party/bootstrap.py244CODE
LOWthird-party/bootstrap.py383CODE
LOWthird-party/bootstrap.py570CODE
Empty Error Handlers3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHdeploy_content.py21except FileExistsError:CODE
HIGHthird-party/bootstrap.py278except:CODE
HIGHthird-party/bootstrap.py310except:CODE
Unused Imports11 hits · 11 pts
SeverityFileLineSnippetContext
LOWdeploy_deps.py8CODE
LOWdeploy_content.py8CODE
LOWdeploy_content.py11CODE
LOWtools/slang/glsl2slang.py28CODE
LOWtools/slang/generate_slang.py28CODE
LOWdocs/source/_extensions/style.py6CODE
LOWthird-party/bootstrap.py22CODE
LOWthird-party/bootstrap.py26CODE
LOWthird-party/bootstrap.py48CODE
LOWthird-party/deps/patches/glew.py4CODE
LOWIGLU/imgui/compile_shaders.py9CODE
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMsamples/wasm/igl.html84 // application robust, you may want to override this behavior before shipping!COMMENT
MEDIUMsrc/igl/Common.h300// Other sizes utilize a libc memcpy() implementation. It's not a universal function and expects toCOMMENT
MEDIUMsrc/igl/glslang/GlslCompiler.cpp86 // This is robust to glslang adding fields to glslang_spv_options_t: a positional aggregateCOMMENT
TODO Padding6 hits · 8 pts
SeverityFileLineSnippetContext
LOWsrc/igl/metal/Texture.mm286 // TODO: implement manual mip generation for required formats (e.g. RGBA32Float)COMMENT
LOWsrc/igl/metal/Texture.mm305 // TODO: implement via gpuResourceIDCOMMENT
LOWsrc/igl/metal/Buffer.mm153 // TODO: implement via gpuResourceIDCOMMENT
LOWsrc/igl/vulkan/VulkanHelpers.c396 // TODO: implement for other platformsCOMMENT
LOWsrc/igl/opengl/egl/Context.cpp139 // TODO: Handle errorCOMMENT
LOWsrc/igl/opengl/glx/Context.cpp22 return 0; // TODO: implement error handlingCODE
Verbosity Indicators4 hits · 6 pts
SeverityFileLineSnippetContext
LOWshell/renderSessions/CopyOperationsSession.cpp312 // Step 1: Buffer-to-buffer copy (once)COMMENT
LOWshell/renderSessions/CopyOperationsSession.cpp323 // Step 2: Render the triangle using the DESTINATION buffer (the copied one)COMMENT
LOWshell/renderSessions/CopyOperationsSession.cpp344 // Step 3: Framebuffer readback -- read rendered pixels and log first pixel colorCOMMENT
LOWsrc/igl/NameHandle.h108 * This way when we need to check if a uniform exists or if it matches anotherCOMMENT
Structural Annotation Overuse3 hits · 4 pts
SeverityFileLineSnippetContext
LOWshell/renderSessions/CopyOperationsSession.cpp312 // Step 1: Buffer-to-buffer copy (once)COMMENT
LOWshell/renderSessions/CopyOperationsSession.cpp323 // Step 2: Render the triangle using the DESTINATION buffer (the copied one)COMMENT
LOWshell/renderSessions/CopyOperationsSession.cpp344 // Step 3: Framebuffer readback -- read rendered pixels and log first pixel colorCOMMENT