AI Slop Code RIsk Monitor

BIT-DataLab/Edit-Banana

Edit Banana: A framework for converting statistical formats into editable.

15.6 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for BIT-DataLab/Edit-Banana, a Python project with 5,498 GitHub stars. SynthScan examined 12,725 lines of code across 55 source files, recording 166 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 15.6 (Elevated 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.

15.6
Adjusted Signal
15.6
Raw Pattern Score
100%
Time Factor
2026-09-23
Last Push
5.5K
Stars
Python
Language
12.7K
Lines of Code
55
Files
166
Pattern Hits
2026-10-12
Scan Date
0.07
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 24.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 22.8/100 · LOW

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

Agent Over-Engineering Ratio 26.0/100 · MEDIUM

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

PR Review Velocity Impact 53.7/100 · HIGH

Which changes need focused human review? 166 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 5LOW 157

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

Unused Imports66 hits · 66 pts
SeverityFileLineSnippetContext
LOWmain.py34CODE
LOWmain.py34CODE
LOWmain.py34CODE
LOWsam3_service/__init__.py1CODE
LOWsam3_service/__init__.py1CODE
LOWmodules/xml_merger.py42CODE
LOWmodules/xml_merger.py42CODE
LOWmodules/xml_merger.py46CODE
LOWmodules/__init__.py6CODE
LOWmodules/__init__.py6CODE
LOWmodules/__init__.py7CODE
LOWmodules/__init__.py7CODE
LOWmodules/__init__.py7CODE
LOWmodules/__init__.py7CODE
LOWmodules/__init__.py7CODE
LOWmodules/__init__.py7CODE
LOWmodules/__init__.py15CODE
LOWmodules/__init__.py16CODE
LOWmodules/__init__.py19CODE
LOWmodules/__init__.py20CODE
LOWmodules/__init__.py21CODE
LOWmodules/__init__.py22CODE
LOWmodules/metric_evaluator.py133CODE
LOWmodules/metric_evaluator.py139CODE
LOWmodules/sam3_info_extractor.py13CODE
LOWmodules/sam3_info_extractor.py14CODE
LOWmodules/basic_shape_processor.py43CODE
LOWmodules/basic_shape_processor.py43CODE
LOWmodules/basic_shape_processor.py43CODE
LOWmodules/basic_shape_processor.py43CODE
LOWmodules/basic_shape_processor.py44CODE
LOWmodules/basic_shape_processor.py47CODE
LOWmodules/base.py20CODE
LOWmodules/base.py20CODE
LOWmodules/base.py20CODE
LOWmodules/utils/__init__.py3CODE
LOWmodules/utils/__init__.py3CODE
LOWmodules/utils/__init__.py8CODE
LOWmodules/utils/__init__.py8CODE
LOWmodules/utils/__init__.py8CODE
LOWmodules/utils/__init__.py8CODE
LOWmodules/utils/__init__.py15CODE
LOWmodules/utils/__init__.py19CODE
LOWmodules/utils/__init__.py19CODE
LOWmodules/utils/__init__.py19CODE
LOWmodules/utils/__init__.py19CODE
LOWmodules/utils/__init__.py19CODE
LOWmodules/utils/xml_utils.py7CODE
LOWmodules/utils/xml_utils.py7CODE
LOWmodules/text/__init__.py16CODE
LOWmodules/text/__init__.py17CODE
LOWmodules/text/__init__.py18CODE
LOWmodules/text/__init__.py18CODE
LOWmodules/text/restorer.py14CODE
LOWmodules/text/ocr/__init__.py6CODE
LOWmodules/text/ocr/__init__.py6CODE
LOWmodules/text/ocr/__init__.py7CODE
LOWmodules/text/ocr/pix2text.py174CODE
LOWmodules/text/ocr/local_ocr.py9CODE
LOWmodules/text/ocr/local_ocr.py9CODE
6 more matches not shown…
Excessive Try-Catch Wrapping31 hits · 34 pts
SeverityFileLineSnippetContext
LOWserver_pa.py76 except Exception:CODE
LOWserver_pa.py80 except Exception as e:CODE
LOWmain.py180 except Exception as e:CODE
LOWmain.py271 except Exception as e:CODE
MEDIUM⚡main.py388 print(f"Error: file not found {args.input}")STRING
MEDIUM⚡main.py396 print(f"Error: input directory does not exist: {input_dir}")STRING
MEDIUM⚡main.py406 print(f"Error: no supported image files in {input_dir}")STRING
LOWsam3_service/server.py262 except Exception as exc: # pragma: no cover - defensive log pathCODE
LOWsam3_service/rmbg_client.py31 except Exception as exc: # pragma: no coverCODE
LOWsam3_service/rmbg_client.py63 except Exception:CODE
LOWsam3_service/client.py63 except Exception:CODE
LOWsam3_service/rmbg_server.py90 except Exception as exc: # pragma: no coverCODE
MEDIUMscripts/merge_xml.py32 print(f"Error: file not found {args.input}")CODE
LOWmodules/icon_picture_processor.py114 except Exception as e:CODE
LOWmodules/icon_picture_processor.py177 except Exception as e:CODE
LOWmodules/icon_picture_processor.py201 except Exception as e2:CODE
LOWmodules/icon_picture_processor.py298 except Exception as e:CODE
LOWmodules/xml_merger.py258 except Exception as e:CODE
LOWmodules/xml_merger.py333 except Exception as e:CODE
LOWmodules/xml_merger.py497 except Exception as e:CODE
LOWmodules/xml_merger.py614 except Exception as e:CODE
LOWmodules/refinement_processor.py224 except Exception as e:CODE
LOWmodules/__init__.py27except Exception as e:CODE
LOWmodules/sam3_info_extractor.py745 except Exception as e:CODE
LOWmodules/basic_shape_processor.py1405 except Exception as e:CODE
LOWmodules/utils/xml_utils.py54 except Exception:CODE
LOWmodules/text/restorer.py70 except Exception as e:CODE
LOWmodules/text/restorer.py270 except Exception as e:CODE
LOWmodules/text/restorer.py558 except Exception as e:CODE
LOWmodules/text/ocr/pix2text.py216 except Exception as e:CODE
MEDIUMflowchart_text/main.py35 print(f"Error: file not found {args.input}")CODE
Deep Nesting27 hits · 27 pts
SeverityFileLineSnippetContext
LOWmain.py142CODE
LOWmain.py277CODE
LOWsam3_service/server.py177CODE
LOWscripts/setup_rmbg.py16CODE
LOWmodules/xml_merger.py152CODE
LOWmodules/xml_merger.py224CODE
LOWmodules/xml_merger.py285CODE
LOWmodules/xml_merger.py459CODE
LOWmodules/xml_merger.py527CODE
LOWmodules/metric_evaluator.py345CODE
LOWmodules/metric_evaluator.py613CODE
LOWmodules/metric_evaluator.py1160CODE
LOWmodules/metric_evaluator.py1243CODE
LOWmodules/metric_evaluator.py1262CODE
LOWmodules/sam3_info_extractor.py677CODE
LOWmodules/sam3_info_extractor.py748CODE
LOWmodules/sam3_info_extractor.py889CODE
LOWmodules/basic_shape_processor.py82CODE
LOWmodules/basic_shape_processor.py393CODE
LOWmodules/basic_shape_processor.py456CODE
LOWmodules/basic_shape_processor.py818CODE
LOWmodules/basic_shape_processor.py1601CODE
LOWmodules/basic_shape_processor.py1700CODE
LOWmodules/text/restorer.py263CODE
LOWmodules/text/ocr/paddle_ocr.py50CODE
LOWmodules/text/processors/style.py86CODE
LOWmodules/text/processors/font_family.py172CODE
Empty Error Handlers4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHserver_pa.py76except Exception:CODE
HIGHmodules/xml_merger.py586except:CODE
HIGHmodules/xml_merger.py316except (ValueError, TypeError):CODE
HIGHmodules/basic_shape_processor.py351except:CODE
Hyper-Verbose Identifiers15 hits · 15 pts
SeverityFileLineSnippetContext
LOWmodules/icon_picture_processor.py415def calculate_image_complexity(image_arr: np.ndarray) -> tuple:CODE
LOWmodules/xml_merger.py262 def _scale_fragment_coordinates(self, fragment: XMLFragment, scale: float) -> XMLFragment:CODE
LOWmodules/xml_merger.py285 def _extract_text_fragments_from_xml(self, text_xml: str) -> List[XMLFragment]:CODE
LOWmodules/refinement_processor.py532def refine_from_rendered_comparison(elements: List[ElementInfo],CODE
LOWmodules/metric_evaluator.py510 def _extract_text_bboxes_from_xml(self, text_xml: str, img_width: int, img_height: int) -> List[List[int]]:CODE
LOWmodules/metric_evaluator.py613 def _detect_complex_image_regions(self,CODE
LOWmodules/metric_evaluator.py1160 def _save_uncovered_visualization(self,CODE
LOWmodules/metric_evaluator.py1628def detect_missing_from_rendered_diff(original_path: str,CODE
LOWmodules/sam3_info_extractor.py541 def extract_with_custom_prompts(self, context: ProcessingContext,CODE
LOWmodules/sam3_info_extractor.py640 def _deduplicate_within_group(self, elements: List[ElementInfo],CODE
LOWmodules/sam3_info_extractor.py677 def _analyze_region_complexity(self, image_path: str, bbox: List[int]) -> dict:CODE
LOWmodules/sam3_info_extractor.py748 def _deduplicate_cross_groups(self, elements: List[ElementInfo]) -> List[ElementInfo]:CODE
LOWmodules/sam3_info_extractor.py889 def _filter_contained_elements(self, elements: List[ElementInfo]) -> List[ElementInfo]:CODE
LOWmodules/sam3_info_extractor.py1054 def remove_prompts_from_group(self, group_type: PromptGroup, prompts: List[str]):CODE
LOWmodules/text/restorer.py407 def _is_refinement_meaningful(self, original: str, new_latex: str) -> bool:CODE
Verbosity Indicators6 hits · 13 pts
SeverityFileLineSnippetContext
LOW⚡modules/text/restorer.py143 # Step 1: OCRCOMMENT
LOW⚡modules/text/restorer.py146 # Step 2: Formula (layout OCR + Pix2Text)COMMENT
LOWmodules/text/restorer.py158 # Step 3: Coord transformCOMMENT
LOW⚡modules/text/restorer.py173 # Step 4: Font sizeCOMMENT
LOW⚡modules/text/restorer.py177 # Step 5: Font familyCOMMENT
LOW⚡modules/text/restorer.py182 # Step 6: Style (bold/color)COMMENT
Structural Annotation Overuse6 hits · 13 pts
SeverityFileLineSnippetContext
LOW⚡modules/text/restorer.py143 # Step 1: OCRCOMMENT
LOW⚡modules/text/restorer.py146 # Step 2: Formula (layout OCR + Pix2Text)COMMENT
LOWmodules/text/restorer.py158 # Step 3: Coord transformCOMMENT
LOW⚡modules/text/restorer.py173 # Step 4: Font sizeCOMMENT
LOW⚡modules/text/restorer.py177 # Step 5: Font familyCOMMENT
LOW⚡modules/text/restorer.py182 # Step 6: Style (bold/color)COMMENT
Modern Structural Boilerplate6 hits · 6 pts
SeverityFileLineSnippetContext
LOWsam3_service/__init__.py3__all__ = ["Sam3ServiceClient", "Sam3ServicePool"]CODE
LOWmodules/__init__.py32__all__ = [CODE
LOWmodules/utils/__init__.py27__all__ = [CODE
LOWmodules/text/__init__.py20__all__ = [CODE
LOWmodules/text/ocr/__init__.py19__all__ = [CODE
LOWmodules/text/processors/__init__.py18__all__ = [CODE
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOWrequirements.txt21# pip install onnxruntime # or onnxruntime-gpuCOMMENT
LOWmodules/sam3_info_extractor.py801 # 【新增】基础图形和图片类重叠的智能判断COMMENT
LOWmodules/sam3_info_extractor.py821 # keep.append(elem_j)COMMENT
LOWflowchart_text/src/__init__.py1# OCR & text extraction — source layer for alignment and config.COMMENT
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWmodules/text/xml_generator.py235CODE