AI Slop Code Risk Monitor

PufferAI/PufferLib

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

Puffing up reinforcement learning

2.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for PufferAI/PufferLib, a C project with 6,572 GitHub stars. SynthScan examined 199,925 lines of code across 424 source files, recording 376 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 2.2 (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.2
Adjusted Signal
2.2
Raw Pattern Score
100%
Time Factor
2026-10-14
Last Push
6.6K
Stars
C
Language
199.9K
Lines of Code
424
Files
376
Pattern Hits
2026-10-31
Scan Date
0.01
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.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.4/100 · LOW

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

Agent Over-Engineering Ratio 2.8/100 · LOW

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

PR Review Velocity Impact 10.5/100 · LOW

Which changes need focused human review? 376 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 23LOW 349

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 376 distinct pattern matches across 11 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 Block286 hits · 286 pts
SeverityFileLineSnippetContext
LOWbuild.sh1#!/bin/bashCOMMENT
LOWocean/battle/battle.h1/* Battle: a sample multiagent env about puffers eating stars.COMMENT
LOWocean/battle/battle.h21COMMENT
LOWocean/battle/rlights.h101//----------------------------------------------------------------------------------COMMENT
LOWocean/slimevolley/slimevolley.h1#include "raylib.h"COMMENT
LOWocean/slimevolley/slimevolley.h21#define REF_W 48COMMENT
LOWocean/trash_pickup/trash_pickup.h1#include <stdlib.h>COMMENT
LOWocean/asteroids/asteroids_net.h1// CPU asteroids policy: entity encoder + MinGRU + decoder.COMMENT
LOWocean/asteroids/asteroids.h1#include "raylib.h"COMMENT
LOWocean/terraform/terraform.h1#include <stdlib.h>COMMENT
LOWocean/terraform/terraform.h41#define BUCKET_OFFSET 2.0fCOMMENT
LOWocean/terraform/terraform.h401COMMENT
LOWocean/terraform/terraform.h421 // available[idx] = available[--num_available];COMMENT
LOWocean/rware/rware.h1#include <stdlib.h>COMMENT
LOWocean/rware/rware.h21#define SHELF 1COMMENT
LOWocean/pacman/pacman.h1#include "helpers.h"COMMENT
LOWocean/osrs/osrs_collision.h1#ifndef OSRS_COLLISION_HCOMMENT
LOWocean/osrs/osrs_collision.h21COMMENT
LOWocean/osrs/osrs_env_profile.h1#ifndef _POSIX_C_SOURCECOMMENT
LOWocean/osrs/osrs_env_profile.h101 for (int t = 0; t < threads; t++) {COMMENT
LOWocean/osrs/osrs_ui_interfaces.h1#ifndef OSRS_UI_INTERFACES_HCOMMENT
LOWocean/osrs/osrs_pvp_observations.h1#ifndef OSRS_PVP_OBSERVATIONS_HCOMMENT
LOWocean/osrs/osrs_policy.h1#ifndef OSRS_POLICY_HCOMMENT
LOWocean/osrs/osrs_policy.h21#define OSRS_SHARED_OBS_EFFECT_START \COMMENT
LOWocean/osrs/osrs_render_motion.h1#ifndef OSRS_RENDER_MOTION_HCOMMENT
LOWocean/osrs/osrs_asset_raylib.h1#ifndef OSRS_ASSET_RAYLIB_HCOMMENT
LOWocean/osrs/osrs_anim.h1#ifndef OSRS_ANIM_HCOMMENT
LOWocean/osrs/osrs_pathfinding.h261#if defined(__GNUC__) || defined(__clang__)COMMENT
LOWocean/osrs/osrs_encounter.h1#ifndef OSRS_ENCOUNTER_HCOMMENT
LOWocean/osrs/osrs_encounter.h681 entities[0].attack_target_entity_idx = i;COMMENT
LOWocean/osrs/osrs_types.h1#ifndef OSRS_TYPES_HCOMMENT
LOWocean/osrs/osrs_types.h21#define WILD_MAX_Y 3968COMMENT
LOWocean/osrs/osrs_types.h41#define ICE_BURST_MAX_HIT 22COMMENT
LOWocean/osrs/osrs_gfx_ids.h1#ifndef OSRS_GFX_IDS_HCOMMENT
LOWocean/osrs/osrs_lab.h1#ifndef OSRS_LAB_HCOMMENT
LOWocean/osrs/osrs_env.h1#ifndef OSRS_ENV_HCOMMENT
LOWocean/osrs/osrs_pvp_actions.h1#ifndef OSRS_PVP_ACTIONS_HCOMMENT
LOWocean/osrs/osrs_render_click_hull.h1#ifndef OSRS_RENDER_CLICK_HULL_HCOMMENT
LOWocean/osrs/osrs_inventory_clicks.h41 OsrsConsumableKind kindCOMMENT
LOWocean/osrs/osrs_visual_net.h1#pragma onceCOMMENT
LOWocean/osrs/osrs_visual_net.h21#define COLO_ENT_NPC_NUM_RECS 24COMMENT
LOWocean/osrs/osrs_models.h1#ifndef OSRS_MODELS_HCOMMENT
LOWocean/osrs/osrs_items.h141#define STAT_NORM_MAGIC_DMG 30.0fCOMMENT
LOWocean/osrs/osrs_render.h1#ifndef OSRS_RENDER_HCOMMENT
LOWocean/osrs/osrs_render.h21#include "osrs_terrain.h"COMMENT
LOWocean/osrs/osrs_render.h41#define RENDER_SPLATS_PER_PLAYER 4COMMENT
LOWocean/osrs/osrs_render.h81#define COLOR_P0 CLITERAL(Color){ 80, 140, 255, 255 }COMMENT
LOWocean/osrs/osrs_visual.c1#ifndef _POSIX_C_SOURCECOMMENT
LOWocean/osrs/osrs_visual.c21#pragma GCC diagnostic pushCOMMENT
LOWocean/osrs/osrs_gui.h1#ifndef OSRS_GUI_HCOMMENT
LOWocean/osrs/osrs_gui.h21#include "osrs_types.h"COMMENT
LOWocean/osrs/osrs_gui.h41#define GUI_MINIMAP_X 53COMMENT
LOWocean/osrs/osrs_gui.h61#define GUI_HP_Y 37COMMENT
LOWocean/osrs/osrs_gui.h181#define OSRS_ID_COMBAT_4 12695COMMENT
LOWocean/osrs/osrs_gui.h2621 gs, "wornitems", ref->icon_component_name, ref->icon_rect);COMMENT
LOWocean/osrs/osrs_objects.h1#ifndef OSRS_OBJECTS_HCOMMENT
LOWocean/osrs/tests/test_colosseum_modifiers.c41}COMMENT
LOWocean/osrs/tests/test_encounter_route_topology_setup.c1#include <stdint.h>COMMENT
LOWocean/osrs/tests/test_encounter_route_topology_setup.c21 return (uint32_t)collision_get_flags(COMMENT
LOWocean/osrs/tests/test_encounter_route_topology_setup.c41#include "ocean/osrs/encounters/encounter_zulrah.h"COMMENT
226 more matches not shown…
Decorative Section Separators20 hits · 60 pts
SeverityFileLineSnippetContext
MEDIUMresources/trailer/trailer.c32// ─── Vertex layout (x, y, size_scale, r, g, b, a) ───────────────────────────COMMENT
MEDIUMresources/trailer/trailer.c38// ─── GL draw ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/trailer.c71// ─── Shared background star field ─────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/trailer.c431// ─── Text overlay helpers ─────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/trailer.c460// ─── Haiku + title overlay (called every frame from anim5 onward) ─────────────COMMENT
MEDIUMresources/trailer/trailer.c586// ─── Video recording ──────────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/trailer.c628// ─── Main ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/architecture.c92// ─── tiny helpers ─────────────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/architecture.c216// ─── packets ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/architecture.c495// ─── layer drawings ───────────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/architecture.c1033// ─── chrome ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMresources/trailer/architecture.c1166// ─── ffmpeg recorder (same pattern as trailer.c) ──────────────────────────────COMMENT
MEDIUMtests/test_nmmo3_encoder.py31# ============================================================================COMMENT
MEDIUMtests/test_nmmo3_encoder.py33# ============================================================================COMMENT
MEDIUMtests/test_nmmo3_encoder.py64# ============================================================================COMMENT
MEDIUMtests/test_nmmo3_encoder.py66# ============================================================================COMMENT
MEDIUMtests/test_nmmo3_encoder.py118# ============================================================================COMMENT
MEDIUMtests/test_nmmo3_encoder.py120# ============================================================================COMMENT
MEDIUMtests/test_nmmo3_encoder.py226# ============================================================================COMMENT
MEDIUMtests/test_nmmo3_encoder.py228# ============================================================================COMMENT
Hyper-Verbose Identifiers29 hits · 29 pts
SeverityFileLineSnippetContext
LOW…n/laser_puzzle/level_generation/generate_levels_bin.py92def generate_verified_puzzles():CODE
LOWtests/test_pufferl_train.py4def test_train_worker_args_scale_total_timesteps_per_rank():CODE
LOWtests/test_pufferl_train.py22def test_train_worker_args_leave_single_gpu_budget_unchanged():CODE
LOWtests/test_osrs_asset_manifest_preload.py23def test_selected_groups_emit_ordered_unique_full_vfs_paths() -> None:CODE
LOWtests/test_osrs_asset_manifest_preload.py36def test_group_argument_order_does_not_change_manifest_order() -> None:CODE
LOWtests/test_osrs_asset_manifest_preload.py52def test_empty_group_selection_emits_every_asset_once() -> None:CODE
LOWtests/test_osrs_asset_manifest_preload.py84def test_gui_group_contains_every_exported_gui_sprite() -> None:CODE
LOWtests/test_osrs_asset_manifest_preload.py97def test_items_group_contains_every_exported_item_sprite() -> None:CODE
LOWtests/test_puffernet.py67def test_puffernet_linear_layer(batch_size=16, input_size=128, hidden_size=128):CODE
LOWtests/test_puffernet.py85def test_puffernet_convolution_layer(batch_size=16, in_width=11, in_height=11,CODE
LOWtests/test_puffernet.py205def test_puffernet_argmax_multidiscrete(batch_size=16, logit_sizes=[5,7,2]):CODE
LOWtests/test_sweep.py39def synthetic_percentile_task(args):CODE
LOWtests/test_osrs_puffer_render.py18def test_puf_render_owns_renderer_lifecycle(tmp_path: Path, wrapper: str) -> None:CODE
LOWtests/microbench.py167def log_coeffs_and_values_loss(outputs):CODE
LOWtests/microbench.py171def test_log_coeffs_and_values():CODE
LOWtests/test_osrs_entity_encoders.py308def test_cuda_forward_and_all_weight_gradients(cuda_library, contract):CODE
LOWtests/test_osrs_cpu_build.py16def test_osrs_cpu_build_selects_visual_entrypoint(tmp_path: Path) -> None:CODE
LOWtests/test_selfplay.py6def test_resolve_opponent_pool_directory_glob_and_list(tmp_path):CODE
LOWtests/test_selfplay.py19def test_external_pool_entries_are_path_only(tmp_path):CODE
LOWtests/test_selfplay.py30def test_resolve_opponent_pool_falls_back_to_repo_relative(monkeypatch, tmp_path):CODE
LOWtests/test_selfplay.py44def test_external_pool_entries_reject_missing_configured_pool(tmp_path):CODE
LOWtests/test_selfplay.py66def test_step_adds_self_checkpoints_to_external_pool(tmp_path):CODE
LOWtests/test_api.py42def test_pettingzoo_api_usage(print_errors=False):CODE
LOWtests/test_league.py31def test_protein_refreshes_observations_by_run_id():CODE
LOWtests/test_league.py46def test_batch_ratings_anchor_zero_and_symmetric():CODE
LOWtests/test_league.py65def test_league_config_allows_architecture_sweep_keys():CODE
LOWtests/test_league.py100def test_league_trials_use_historical_selfplay_only():CODE
LOWtests/test_league.py142def test_league_match_reward_conditioning_uses_player_hypers():CODE
LOWtests/test_league.py188def test_league_match_policy_arch_uses_player_hypers():CODE
Empty Error Handlers4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHocean/craftax/pack_textures.py51except ImportError:CODE
HIGHtests/hparam_seed_sensitivity.py388except ValueError:CODE
HIGHtests/test_sweep.py17except:CODE
HIGHtests/test_custom_gp_numerics.py108except ImportError:CODE
Unused Imports15 hits · 15 pts
SeverityFileLineSnippetContext
LOWocean/osrs/scripts/osrs_asset_manifest.py4CODE
LOWocean/drive/dataset.py19CODE
LOWtests/hparam_seed_sensitivity.py15CODE
LOWtests/hparam_seed_sensitivity.py26CODE
LOWtests/hparam_seed_sensitivity.py27CODE
LOWtests/async_stability_runs.py4CODE
LOWtests/async_stability_runs.py8CODE
LOWtests/test_import_performance.py5CODE
LOWtests/microbench.py7CODE
LOWtests/offpolicy_scaling_study.py9CODE
LOWtests/test_api.py1CODE
LOWtests/score_noise_study.py7CODE
LOWtests/score_noise_study.py11CODE
LOWtests/test_muon.py6CODE
LOWtests/craftax_parity.py19CODE
Deep Nesting13 hits · 13 pts
SeverityFileLineSnippetContext
LOWocean/osrs/scripts/osrs_asset_manifest.py248CODE
LOW…n/laser_puzzle/level_generation/generate_levels_bin.py52CODE
LOW…n/laser_puzzle/level_generation/generate_levels_bin.py92CODE
LOWocean/laser_puzzle/level_generation/optimal_solver.py18CODE
LOWocean/laser_puzzle/level_generation/optimal_solver.py20CODE
LOWocean/drive/dataset.py83CODE
LOWtests/hparam_seed_sensitivity.py319CODE
LOWtests/test_nethack_encoder.py233CODE
LOWtests/test_nethack_encoder.py483CODE
LOWtests/test_nethack_encoder.py1430CODE
LOWtests/async_stability_runs.py112CODE
LOWtests/microbench.py99CODE
LOWtests/avg_breakout_seeds.py15CODE
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_sweep.py126 # Create a ColumnDataSource that includes the 'order' for each pointCOMMENT
MEDIUMtests/test_sweep.py139 # Define a color mapper across the range of point indicesCOMMENT
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWbuild.sh4# Usage:COMMENT
LOWprofile.sh4# Usage:COMMENT
Excessive Try-Catch Wrapping2 hits · 3 pts
SeverityFileLineSnippetContext
LOWocean/drive/dataset.py208 except Exception as e:CODE
MEDIUMtests/test_sweep_hyper.py167 print(f"Error: Results file not found at {results_file}")CODE
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWtests/test_puffernet.py106CODE
LOWtests/microbench.py149CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
LOWocean/scape/scape.h166 * extra memory. This should be freed by puf_close. Don't forget to callCOMMENT