AI Slop Code RIsk Monitor

bottlepy/bottle

bottle.py is a fast and simple micro-framework for python web-applications.

19.8 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for bottlepy/bottle, a Python project with 8,793 GitHub stars. SynthScan examined 9,485 lines of code across 39 source files, recording 118 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 19.8 (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.

19.8
Adjusted Signal
19.8
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
8.8K
Stars
Python
Language
9.5K
Lines of Code
39
Files
118
Pattern Hits
2026-10-12
Scan Date
0.44
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 30.3/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 24.0/100 · LOW

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

Agent Over-Engineering Ratio 48.8/100 · MEDIUM

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

PR Review Velocity Impact 66.4/100 · HIGH

Which changes need focused human review? 118 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 17MEDIUM 2LOW 99

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 118 distinct pattern matches across 8 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.

Empty Error Handlers12 hits · 60 pts
SeverityFileLineSnippetContext
HIGHbottle.py133except (IOError, AttributeError):CODE
HIGHbottle.py141except AttributeError:CODE
HIGHbottle.py2538except Exception:CODE
HIGHbottle.py3881except KeyboardInterrupt:CODE
HIGHbottle.py2108except Exception:CODE
HIGHbottle.py2900except ValueError:CODE
HIGHbottle.py3833except KeyboardInterrupt:CODE
HIGHbottle.py3648except KeyError:CODE
HIGHbottle.py3714except ImportError:CODE
HIGHtest/__init__.py9except ImportError:CODE
HIGHtest/test_wsgi.py242except RuntimeError:CODE
HIGHtest/test_environ.py667except CookieError:CODE
Hyper-Verbose Identifiers55 hits · 60 pts
SeverityFileLineSnippetContext
LOWtest/test_plugins.py53 def test_uninstall_by_instance(self):CODE
LOWtest/test_plugins.py155 def test_json_plugin_catches_httpresponse(self):CODE
LOWtest/test_plugins.py196 def test_instance_method_wrapper(self):CODE
LOWtest/test_mount.py90 def test_mount_wsgi_ctype_bug(self):CODE
LOW⚡test/test_router.py136 def test_dynamic_before_static_any(self):CODE
LOW⚡test/test_router.py143 def test_any_static_before_dynamic(self):CODE
LOW⚡test/test_router.py150 def test_dynamic_any_if_method_exists(self):CODE
LOWtest/test_config.py68 def test_overlay_filter_error_keeps_virtual_key(self):CODE
LOWtest/test_multipart.py183 def test_missing_content_type(self):CODE
LOWtest/test_multipart.py186 def test_unsupported_content_type(self):CODE
LOW⚡test/test_multipart.py198 def test_no_newline_after_content(self):CODE
LOW⚡test/test_multipart.py204 def test_no_newline_after_middle_content(self):CODE
LOW⚡test/test_multipart.py214 def test_preamble_before_start_boundary(self):CODE
LOWtest/test_multipart.py251 def test_content_length_to_small(self):CODE
LOWtest/test_multipart.py258 def test_no_disposition_header(self):CODE
LOWtest/test_stpl.py20 def test_self_as_variable_name(self):CODE
LOWtest/test_stpl.py101 def test_newline_in_parameterlist(self):CODE
LOWtest/test_stpl.py231 def test_bug_no_whitespace_before_stmt(self):CODE
LOWtest/test_stpl.py234 def test_bug_block_keywords_eat_prefixed_code(self):CODE
LOWtest/test_stpl.py277 def test_multiline_ignore_eob_in_string(self):STRING
LOWtest/test_stpl.py289 def test_multiline_find_eob_in_comments(self):STRING
LOWtest/test_stpl.py316 def test_multiline_eob_after_end(self):STRING
LOWtest/test_stpl.py327 def test_multiline_eob_in_single_line_code(self):STRING
LOWtest/test_stpl.py337 def test_multiline_strings_in_code_line(self):STRING
LOWtest/test_stpl.py348 def test_multiline_comprehensions_in_code_line(self):STRING
LOWtest/test_stpl.py361 def test_end_keyword_on_same_line(self):STRING
LOWtest/test_outputfilter.py85 def test_json_serialization_error(self):CODE
LOWtest/test_outputfilter.py109 def test_json_config_enable_false(self):CODE
LOWtest/test_outputfilter.py116 def test_json_config_dump_func(self):CODE
LOW⚡test/test_outputfilter.py139 def test_empty_generator_callback(self):CODE
LOW⚡test/test_outputfilter.py147 def test_error_in_generator_callback(self):CODE
LOW⚡test/test_outputfilter.py154 def test_fatal_error_in_generator_callback(self):CODE
LOW⚡test/test_outputfilter.py161 def test_httperror_in_generator_callback(self):CODE
LOW⚡test/test_outputfilter.py170 def test_httpresponse_in_generator_callback(self):CODE
LOW⚡test/test_outputfilter.py176 def test_unicode_generator_callback(self):CODE
LOW⚡test/test_outputfilter.py182 def test_invalid_generator_callback(self):CODE
LOWtest/test_wsgi.py353 def test_after_request_hooks_run_after_exception(self):CODE
LOWtest/test_wsgi.py373 def test_after_request_hooks_run_after_exception_in_before_hook(self):CODE
LOWtest/test_wsgi.py393 def test_after_request_hooks_may_rise_response_exception(self):CODE
LOWtest/test_wsgi.py410 def test_after_response_hook_can_set_headers(self):CODE
LOWtest/test_wsgi.py543 def test_module_shortcuts_with_different_name(self):CODE
LOWtest/test_route.py44 def test_callback_inspection_multiple_args(self):CODE
LOWtest/test_route.py66 def test_callback_inspection_newsig(self):CODE
LOWtest/test_route.py98 def test_unwrap_closure_callable(self):CODE
LOWtest/test_environ.py140 def test_header_access_special(self):CODE
LOW⚡test/test_environ.py308 def test_chunked_not_terminated(self):CODE
LOW⚡test/test_environ.py314 def test_chunked_illegal_size(self):CODE
LOW⚡test/test_environ.py317 def test_chunked_not_chunked_at_all(self):CODE
LOWtest/test_environ.py403 def test_json_header_empty_body(self):CODE
LOWtest/test_environ.py452 def test_user_defined_attributes(self):CODE
LOWtest/test_environ.py493 def test_constructor_headerlist(self):CODE
LOWtest/test_environ.py611 def test_set_cookie_value_long_string(self):CODE
LOWtest/test_environ.py615 def test_set_cookie_name_long_string(self):CODE
LOWtest/test_environ.py735 def test_prevent_control_characters_in_headers(self):CODE
LOWtest/test_environ.py870 def test_redirect_preserve_cookies(self):CODE
Unused Imports27 hits · 27 pts
SeverityFileLineSnippetContext
LOWtest/test_formsdict.py5CODE
LOWtest/test_formsdict.py5CODE
LOWtest/test_plugins.py2CODE
LOWtest/test_plugins.py5CODE
LOWtest/tools.py2CODE
LOWtest/tools.py14CODE
LOWtest/__init__.py1CODE
LOWtest/__init__.py2CODE
LOWtest/__init__.py3CODE
LOWtest/__init__.py4CODE
LOWtest/__init__.py4CODE
LOWtest/test_fileupload.py5CODE
LOWtest/test_fileupload.py6CODE
LOWtest/test_fileupload.py7CODE
LOWtest/test_oorouting.py14CODE
LOWtest/test_multipart.py4CODE
LOWtest/test_multipart.py4CODE
LOWtest/test_multipart.py4CODE
LOWtest/test_stpl.py2CODE
LOWtest/test_outputfilter.py7CODE
LOWtest/test_outputfilter.py12CODE
LOWtest/test_wsgi.py2CODE
LOWtest/test_mako.py1CODE
LOWtest/test_mako.py54CODE
LOWtest/test_jinja2.py69CODE
LOWtest/test_jinja2.py43CODE
LOWtest/test_jinja2.py50CODE
Cross-Language Confusion5 hits · 25 pts
SeverityFileLineSnippetContext
HIGHbottle.py1091 default_app.push(self)CODE
HIGHbottle.py2500 return self.push()CODE
HIGHbottle.py3772 tmp = default_app.push() # Create a new "default application"CODE
HIGHtest/test_securecookies.py13 bottle.app.push()CODE
HIGHtest/tools.py86 self.app = bottle.app.push()CODE
Excessive Try-Catch Wrapping6 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMbottle.py130def _stderr(*args):CODE
LOWbottle.py968 except Exception as E:CODE
LOWbottle.py1032 except Exception as error:CODE
LOWbottle.py1070 except Exception as E:CODE
LOWbottle.py2108 except Exception:CODE
LOWbottle.py2538 except Exception:CODE
Deep Nesting11 hits · 6 pts
SeverityFileLineSnippetContext
LOWbottle.py2885CODE
LOWbottle.py2908CODE
LOWbottle.py3784CODE
LOWbottle.py4507CODE
LOWbottle.py430CODE
LOWbottle.py533CODE
LOWbottle.py1172CODE
LOWbottle.py2604CODE
LOWbottle.py3179CODE
LOWbottle.py4275CODE
LOWtest/test_multipart.py81CODE
Self-Referential Comments1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMbottle.py3772 tmp = default_app.push() # Create a new "default application"CODE
AI Structural Patterns1 hit · 0 pts
SeverityFileLineSnippetContext
LOWbottle.py3784CODE