AI Slop Code Risk Monitor

PokeAPI/pokeapi

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

The Pokémon API

3.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for PokeAPI/pokeapi, a Python project with 5,441 GitHub stars. SynthScan examined 42,205 lines of code across 476 source files, recording 186 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 3.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.

3.8
Adjusted Signal
3.8
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
5.4K
Stars
Python
Language
42.2K
Lines of Code
476
Files
186
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.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.4/100 · LOW

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

Agent Over-Engineering Ratio 12.6/100 · LOW

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

PR Review Velocity Impact 21.6/100 · LOW

Which changes need focused human review? 186 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 1MEDIUM 3LOW 181

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

Hyper-Verbose Identifiers137 hits · 99 pts
SeverityFileLineSnippetContext
LOW…ces/scripts/data/new_language/validate_new_language.py75def check_exact_language_names(CODE
LOW…ces/scripts/data/new_language/validate_new_language.py158def check_copied_table_coverage(CODE
LOWpokemon_v2/serializers.py747 def get_region_version_groups(self, obj: Region) -> ReturnList[ReturnDict[str, Any]]:CODE
LOWpokemon_v2/serializers.py991 def get_encounter_pokemon_details(self, obj: Encounter) -> ReturnDict[str, Any] | None:CODE
LOWpokemon_v2/serializers.py1039 def get_encounter_pokemon_details(self, obj: Encounter) -> ReturnDict[str, Any] | None:CODE
LOWpokemon_v2/serializers.py1992 def get_type_past_relationships(self, obj: Type) -> list[dict[str, Any]]:CODE
LOWpokemon_v2/serializers.py2653 def get_pokemon_form_pokemon_names(self, obj: PokemonForm) -> ReturnList[ReturnDict[str, Any]]:CODE
LOWpokemon_v2/serializers.py2689 def get_pokemon_form_triggers_conditions(self, obj: PokemonForm) -> list[dict[str, Any]]:CODE
LOWpokemon_v2/serializers.py2766 def get_method_version_groups(self, obj: MoveLearnMethod) -> ReturnList[ReturnDict[str, Any]]:CODE
LOWpokemon_v2/serializers.py3093 def get_past_pokemon_abilities(self, obj: Pokemon) -> list[dict[str, Any]]:CODE
LOWpokemon_v2/serializers.py3440 def _serialized_evolution_variables(self) -> list[tuple[str, dict[str, Any]]]:CODE
LOWpokemon_v2/serializers.py3685 def get_pokedex_version_groups(self, obj: Pokedex) -> ReturnList[ReturnDict[str, Any]]:CODE
LOWpokemon_v2/serializers.py3742 def get_version_group_regions(self, obj: VersionGroup) -> ReturnList[ReturnDict[str, Any]]:CODE
LOWpokemon_v2/serializers.py3758 def get_version_groups_pokedexes(self, obj: VersionGroup) -> ReturnList[ReturnDict[str, Any]]:CODE
LOWpokemon_v2/test_models.py27 def test_unique_encounter_pokemon_details(self):CODE
LOWpokemon_v2/test_models.py46 def test_required_and_evolved_pokemon_form_foreign_keys(self):CODE
LOWpokemon_v2/test_models.py70 def test_evolution_triggers_foreign_keys(self):CODE
LOWpokemon_v2/test_models.py87 def test_evolution_variables_integrity(self):CODE
LOWpokemon_v2/test_models.py111 def test_all_csv_identifiers_are_ascii_slugs(self):CODE
LOWpokemon_v2/test_models.py198 def test_identifier_pattern_examples(self):CODE
LOWpokemon_v2/test_models.py237 def test_generation_vi_sprite_group_keys_and_paths(self):CODE
LOWpokemon_v2/test_models.py252 def test_form_sprite_lookup_falls_back_to_pokemon_id_for_default_forms(self):CODE
LOW⚡pokemon_v2/tests.py223 def setup_item_attribute_map_data(cls, item, item_attribute):CODE
LOW⚡pokemon_v2/tests.py230 def setup_item_fling_effect_data(cls, name="itm flng efct"):CODE
LOW⚡pokemon_v2/tests.py239 def setup_item_fling_effect_effect_text_data(cls, item_fling_effect, effect="itm flng efct efct txt"):CODE
LOW⚡pokemon_v2/tests.py372 def setup_contest_type_name_data(cls, contest_type, name="cntst tp nm"):CODE
LOW⚡pokemon_v2/tests.py381 def setup_contest_effect_data(cls, appeal=2, jam=0):CODE
LOW⚡pokemon_v2/tests.py388 def setup_contest_effect_flavor_text_data(cls, contest_effect, flavor_text="cntst efct flvr txt"):CODE
LOW⚡pokemon_v2/tests.py442 def setup_berry_flavor_name_data(cls, berry_flavor, name="bry flvr nm"):CODE
LOW⚡pokemon_v2/tests.py451 def setup_berry_firmness_data(cls, name="bry frmns"):CODE
LOW⚡pokemon_v2/tests.py460 def setup_berry_firmness_name_data(cls, berry_firmness, name="bry frmns nm"):CODE
LOW⚡pokemon_v2/tests.py850 def setup_version_group_move_learn_method_data(cls, version_group=None, move_learn_method=None):CODE
LOW⚡pokemon_v2/tests.py859 def setup_super_contest_combo_data(cls, first_move, second_move):CODE
LOW⚡pokemon_v2/tests.py866 def setup_move_flavor_text_data(cls, move, flavor_text="move flvr txt"):CODE
LOW⚡pokemon_v2/tests.py1055 def setup_move_stat_change_data(cls, move, stat=None, change=1):CODE
LOW⚡pokemon_v2/tests.py1064 def setup_pokeathlon_stat_data(cls, name="pkathln stt"):CODE
LOW⚡pokemon_v2/tests.py1071 def setup_pokeathlon_stat_name_data(cls, pokeathlon_stat, name="pkathln stt nm"):CODE
LOW⚡pokemon_v2/tests.py1197 def setup_pokedex_version_group_data(cls, pokedex, version_group=None):CODE
LOW⚡pokemon_v2/tests.py1207 def setup_pokemon_habitat_data(cls, name="pkm hbtt"):CODE
LOW⚡pokemon_v2/tests.py1216 def setup_pokemon_habitat_name_data(cls, pokemon_habitat, name="pkm hbtt nm"):CODE
LOWpokemon_v2/tests.py80 def setup_generation_name_data(cls, generation, name="gen nm"):CODE
LOWpokemon_v2/tests.py99 def setup_version_group_region_data(cls, version_group=None, region=None):CODE
LOWpokemon_v2/tests.py144 def setup_ability_effect_text_data(cls, ability, short_effect="ablty shrt efct", effect="ablty efct"):CODE
LOWpokemon_v2/tests.py155 def setup_ability_change_data(cls, ability):CODE
LOWpokemon_v2/tests.py164 def setup_ability_change_effect_text_data(cls, ability_change, effect="ablty change efct"):CODE
LOWpokemon_v2/tests.py175 def setup_ability_flavor_text_data(cls, ability, flavor_text="ablty flvr txt"):CODE
LOWpokemon_v2/tests.py192 def setup_item_attribute_data(cls, name="itm attr"):CODE
LOWpokemon_v2/tests.py201 def setup_item_attribute_name_data(cls, item_attribute, name="itm attr nm"):CODE
LOWpokemon_v2/tests.py212 def setup_item_attribute_description_data(cls, item_attribute, description="itm attr desc"):CODE
LOWpokemon_v2/tests.py259 def setup_item_pocket_name_data(cls, item_pocket, name="itm pkt nm"):CODE
LOWpokemon_v2/tests.py277 def setup_item_category_name_data(cls, item_category, name="itm ctgry nm"):CODE
LOWpokemon_v2/tests.py326 def setup_item_effect_text_data(cls, item, short_effect="ablty shrt efct", effect="ablty efct"):CODE
LOWpokemon_v2/tests.py337 def setup_item_flavor_text_data(cls, item, flavor_text="itm flvr txt"):CODE
LOWpokemon_v2/tests.py353 def setup_item_game_index_data(cls, item, game_index=0):CODE
LOWpokemon_v2/tests.py399 def setup_contest_effect_effect_text_data(cls, contest_effect, effect="cntst efct efct txt"):CODE
LOWpokemon_v2/tests.py410 def setup_super_contest_effect_data(cls, appeal=2):CODE
LOWpokemon_v2/tests.py419 def setup_super_contest_effect_flavor_text_data(cls, super_contest_effect, flavor_text="spr cntst efct flvr txt"):CODE
LOWpokemon_v2/tests.py471 def setup_berry_flavor_map_data(cls, berry, berry_flavor, potency=20):CODE
LOWpokemon_v2/tests.py522 def setup_egg_group_name_data(cls, egg_group, name="ntr nm"):CODE
LOWpokemon_v2/tests.py539 def setup_growth_rate_description_data(cls, growth_rate, description="grth rt desc"):CODE
77 more matches not shown…
Unused Imports20 hits · 20 pts
SeverityFileLineSnippetContext
LOWconfig/docker_compose.py6CODE
LOWconfig/local.py3CODE
LOWconfig/docker.py4CODE
LOW…ces/scripts/data/new_language/validate_new_language.py4CODE
LOW…ources/scripts/data/new_language/apply_new_language.py7CODE
LOWResources/scripts/data/gen8/read_swsh.py4CODE
LOWpokemon_v2/models.py3CODE
LOWpokemon_v2/serializers.py3CODE
LOWpokemon_v2/serializers.py15CODE
LOWpokemon_v2/api.py2CODE
LOWpokemon_v2/api.py24CODE
LOWpokemon_v2/api.py25CODE
LOWpokemon_v2/api.py29CODE
LOWpokemon_v2/api.py29CODE
LOWpokemon_v2/test_models.py12CODE
LOWpokemon_v2/tests.py10CODE
LOWpokemon_v2/urls.py8CODE
LOWpokemon_v2/urls.py17CODE
LOWdata/v2/build.py31CODE
LOWdata/v2/__init__.py1CODE
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALpokemon_v2/api.py9from django.core.exceptions import FieldErrorCODE
Deep Nesting9 hits · 9 pts
SeverityFileLineSnippetContext
LOWResources/scripts/check_csv.py8CODE
LOWResources/scripts/scraping_pokeball_price.py113CODE
LOWResources/scripts/scraping_pokeball_price.py136CODE
LOWResources/scripts/data/check_encounters.py51CODE
LOWResources/scripts/data/gen8/read_swsh.py134CODE
LOWResources/scripts/data/gen8/read_swsh.py188CODE
LOWpokemon_v2/serializers.py2689CODE
LOWpokemon_v2/test_models.py111CODE
LOWdata/v2/build.py68CODE
Excessive Try-Catch Wrapping5 hits · 6 pts
SeverityFileLineSnippetContext
LOWResources/scripts/scraping_pokeball_price.py199 except Exception as e:CODE
MEDIUMResources/scripts/scraping_pokeball_price.py200 print(f"Error on {b['name']}: {e}")CODE
LOWResources/scripts/data/gen8/to_csv.py35 except Exception as error:CODE
LOWResources/scripts/data/gen8/to_csv.py74 except Exception as error:CODE
LOWpokemon_v2/test_models.py160 except Exception as e: # noqa: BLE001CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHdata/v2/build.py80except (OSError, urllib.error.URLError, ValueError):CODE
AI Slop Vocabulary2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMruff.toml14 "DJ", # flake8-django: django best practicesCODE
MEDIUMruff.toml22 "PYI", # flake8-pyi: stub file best practicesCODE
AI Structural Patterns7 hits · 4 pts
SeverityFileLineSnippetContext
LOWpokemon_v2/tests.py478CODE
LOWpokemon_v2/tests.py882CODE
LOWpokemon_v2/tests.py943CODE
LOWpokemon_v2/tests.py983CODE
LOWpokemon_v2/tests.py1295CODE
LOWpokemon_v2/tests.py1598CODE
LOWpokemon_v2/tests.py1685CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWResources/scripts/updater.sh192# Check if the updater script has pushed the data to a new branchCOMMENT
LOWpokemon_v2/test_models.py149 # Check if identifier matches the patternCOMMENT
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWResources/gcp/create_gql_vm.sh61# set -a && source .env && set +aCOMMENT
LOWdata/v2/build.py1# To build out the data you'll need to jump into the Django shellCOMMENT