AI Slop Code Risk Monitor

openscopeproject/InteractiveHtmlBom

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

Interactive HTML BOM generation plugin for KiCad, EasyEDA, Eagle, Fusion360 and Allegro PCB designer

4.4 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for openscopeproject/InteractiveHtmlBom, a Python project with 4,629 GitHub stars. SynthScan examined 23,902 lines of code across 50 source files, recording 83 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 4.4 (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.

4.4
Adjusted Signal
4.4
Raw Pattern Score
100%
Time Factor
2026-10-17
Last Push
4.6K
Stars
Python
Language
23.9K
Lines of Code
50
Files
83
Pattern Hits
2026-10-31
Scan Date
0.08
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 12.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.1/100 · LOW

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

Agent Over-Engineering Ratio 11.7/100 · LOW

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

PR Review Velocity Impact 19.7/100 · LOW

Which changes need focused human review? 83 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 1LOW 78

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 83 distinct pattern matches across 9 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 Identifiers26 hits · 31 pts
SeverityFileLineSnippetContext
LOW⚡make_release.py47def read_last_tag_from_version_file(path: Path) -> str | None:CODE
LOW⚡make_release.py62def copy_interactive_html_bom(src: Path, dst: Path) -> None:CODE
LOW⚡tests/test_board_clipping.py112 def test_round_castellation_and_regular_hole(self):CODE
LOW⚡tests/test_board_clipping.py122 def test_external_internal_and_tangent_drills_are_not_castellations(self):CODE
LOW⚡tests/test_board_clipping.py129 def test_overlapping_and_duplicate_edge_drills_are_unioned(self):CODE
LOW⚡tests/test_board_clipping.py135 def test_rotated_slot_uses_drill_not_copper_offset(self):CODE
LOW⚡tests/test_board_clipping.py143 def test_cutout_edge_and_separate_island(self):CODE
LOWtests/test_board_clipping.py172 def test_outline_in_footprint(self):CODE
LOWtests/test_board_clipping.py182 def test_optional_clipping_schema(self):CODE
LOW⚡tests/test_board_clipping.py210 def test_bezier_outline_cutout_and_crossing_drill(self):CODE
LOW⚡tests/test_board_clipping.py220 def test_open_bezier_outline_falls_back(self):CODE
LOW⚡tests/test_board_clipping.py228 def test_cli_generation_with_beziers_and_fallback(self):CODE
LOWtests/test_board_clipping.py290 def test_missing_optional_geometry_apis(self):CODE
LOWtests/test_board_clipping.py305 def test_missing_and_open_outlines_fall_back(self):CODE
LOWtests/test_board_clipping.py310 def test_incompatible_geometry_api_falls_back(self):CODE
LOWInteractiveHtmlBom/web/table-util.js259function getBoundingClientRectFromMultiple(elements) {CODE
LOWInteractiveHtmlBom/web/table-util.js279function cloneElementWithDimensions(elem) {CODE
LOWInteractiveHtmlBom/web/render.js726function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {CODE
LOWInteractiveHtmlBom/web/ibom.js253function clearHighlightedFootprints() {CODE
LOWInteractiveHtmlBom/web/ibom.js262function createRowHighlightHandler(rowid, refs, net) {CODE
LOWInteractiveHtmlBom/web/ibom.js394function checkboxSetUnsetAllHandler(checkboxname) {CODE
LOWInteractiveHtmlBom/web/ibom.js1161function populateMarkWhenCheckedOptions() {CODE
LOWInteractiveHtmlBom/ecad/kicad.py84 def parse_extra_data_from_pcb(self):CODE
LOWInteractiveHtmlBom/ecad/kicad.py461 def _clipping_methods_available(self, obj, *names):CODE
LOWInteractiveHtmlBom/ecad/fusion_eagle.py275 def _calculate_footprint_bbox(self, package, x, y, angle, mirrored):CODE
LOWInteractiveHtmlBom/ecad/kicad_extra/__init__.py31def find_latest_schematic_data(base_name, directories):CODE
Deep Nesting25 hits · 25 pts
SeverityFileLineSnippetContext
LOWtests/test_board_clipping.py92CODE
LOWtests/test_board_clipping.py228CODE
LOWInteractiveHtmlBom/core/lzstring.py20CODE
LOWInteractiveHtmlBom/core/ibom.py99CODE
LOWInteractiveHtmlBom/core/ibom.py222CODE
LOWInteractiveHtmlBom/ecad/svgpath.py356CODE
LOWInteractiveHtmlBom/ecad/kicad.py278CODE
LOWInteractiveHtmlBom/ecad/kicad.py410CODE
LOWInteractiveHtmlBom/ecad/kicad.py434CODE
LOWInteractiveHtmlBom/ecad/kicad.py469CODE
LOWInteractiveHtmlBom/ecad/kicad.py546CODE
LOWInteractiveHtmlBom/ecad/kicad.py702CODE
LOWInteractiveHtmlBom/ecad/kicad.py784CODE
LOWInteractiveHtmlBom/ecad/kicad.py921CODE
LOWInteractiveHtmlBom/ecad/easyeda.py317CODE
LOWInteractiveHtmlBom/ecad/easyeda.py443CODE
LOWInteractiveHtmlBom/ecad/genericjson.py75CODE
LOWInteractiveHtmlBom/ecad/fusion_eagle.py154CODE
LOWInteractiveHtmlBom/ecad/fusion_eagle.py218CODE
LOWInteractiveHtmlBom/ecad/fusion_eagle.py275CODE
LOWInteractiveHtmlBom/ecad/fusion_eagle.py330CODE
LOWInteractiveHtmlBom/ecad/fusion_eagle.py478CODE
LOWInteractiveHtmlBom/ecad/fusion_eagle.py686CODE
LOWInteractiveHtmlBom/ecad/kicad_extra/sexpressions.py13CODE
LOWInteractiveHtmlBom/ecad/kicad_extra/netlistparser.py8CODE
Empty Error Handlers4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHInteractiveHtmlBom/version.py20except subprocess.CalledProcessError:CODE
HIGHInteractiveHtmlBom/version.py23except Exception:CODE
HIGHInteractiveHtmlBom/core/units.py21except Exception:CODE
HIGHInteractiveHtmlBom/ecad/kicad.py27except ValueError:CODE
Unused Imports14 hits · 14 pts
SeverityFileLineSnippetContext
LOW__init__.py1CODE
LOWmake_release.py20CODE
LOWtests/test_module.py2CODE
LOWInteractiveHtmlBom/generate_interactive_bom.py2CODE
LOWInteractiveHtmlBom/core/config.py3CODE
LOWInteractiveHtmlBom/core/ibom.py1CODE
LOWInteractiveHtmlBom/core/ibom.py12CODE
LOWInteractiveHtmlBom/core/ibom.py13CODE
LOWInteractiveHtmlBom/core/ibom.py13CODE
LOWInteractiveHtmlBom/dialog/__init__.py1CODE
LOWInteractiveHtmlBom/dialog/__init__.py1CODE
LOWInteractiveHtmlBom/ecad/svgpath.py11CODE
LOWInteractiveHtmlBom/ecad/svgpath.py11CODE
LOWInteractiveHtmlBom/ecad/svgpath.py11CODE
Excessive Try-Catch Wrapping6 hits · 7 pts
SeverityFileLineSnippetContext
LOWmake_release.py156 except Exception as e:CODE
LOWInteractiveHtmlBom/version.py23 except Exception:CODE
LOWInteractiveHtmlBom/core/units.py21except Exception:CODE
LOWInteractiveHtmlBom/core/ibom.py231 except Exception as e:CODE
LOWInteractiveHtmlBom/dialog/settings_dialog.py336 except Exception as e:CODE
MEDIUMInteractiveHtmlBom/dialog/settings_dialog.py46def SetSizeHints(self, sz1, sz2):CODE
Over-Commented Block5 hits · 5 pts
SeverityFileLineSnippetContext
LOWDATAFORMAT.md21 "maxy": 200,COMMENT
LOWDATAFORMAT.md321 "angle": angle,COMMENT
LOWInteractiveHtmlBom/core/config.py521COMMENT
LOWInteractiveHtmlBom/web/ibom.html21///////////////////////////////////////////////COMMENT
LOWInteractiveHtmlBom/web/lz-string.js1// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>COMMENT
Modern Structural Boilerplate1 hit · 2 pts
SeverityFileLineSnippetContext
LOW⚡make_release.py53def update_metadata_version(metadata_path: Path, version: str) -> None:CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWInteractiveHtmlBom/ecad/kicad_extra/__init__.py47 # if no such file is found just return last modifiedCOMMENT
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWInteractiveHtmlBom/web/table-util.js233 newElem.classList.add("placeholder");CODE