AI Slop Code RIsk Monitor

jarun/buku

:bookmark: Personal mini-web in text

6.8 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for jarun/buku, a Python project with 7,216 GitHub stars. SynthScan examined 41,536 lines of code across 109 source files, recording 241 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 6.8 (Moderate 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.

6.8
Adjusted Signal
6.8
Raw Pattern Score
100%
Time Factor
2026-09-15
Last Push
7.2K
Stars
Python
Language
41.5K
Lines of Code
109
Files
241
Pattern Hits
2026-10-12
Scan Date
0.17
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 12.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.4/100 · LOW

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

Agent Over-Engineering Ratio 23.9/100 · LOW

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

PR Review Velocity Impact 36.9/100 · MEDIUM

Which changes need focused human review? 241 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 18MEDIUM 26LOW 197

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 241 distinct pattern matches across 13 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 Handlers18 hits · 90 pts
SeverityFileLineSnippetContext
HIGHbuku.py5774except AttributeError:CODE
HIGHbuku.py3174except Exception:CODE
HIGHbuku.py3226except Exception:CODE
HIGHbuku.py5860except ImportError:CODE
HIGHbuku.py5877except KeyboardInterrupt:CODE
HIGHbuku.py6396except Exception:CODE
HIGHbuku.py3271except Exception:CODE
HIGHbuku.py3288except Exception:CODE
HIGHbuku.py3598except NoOptionError:CODE
HIGHbuku.py3610except NoOptionError:CODE
HIGHbuku.py3616except NoOptionError:CODE
HIGHbuku.py5191except IOError:CODE
HIGHbuku.py5195except IOError:CODE
HIGHtests/test_bukuDb.py657except StopIteration:CODE
HIGHtests/test_bukuDb.py686except StopIteration:CODE
HIGHbukuserver-runner/buku-server.py73except FileNotFoundError:CODE
HIGHbukuserver-runner/buku-server.py144except FileNotFoundError:CODE
HIGHbukuserver-runner/buku-server.py201except ValueError:CODE
Hyper-Verbose Identifiers68 hits · 57 pts
SeverityFileLineSnippetContext
LOWbuku.py1739 def search_keywords_and_filter_by_tags(CODE
LOWbuku.py1784 def exclude_results_from_search(self, search_results, without, deep=False, markers=False):CODE
LOW⚡buku.py3449def convert_tags_to_org_mode_tags(tags: str) -> str:STRING
LOWbuku.py3578def get_firefox_profile_names(path):STRING
LOWbuku.py5768def monkeypatch_textwrap_for_cjk():STRING
LOWbukuserver/views.py333 def scaffold_sortable_columns(self):CODE
LOWbukuserver/views.py493 def scaffold_sortable_columns(self):CODE
LOWbukuserver/static/bukuserver/js/Chart.js2036function computeFlexCategoryTraits(index, ruler, options) {CODE
LOWbukuserver/static/bukuserver/js/Chart.js12150function createNewTitleBlockAndAttach(chart, titleOpts) {CODE
LOWbukuserver/static/bukuserver/js/Chart.js13297 function adjustPointPositionForLabelHeight(angle, textSize, position) {CODE
LOWbukuserver/static/bukuserver/js/Chart.js13857function determineUnitForAutoTicks(minUnit, min, max, capacity) {CODE
LOWbukuserver/static/bukuserver/js/Chart.js13876function determineUnitForFormatting(ticks, minUnit, min, max) {CODE
LOWtests/test_bukuDb.py265 def test_append_tag_at_all_indices(self):CODE
LOWtests/test_bukuDb.py309 def test_search_keywords_and_filter_by_tags(self):CODE
LOWtests/test_bukuDb.py401 def test_search_by_multiple_tags_search_any(self):CODE
LOWtests/test_bukuDb.py452 def test_search_by_multiple_tags_search_all(self):CODE
LOWtests/test_bukuDb.py483 def test_search_by_tags_enforces_space_seprations_search_all(self):CODE
LOWtests/test_bukuDb.py541 def test_search_by_tags_exclusion(self):CODE
LOWtests/test_bukuDb.py582 def test_search_by_tags_enforces_space_seprations_exclusion(self):CODE
LOWtests/test_bukuDb.py640 def test_search_and_open_in_browser_by_range(self):CODE
LOWtests/test_bukuDb.py670 def test_search_and_open_all_in_browser(self):CODE
LOWtests/test_bukuDb.py1297def test_delete_rec_range_and_delay_commit(CODE
LOWtests/test_bukuDb.py1330def test_delete_rec_index_and_delay_commit(bukuDb, index, delay_commit, input_retval):CODE
LOWtests/test_bukuDb.py1376def test_delete_rec_on_empty_database(bukuDb, index, is_range, low, high):CODE
LOWtests/test_bukuDb.py1405def test_delete_rec_on_non_integer(CODE
LOWtests/test_bukuDb.py1431def test_add_rec_add_invalid_url(bukuDb, caplog, url):CODE
LOWtests/test_bukuDb.py1512def test_update_rec_invalid_tag(bukuDb, caplog, invalid_tag):CODE
LOWtests/test_bukuDb.py1530def test_update_rec_update_all_bookmark(CODE
LOWtests/test_bukuDb.py1547def test_edit_update_rec_with_invalid_input(bukuDb, get_system_editor_retval, index, exp_res):CODE
LOWtests/test_bukuDb.py1608def test_load_chrome_database(bukuDb, chrome_db, add_pt):CODE
LOWtests/test_bukuDb.py1657def test_auto_import_chromium_bookmark_files(bukuDb, chromium_profile, browser, filenames, capsys):CODE
LOWtests/test_bukuDb.py1673def test_auto_import_chromium_duplicate_urls(bukuDb, chromium_profile):CODE
LOWtests/test_bukuDb.py1692def test_auto_import_chromium_prompt_once(bukuDb, chromium_profile, import_answer):CODE
LOWtests/test_bukuDb.py1709def test_auto_import_chromium_invalid_file_keeps_other_source(bukuDb, chromium_profile, invalid_filename, capsys, caplogCODE
LOWtests/test_bukuDb.py1725def test_auto_import_chromium_all_files_invalid(bukuDb, chromium_profile, capsys, caplog):CODE
LOWtests/test_bukuDb.py1739def test_auto_import_chromium_empty_account_roots(bukuDb, chromium_profile, capsys):CODE
LOWtests/test_bukuDb.py1764def test_load_firefox_database(bukuDb, firefox_db, add_pt):CODE
LOWtests/test_bukuDb.py1975def test_search_keywords_and_filter_by_tags(bukuDb, keyword_results, stag_results, exp_res):CODE
LOWtests/test_bukuDb.py1987def test_exclude_results_from_search(bukuDb, search_results, exclude_results, exp_res):CODE
LOWtests/test_bukuDb.py2075def split_and_test_membership(a, b):CODE
LOWtests/test_views.py92def test_tag_model_view_get_list_empty_db(tmv_instance):CODE
LOWtests/test_views.py107def test_tag_model_view_get_list(tmv_instance, sort_field, sort_desc, filters, exp_res):CODE
LOW⚡tests/test_views.py316def test_env_entry_render_params(bukudb, app, client, mode, favicons, new_tab):CODE
LOW⚡tests/test_views.py325def test_env_entry_render_params_blanks(bukudb, app, client, mode, url, netloc, title):CODE
LOW⚡tests/test_views.py328def _test_env_entry_render_params(bukudb, app, client, mode, favicons, new_tab, url, netloc, title):CODE
LOWtests/test_views.py387def test_env_reverse_proxy_path(proxy_path, client):CODE
LOWtests/test_requirements.py25def test_bukuserver_requirement(pyproject: dict[str, Any]):CODE
LOWtests/test_import_firefox_json.py97def test_load_invalid_typecode():CODE
LOWtests/test_import_firefox_json.py124def test_load_folder_with_no_children():CODE
LOWtests/test_import_firefox_json.py185def test_load_one_container_child():STRING
LOWtests/test_import_firefox_json.py246def test_load_container_no_title():STRING
LOWtests/test_import_firefox_json.py276def test_load_hierarchical_container_without_ignore():STRING
LOWtests/test_import_firefox_json.py307def test_load_hierarchical_container_with_ignore():STRING
LOWtests/test_buku.py19def check_import_html_results_contains(result, expected_result):CODE
LOWtests/test_buku.py192def test_print_rec_with_filter(capfd, field_filter, exp_res):CODE
LOWtests/test_buku.py315def test_check_upstream_release(status_code, latest_release):CODE
LOWtests/test_buku.py372def test_sigint_handler_with_mock():CODE
LOWtests/test_buku.py415def test_to_temp_file_content(url, title_in, tags_in, desc):CODE
LOWtests/test_buku.py463def test_parse_temp_file_content(content, exp_res):CODE
LOWtests/test_buku.py734def test_import_html_and_add_parent():CODE
8 more matches not shown…
Excessive Try-Catch Wrapping65 hits · 44 pts
SeverityFileLineSnippetContext
MEDIUMbuku.py242def __init__(self, iterations=8, dbfile=None, encfile=None, password=None, replaCODE
MEDIUMbuku.py3823def extract_desc(entry):CODE
LOWbuku.py285 except Exception as e:CODE
LOWbuku.py311 except Exception as e:CODE
LOWbuku.py543 except Exception as e:CODE
LOWbuku.py581 except Exception as e:CODE
LOWbuku.py886 except Exception as e:CODE
LOWbuku.py2122 except Exception as e:CODE
LOWbuku.py2370 except Exception as e:CODE
LOWbuku.py2546 except Exception as e:CODE
LOWbuku.py2859 except Exception as e:CODE
LOWbuku.py2966 except Exception as e:CODE
LOWbuku.py2970 except Exception as e:CODE
LOWbuku.py2987 except Exception as e:CODE
LOWbuku.py3000 except Exception as e:CODE
LOWbuku.py3065 except Exception as e:CODE
LOWbuku.py3075 except Exception as e:CODE
LOWbuku.py3102 except Exception as e:CODE
LOWbuku.py3159 except Exception as e:CODE
LOWbuku.py3174 except Exception:CODE
LOWbuku.py3226 except Exception:CODE
LOWbuku.py3271 except Exception:CODE
LOWbuku.py3288 except Exception:CODE
LOWbuku.py6193 except Exception:CODE
LOWbuku.py6269 except Exception:CODE
LOWbuku.py6396 except Exception:CODE
LOWbuku.py6535 except Exception as e:CODE
LOWbuku.py3818 except Exception:STRING
LOWbuku.py3830 except Exception:STRING
LOWbuku.py3838 except Exception:STRING
LOWbuku.py3849 except Exception:STRING
LOWbuku.py3880 except Exception as e:STRING
LOWbuku.py4072 except Exception as e:STRING
LOWbuku.py4211 except Exception as e:STRING
LOWbuku.py4227 except Exception as e:STRING
LOWbuku.py4245 except Exception as e:STRING
LOWbuku.py4285 except Exception as e:STRING
LOWbuku.py4316 except Exception as e:STRING
LOWbuku.py4437 except Exception as e:STRING
LOWbuku.py4680 except Exception as e:STRING
LOWbuku.py4837 except Exception:STRING
LOWbuku.py4912 except Exception:STRING
LOWbuku.py5138 except Exception as e:STRING
LOWbuku.py5214 except Exception:STRING
LOWbuku.py5279 except Exception as e:STRING
LOWbuku.py5318 except Exception as e:STRING
LOWbukuserver/server.py43 except Exception as e:CODE
LOWbukuserver/__init__.py15 except Exception:CODE
LOWbukuserver/api.py103 except Exception as e:CODE
LOWbukuserver/api.py138 except Exception as e:CODE
MEDIUMbukuserver/api.py127def reorder_bookmarks():CODE
LOWbukuserver/views.py239 except Exception as ex:CODE
LOWbukuserver/views.py252 except Exception as ex:CODE
LOWbukuserver/views.py431 except Exception as ex:CODE
LOWbukuserver/views.py578 except Exception as ex:CODE
LOWbukuserver/views.py596 except Exception as ex:CODE
MEDIUMbukuserver/views.py223def create_model(self, form):CODE
MEDIUMbukuserver/views.py248def delete_model(self, model):CODE
MEDIUMbukuserver/views.py587def update_model(self, form, model):CODE
LOWtests/test_buku.py45 except Exception as e:CODE
5 more matches not shown…
Decorative Section Separators14 hits · 31 pts
SeverityFileLineSnippetContext
MEDIUM⚡buku.py6003 # ------------------------COMMENT
MEDIUM⚡buku.py6005 # ------------------------COMMENT
MEDIUM⚡buku.py6015 # ----------------COMMENT
MEDIUM⚡buku.py6017 # ----------------COMMENT
MEDIUMbuku.py5898 # ---------------------COMMENT
MEDIUMbuku.py5900 # ---------------------COMMENT
MEDIUMbuku.py5935 # ------------------COMMENT
MEDIUMbuku.py5937 # ------------------COMMENT
MEDIUMbuku.py5962 # --------------------COMMENT
MEDIUMbuku.py5964 # --------------------COMMENT
MEDIUM⚡buku.py3441# ----------------STRING
MEDIUM⚡buku.py3443# ----------------STRING
MEDIUMbuku.py5437# ---------------------STRING
MEDIUMbuku.py5439# ---------------------STRING
Deep Nesting50 hits · 30 pts
SeverityFileLineSnippetContext
LOWbuku.py3461CODE
LOWbuku.py3578CODE
LOWbuku.py3653CODE
LOWbuku.py3713CODE
LOWbuku.py3778CODE
LOWbuku.py3910CODE
LOWbuku.py3994CODE
LOWbuku.py4187CODE
LOWbuku.py4367CODE
LOWbuku.py4634CODE
LOWbuku.py4954CODE
LOWbuku.py5644CODE
LOWbuku.py5807CODE
LOWbuku.py5851CODE
LOWbuku.py513CODE
LOWbuku.py776CODE
LOWbuku.py890CODE
LOWbuku.py941CODE
LOWbuku.py1018CODE
LOWbuku.py1234CODE
LOWbuku.py1527CODE
LOWbuku.py1589CODE
LOWbuku.py1612CODE
LOWbuku.py1882CODE
LOWbuku.py2151CODE
LOWbuku.py2284CODE
LOWbuku.py2424CODE
LOWbuku.py2457CODE
LOWbuku.py2552CODE
LOWbuku.py2620CODE
LOWbuku.py2728CODE
LOWbuku.py2798CODE
LOWbuku.py2890CODE
LOWbuku.py3009CODE
LOWbuku.py3843CODE
LOWbuku.py5653CODE
LOWbuku.py1345CODE
LOWbuku.py5654CODE
LOWbukuserver/api.py259CODE
LOWbukuserver/filters.py108CODE
LOWbukuserver/filters.py194CODE
LOWbukuserver/views.py341CODE
LOWbukuserver/translations/__init__.py52CODE
LOWtests/test_bukuDb.py1330CODE
LOWtests/test_bukuDb.py1563CODE
LOWtests/test_bukuDb.py726CODE
LOWtests/test_cli.py185CODE
LOWtests/test_cli.py221CODE
LOWbukuserver-runner/buku-server.py136CODE
LOWbukuserver-runner/buku-server.py148CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMbuku.py152# Define the default path to ca-certificatesCOMMENT
MEDIUMbuku.py563 # Create a connectionCOMMENT
MEDIUMdocs/source/conf.py7# This file is execfile()d with the current directory set to itsCOMMENT
Over-Commented Block9 hits · 8 pts
SeverityFileLineSnippetContext
LOWbuku.py1#!/usr/bin/env python3COMMENT
LOW.readthedocs.yaml21COMMENT
LOWpackagecore.yaml1name: buku-cliCOMMENT
LOWbukuserver/static/bukuserver/js/Chart.js6361 // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlaysCOMMENT
LOWbukuserver/static/bukuserver/js/Chart.js6381 // |----------------------------------------------------|COMMENT
LOWbukuserver/static/bukuserver/js/Chart.js11401 onHover: null,COMMENT
LOWdocs/source/conf.py1#!/usr/bin/env python3COMMENT
LOWdocs/source/conf.py61# |version| and |release|, also used in various other places throughout theCOMMENT
LOWdocs/source/conf.py81# The name of the Pygments (syntax highlighting) style to use.COMMENT
Unused Imports4 hits · 4 pts
SeverityFileLineSnippetContext
LOWbuku.py19CODE
LOWbukuserver/__init__.py2CODE
LOWbukuserver/__init__.py4CODE
LOWbukuserver/middleware/__init__.py1CODE
AI Structural Patterns5 hits · 3 pts
SeverityFileLineSnippetContext
LOWbuku.py5709CODE
LOWbuku.py776CODE
LOWbuku.py1018CODE
LOWbuku.py1234CODE
LOWtests/test_cli.py115CODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMbukuserver/static/bukuserver/js/Chart.js6357 // Essentially we now have any number of boxes on each of the 4 sides.COMMENT
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWbukuserver/__init__.py18__all__ = ['_', '_p', '_l', '_lp', '_key', 'gettext', 'pgettext', 'ngettext', 'lazy_gettext', 'lazy_pgettext', 'LazyStriCODE
LOWbukuserver/middleware/__init__.py3__all__ = ['ReverseProxyPrefixFix']CODE
Structural Annotation Overuse1 hit · 2 pts
SeverityFileLineSnippetContext
LOWbukuserver/static/bukuserver/js/Chart.js6590 // Step 7 - Position the boxesCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWbukuserver/forms.py33 def process_data(self, value):CODE