AI Slop Code Risk Monitor

processing/p5.js

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

p5.js is a client-side JS platform that empowers artists, designers, students, and anyone to learn to code and express themselves creatively on the web. It is based on the core principles of Processing. Looking for p5.js 2.0? http://beta.p5js.org

0.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for processing/p5.js, a JavaScript project with 24,281 GitHub stars. SynthScan examined 380,599 lines of code across 1465 source files, recording 130 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 0.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.

0.8
Adjusted Signal
0.8
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
24.3K
Stars
JavaScript
Language
380.6K
Lines of Code
1.5K
Files
130
Pattern Hits
2026-10-31
Scan Date
0.02
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 1.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.6/100 · LOW

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

Agent Over-Engineering Ratio 0.4/100 · LOW

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

PR Review Velocity Impact 3.9/100 · LOW

Which changes need focused human review? 130 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 1HIGH 31MEDIUM 5LOW 93

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 130 distinct pattern matches across 12 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.

Cross-Language Confusion (JS/TS)30 hits · 185 pts
SeverityFileLineSnippetContext
HIGHtest/manual-test-examples/p5.Table/matchRow/sketch.js22 print(result.getString('name')); // Prints "Snake"CODE
HIGHtest/manual-test-examples/p5.Table/getObject/sketch.js21 print('Without a header column:', table.getObject());CODE
HIGHtest/manual-test-examples/p5.Table/getObject/sketch.js22 print('With a header column:', table.getObject('name'));CODE
HIGHtest/manual-test-examples/p5.Table/findRows/sketch.js27 print(rows[i].getString('name') + ': ' + rows[i].getString('type'));CODE
HIGHtest/manual-test-examples/p5.Table/matchRows/sketch.js27 print(rows[i].getString('name') + ': ' + rows[i].getString('type'));CODE
HIGH⚡test/manual-test-examples/p5.Table/trim/sketch.js21 print(table.getColumn('name'));CODE
HIGH⚡test/manual-test-examples/p5.Table/trim/sketch.js22 print(table.getColumn('type'));CODE
HIGH⚡test/manual-test-examples/p5.Table/trim/sketch.js25 print(table.getColumn('name'));CODE
HIGH⚡test/manual-test-examples/p5.Table/trim/sketch.js26 print(table.getColumn('type'));CODE
HIGH⚡…t/manual-test-examples/p5.Table/removeTokens/sketch.js21 print(table.getColumn('name'));CODE
HIGH⚡…t/manual-test-examples/p5.Table/removeTokens/sketch.js22 print(table.getColumn('type'));CODE
HIGH⚡…t/manual-test-examples/p5.Table/removeTokens/sketch.js26 print(table.getColumn('name'));CODE
HIGH⚡…t/manual-test-examples/p5.Table/removeTokens/sketch.js27 print(table.getColumn('type'));CODE
HIGHtest/manual-test-examples/p5.Table/getColumn/sketch.js21 print(table.getColumn('name'));CODE
HIGH…ual-test-examples/addons/p5.sound/peakDetect/sketch.js32 print('source duration: ' + src_length);CODE
HIGH…manual-test-examples/async/loadJSON_callback/sketch.js46 print(result); // result is ready!CODE
HIGH⚡…ual-test-examples/async/loadStrings_callback/sketch.js18 print('In setup(), there are ' + result.length + ' lines in the result');CODE
HIGH⚡…ual-test-examples/async/loadStrings_callback/sketch.js27 print(CODE
HIGH⚡…ual-test-examples/async/loadStrings_callback/sketch.js30 print('Click the mouse to display a different random line!');CODE
HIGH⚡…al-test-examples/async/loadStrings_manyLines/sketch.js21 print('In setup(), there are ' + result.length + ' lines in the result');CODE
HIGH⚡…al-test-examples/async/loadStrings_manyLines/sketch.js30 print(CODE
HIGH⚡…al-test-examples/async/loadStrings_manyLines/sketch.js33 print('Click the mouse to display a different random line!');CODE
HIGH…nual-test-examples/async/loadStrings_preload/sketch.js28 print(CODE
HIGH…nual-test-examples/async/loadStrings_preload/sketch.js31 print('Click the mouse to display a different random line!');CODE
HIGH…l-test-examples/learningprocessing/chp6/example_6_7.js29 print(' The mouse was pressed! ');CODE
HIGH…l-test-examples/learningprocessing/chp6/example_6_4.js13 print(x);CODE
HIGH…/learningprocessing/chp10/example_10_4/example_10_4.js23 print(' 5 seconds have passed! ');CODE
HIGH…/learningprocessing/chp10/example_10_9/example_10_9.js32 print(' 2 seconds have passed! ');CODE
HIGH…l-test-examples/learningprocessing/chp3/example_3_6.js48 print('Take me to your leader!');CODE
HIGH…l-test-examples/learningprocessing/chp4/example_4_5.js25 print(key);CODE
Over-Commented Block39 hits · 39 pts
SeverityFileLineSnippetContext
LOWtest/unit/io/saveTable.js61 test('should download a file with expected contents (html)', async () => {COMMENT
LOWtest/unit/io/saveTable.js81 // // while displaying. But they will still remain a part of the parsed DOM and hence must be removed.COMMENT
LOWtest/unit/image/loading.js1import { mockP5, mockP5Prototype, httpMock } from '../../js/mocks';COMMENT
LOWtest/unit/image/loading.js21// sketch.clear();COMMENT
LOWtest/unit/image/loading.js101 assert.isTrue(pImg instanceof mockP5.Image);COMMENT
LOWtest/unit/image/loading.js141 // }).then(function() {COMMENT
LOWtest/unit/image/loading.js201 // myp5.loadImage('unit/assets/target.gif', resolve, reject);COMMENT
LOWtest/unit/dom/p5.Element.js1// import p5 from '../../../src/app.js';COMMENT
LOWtest/unit/dom/dom.js501 });COMMENT
LOWtest/unit/dom/dom.js981 assert.instanceOf(testElement.elt, HTMLInputElement);COMMENT
LOWtest/unit/dom/dom.js1001COMMENT
LOWtest/unit/dom/p5.MediaElement.js61 assert.instanceOf(sourceEl, HTMLSourceElement);COMMENT
LOWtest/unit/dom/p5.MediaElement.js221COMMENT
LOWtest/manual-test-examples/p5.Table/saveTable/sketch.js21 save(table, 'animals.csv');COMMENT
LOW…manual-test-examples/async/loadJSON_callback/sketch.js1// This example gets weather for any city based on user input.COMMENT
LOW…manual-test-examples/webgl/geometryImmediate/sketch.js61 // QUAD_STRIP and TRIANGLE_STRIP need the vertices of each shared sideCOMMENT
LOW…l-test-examples/learningprocessing/chp3/example_3_1.js1// Learning ProcessingCOMMENT
LOW…/manual-test-examples/saveData/saveJSONArray/sketch.js21}COMMENT
LOW…ples/tutorials/Integrating-other-libraries/0/sketch.js1// This shows an example of using the "Api example" code fromCOMMENT
LOWsrc/shape/2d_primitives.js41 start = start - constants.TWO_PI * Math.floor(start / constants.TWO_PI);COMMENT
LOWsrc/core/main.js301 // Record the time when the draw loop starts so that millis() starts at 0COMMENT
LOWsrc/core/p5.Renderer3D.js1621 // We need to explicitly set uSampler back to an empty texture here.COMMENT
LOWsrc/core/p5.Renderer2D.js861 this.drawingContext.translate(x, y);COMMENT
LOWsrc/friendly_errors/stacktrace.js1/**COMMENT
LOWsrc/friendly_errors/stacktrace.js341 };COMMENT
LOWsrc/friendly_errors/fes_core.js321 // setup/draw are more likely to be defined due to JS function hoisting.)COMMENT
LOWsrc/friendly_errors/param_validator.js41COMMENT
LOWsrc/friendly_errors/param_validator.js361 item => !z.validate(item, undefined)COMMENT
LOWsrc/webgpu/p5.RendererWebGPU.js2701 //////////////////////////////////////////////COMMENT
LOWsrc/webgpu/p5.RendererWebGPU.js3441COMMENT
LOWsrc/webgl/p5.Texture.js241 updated = true;COMMENT
LOWsrc/webgl/p5.Camera.js1601 // prepare eye vector and center vector of argument cameras.COMMENT
LOWsrc/webgl/p5.Camera.js1661 // This matrix represents the difference between the two.COMMENT
LOWsrc/math/Matrices/MatrixNumjs.js921 // return _makeFrustum(xmin, xmax, ymin, ymax, znear, zfar);COMMENT
LOWsrc/math/Matrices/MatrixNumjs.js941 // }COMMENT
LOWsrc/math/Matrices/Matrix.js2061 // return _makeFrustum(xmin, xmax, ymin, ymax, znear, zfar);COMMENT
LOWsrc/math/Matrices/Matrix.js2081 // }COMMENT
LOWsrc/image/loading_displaying.js701COMMENT
LOWsrc/strands/strands_transpiler.js721 ) {COMMENT
Hyper-Verbose Identifiers32 hits · 32 pts
SeverityFileLineSnippetContext
LOWvisual-report.js164 function createActualScreenshotMap() {CODE
LOWtest/unit/core/structure.js103 function assertCanPreserveRenderState(work) {CODE
LOWtest/unit/webgl/p5.RendererGL.js162 function buildShaderWithTransforms() {CODE
LOWtest/unit/webgl/p5.Framebuffer.js271 function setupAndReturnFramebuffer() {CODE
LOWtest/unit/webgl/p5.Geometry.js702 function assertGeometryRendersMatch(drawGeometry, lightingModes) {CODE
LOWsrc/strands/ir_dag.js13export function createDirectedAcyclicGraph() {CODE
LOWsrc/strands/ir_dag.js33export function getOrCreateNode(graph, node) {CODE
LOWsrc/strands/ir_dag.js90export function propagateTypeToAssignOnUse(CODE
LOWsrc/strands/p5.strands.js87 function initPersistentStrandsContext(ctx) {CODE
LOWsrc/strands/p5.strands.js93 function createBuiltinGlobalsCache(dag) {CODE
LOWsrc/strands/p5.strands.js159 function resetTransientStrandsContext(ctx) {CODE
LOWsrc/strands/strands_transpiler.js88function collectUniformCallbackNames(ast) {CODE
LOWsrc/strands/strands_transpiler.js164function throwIfLoopProtectionInserted(ast) {CODE
LOWsrc/strands/strands_transpiler.js191function statementContainsStrandsControlFlow(stmt) {CODE
LOWsrc/strands/strands_transpiler.js328function replaceIdentifierReferences(node, oldName, newName) {CODE
LOWsrc/strands/strands_transpiler.js1695function functionHasSetInControlFlow(functionNode) {CODE
LOWsrc/strands/strands_transpiler.js1756function transformFunctionSetCalls(functionNode) {CODE
LOWsrc/strands/strands_transpiler.js1904function transformSetCallsInControlFlow(ast, names) {CODE
LOWsrc/strands/strands_transpiler.js1956function transformHelperFunctionEarlyReturns(ast, names) {CODE
LOWsrc/strands/strands_names.js23export function createStrandsShaderNameMap() {CODE
LOWsrc/strands/strands_names.js45export function createStrandsShaderNameState(nextSuffix = 0) {CODE
LOWsrc/strands/strands_names.js98export function getOrCreateInternalShaderName(CODE
LOWsrc/strands/strands_names.js98export function getOrCreateInternalShaderName(CODE
LOWsrc/strands/ir_builders.js97function resolveMatrixBinaryOpType(leftType, rightType, opCode) {CODE
LOWsrc/strands/ir_builders.js1058export function createStructArrayElementProxy(CODE
LOWsrc/strands/strands_api.js66function getOrCreateUniformNode(CODE
LOWsrc/strands/strands_api.js117function installBuiltinGlobalAccessors(strandsContext) {CODE
LOWsrc/strands/strands_api.js201function installInstanceIndexAccessor(strandsContext) {CODE
LOWsrc/strands/strands_api.js295export function restoreTemporaryProperties(strandsContext) {CODE
LOWsrc/strands/strands_api.js400 function rejectLoopExitWithHelpers(statement) {CODE
LOWsrc/strands/strands_api.js462 function rejectInExpressionOperand(subject) {CODE
LOWsrc/strands/strands_api.js1887export function createShaderHooksFunctions(strandsContext, fn, shader) {CODE
Structural Annotation Overuse8 hits · 14 pts
SeverityFileLineSnippetContext
LOWcontributor_docs/decorators.md64### Step 1: Define behaviorCOMMENT
LOWcontributor_docs/decorators.md83### Step 2: Register decoratorCOMMENT
LOW⚡…tributor_docs/project_wrapups/ghalestrilo_gsoc_2020.md13## Step 1: Studying UXCOMMENT
LOW⚡…tributor_docs/project_wrapups/ghalestrilo_gsoc_2020.md19## Step 2: Feature MappingCOMMENT
LOW⚡…tributor_docs/project_wrapups/ghalestrilo_gsoc_2020.md25## Step 3: PrototypingCOMMENT
LOW…tributor_docs/project_wrapups/ghalestrilo_gsoc_2020.md42## Step 4: Coding!COMMENT
LOWsrc/type/p5.Font.js542 // Step 2: build base flat geometry - single shapeCOMMENT
LOWsrc/type/p5.Font.js607 // Step 5: Create extruded geometryCOMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALsrc/webgl/GeometryBuilder.js65 this.hasTransform = !this.renderer.states.uModelMatrix.mat4.every(CODE
Fake / Example Data8 hits · 10 pts
SeverityFileLineSnippetContext
LOWtest/unit/type/p5.Font.js20 const textString = 'Lorem ipsum dolor sit amet.';CODE
LOWtest/unit/type/p5.Font.js20 const textString = 'Lorem ipsum dolor sit amet.';CODE
LOWtest/unit/dom/dom.js1059 const testContent = 'Lorem ipsum';CODE
LOWtest/manual-test-examples/type/index.html55 p.fill(120).textStyle(p.NORMAL).textSize(13.5).text('Simple long Text: Lorem Ipsum is simply dummy text of the pCODE
LOW⚡test/js/modernizr.js1563 'placeholder',CODE
LOW⚡test/js/modernizr.js1564 'placeholder' in createElement('input') &&CODE
LOW⚡test/js/modernizr.js1565 'placeholder' in createElement('textarea')CODE
LOWtest/js/modernizr.js2660 'Bacon ipsum dolor sit amet jerky velit in culpa hamburger et. Laborum dolor proident, enim dolore duis CODE
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtest/js/modernizr.js2 * https://modernizr.com/download/?-adownload-ambientlight-animation-apng-appearance-applicationcache-atobbtoa-audio-audCOMMENT
MEDIUMsrc/friendly_errors/sketch_verifier.js210 // TODO: think of a more robust way to get the user's code. Refer toCOMMENT
MEDIUMsrc/strands/ir_builders.js676 // just used for booleans. Maybe this needs to be something more robustCOMMENT
Slop Phrases3 hits · 8 pts
SeverityFileLineSnippetContext
LOW.github/first-timers.yml1# You can create the issue in a different repo than where the problem is. Just make sure you installed the bot on the coCOMMENT
MEDIUM.github/first-timers.yml5# you can change the labels to suit your needs if "first-timers-only" is not what you are looking for.COMMENT
MEDIUMsrc/webgl/material.js185 * Here is a simple example with a simple vertex shader that applies whatevreCOMMENT
AI Response Leakage1 hit · 5 pts
SeverityFileLineSnippetContext
HIGH…ibutor_docs/project_wrapups/anaisgonzalez_gsoc_2021.md33For the complex example, I started working on typographic textures in WEBGL first before bringing them in VR. These are CODE
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/webgl/utils.js115 // for webgl 1 we need to check if the texture is power of twoCOMMENT
LOWsrc/type/p5.Font.js542 // Step 2: build base flat geometry - single shapeCOMMENT
LOWsrc/type/p5.Font.js607 // Step 5: Create extruded geometryCOMMENT
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/strands/strands_api.js1755 // TODO: implement member access operationsCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/mockServiceWorker.js124async function handleRequest(event, requestId, requestInterceptedAt) {CODE