AI Slop Code RIsk Monitor

sissbruecker/linkding

Self-hosted bookmark manager that is designed be to be minimal, fast, and easy to set up using Docker.

19.8 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for sissbruecker/linkding, a Python project with 11,290 GitHub stars. SynthScan examined 58,404 lines of code across 336 source files, recording 1254 pattern matches distributed across 12 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-01
Last Push
11.3K
Stars
Python
Language
58.4K
Lines of Code
336
Files
1.3K
Pattern Hits
2026-10-12
Scan Date
0.03
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 59.0/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 2.9/100 · LOW

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

Agent Over-Engineering Ratio 60.0/100 · HIGH

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

PR Review Velocity Impact 68.1/100 · HIGH

Which changes need focused human review? 1254 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 2HIGH 9MEDIUM 9LOW 1234

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 1254 distinct pattern matches across 12 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 Identifiers1150 hits · 977 pts
SeverityFileLineSnippetContext
LOWbookmarks/admin.py145 def delete_selected_bookmarks(self, request, queryset: QuerySet):CODE
LOWbookmarks/admin.py160 def archive_selected_bookmarks(self, request, queryset: QuerySet):CODE
LOWbookmarks/admin.py175 def unarchive_selected_bookmarks(self, request, queryset: QuerySet):CODE
LOWbookmarks/queries.py139def _filter_search_query_legacy(CODE
LOWbookmarks/queries.py322def query_archived_bookmark_tags(CODE
LOWbookmarks/queries.py332def query_shared_bookmark_tags(CODE
LOWbookmarks/queries.py345def query_shared_bookmark_users(CODE
LOWbookmarks/queries.py372def get_shared_tags_for_query(CODE
LOWbookmarks/tests_e2e/e2e_test_bundle_preview.py8 def test_update_preview_on_filter_changes(self):CODE
LOWbookmarks/tests_e2e/e2e_test_dropdown.py20 def test_click_toggle_opens_and_closes_dropdown(self):CODE
LOWbookmarks/tests_e2e/e2e_test_dropdown.py34 def test_outside_click_closes_dropdown(self):CODE
LOWbookmarks/tests_e2e/e2e_test_dropdown.py48 def test_escape_closes_dropdown_and_restores_focus(self):CODE
LOWbookmarks/tests_e2e/e2e_test_dropdown.py67 def test_focus_out_closes_dropdown(self):CODE
LOWbookmarks/tests_e2e/e2e_test_dropdown.py83 def test_aria_expanded_attribute(self):CODE
LOWbookmarks/tests_e2e/e2e_test_settings_general.py9 def test_should_only_enable_public_sharing_if_sharing_is_enabled(self):CODE
LOWbookmarks/tests_e2e/e2e_test_settings_general.py56 def test_should_not_show_bookmark_description_max_lines_when_display_inline(self):CODE
LOWbookmarks/tests_e2e/e2e_test_settings_general.py68 def test_should_show_bookmark_description_max_lines_when_display_separate(self):CODE
LOWbookmarks/tests_e2e/e2e_test_settings_general.py80 def test_should_update_bookmark_description_max_lines_when_changing_display(self):CODE
LOWbookmarks/tests_e2e/e2e_test_filter_drawer.py8 def test_show_modal_close_modal(self):CODE
LOWbookmarks/tests_e2e/e2e_test_edit_bookmark_form.py29 def test_should_not_check_for_existing_bookmark(self):CODE
LOWbookmarks/tests_e2e/e2e_test_edit_bookmark_form.py37 def test_should_not_prefill_title_and_description(self):CODE
LOWbookmarks/tests_e2e/e2e_test_edit_bookmark_form.py50 def test_enter_url_should_not_prefill_title_and_description(self):CODE
LOWbookmarks/tests_e2e/e2e_test_edit_bookmark_form.py63 def test_refresh_button_should_be_visible_when_editing(self):CODE
LOWbookmarks/tests_e2e/e2e_test_collapse_side_panel.py23 def test_side_panel_should_be_visible_by_default(self):CODE
LOWbookmarks/tests_e2e/e2e_test_collapse_side_panel.py33 def test_side_panel_should_be_hidden_when_collapsed(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py36 def test_active_bookmarks_bulk_select_across(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py73 def test_archived_bookmarks_bulk_select_across(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py110 def test_active_bookmarks_bulk_select_across_respects_query(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py147 def test_archived_bookmarks_bulk_select_across_respects_query(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py184 def test_select_all_toggles_all_checkboxes(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py207 def test_select_all_shows_select_across(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py223 def test_select_across_is_unchecked_when_toggling_all(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py244 def test_select_across_is_unchecked_when_toggling_bookmark(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py265 def test_execute_resets_all_checkboxes(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py296 def test_update_select_across_bookmark_count(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py323 def test_execute_button_is_disabled_when_no_bookmarks_selected(self):CODE
LOWbookmarks/tests_e2e/e2e_test_bookmark_item.py11 def test_toggle_notes_should_show_hide_notes(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py31 def test_enter_url_prefills_title_and_description(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py43 def test_enter_url_does_not_overwrite_modified_title_and_description(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py57 def test_with_initial_url_prefills_title_and_description(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py74 def test_with_initial_url_title_description_does_not_overwrite_title_and_description(CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py92 def test_create_should_check_for_existing_bookmark(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py129 def test_enter_url_of_existing_bookmark_should_show_notes(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py142 def test_create_should_preview_auto_tags(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py163 def test_clear_buttons_only_shown_when_fields_have_content(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py193 def test_refresh_button_only_shown_for_existing_bookmarks(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py220 def test_refresh_from_website_button_updates_title_and_description(self):CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py261 def test_refresh_from_website_button_does_not_modify_fields_if_metadata_is_same(CODE
LOWbookmarks/tests_e2e/e2e_test_new_bookmark_form.py303 def test_ctrl_enter_submits_form_from_description(self):CODE
LOWbookmarks/tests_e2e/e2e_test_a11y_navigation_focus.py8 def test_initial_page_load_focus(self):CODE
LOWbookmarks/tests_e2e/e2e_test_a11y_navigation_focus.py30 def test_page_navigation_focus(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py40 def test_partial_update_respects_query(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py52 def test_partial_update_respects_sort(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py66 def test_partial_update_respects_page(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py82 def test_multiple_partial_updates(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py101 def test_active_bookmarks_partial_update_on_archive(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py112 def test_active_bookmarks_partial_update_on_delete(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py124 def test_active_bookmarks_partial_update_on_mark_as_read(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py139 def test_active_bookmarks_partial_update_on_unshare(self):CODE
LOW…ks/tests_e2e/e2e_test_bookmark_page_partial_updates.py154 def test_active_bookmarks_partial_update_on_bulk_archive(self):CODE
1090 more matches not shown…
Empty Error Handlers9 hits · 45 pts
SeverityFileLineSnippetContext
HIGHbookmarks/models.py164except Exception:CODE
HIGHbookmarks/utils.py122except (OverflowError, ValueError, OSError):CODE
HIGHbookmarks/utils.py129except (OverflowError, ValueError, OSError):CODE
HIGHbookmarks/utils.py136except (OverflowError, ValueError, OSError):CODE
HIGHbookmarks/views/settings.py150except requests.exceptions.RequestException:CODE
HIGHbookmarks/services/website_loader.py85except Exception:CODE
HIGHbookmarks/services/website_loader.py165except http_client.RequestException:CODE
HIGHbookmarks/services/website_loader.py181except http_client.RequestException:CODE
HIGHbookmarks/services/http_client.py144except ValueError:CODE
Self-Referential Comments9 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMbookmarks/settings/base.py286 # Creating a connection loads the ICU extension into the SQLiteCOMMENT
MEDIUM⚡bookmarks/tests/test_assets_service.py611 # Create a bookmark with an existing latest_snapshotCOMMENT
MEDIUM⚡bookmarks/tests/test_assets_service.py617 # Create a new snapshot asset that will failCOMMENT
MEDIUMbookmarks/tests/test_assets_service.py152 # Create a bookmark with a very long URLCOMMENT
MEDIUMbookmarks/tests/test_assets_service.py437 # Create a bookmark with a very long URLCOMMENT
MEDIUMbookmarks/tests/test_assets_service.py525 # Create a bookmark with a very long URLCOMMENT
MEDIUMbookmarks/tests/test_assets_service.py635 # Create a bookmark with an existing latest_snapshotCOMMENT
MEDIUMbookmarks/tests/test_assets_service.py654 # Create a bookmark with multiple snapshotsCOMMENT
MEDIUMbookmarks/tests/test_assets_service.py714 # Create a bookmark with multiple snapshotsCOMMENT
Excessive Try-Catch Wrapping22 hits · 23 pts
SeverityFileLineSnippetContext
LOWbookmarks/models.py123 except Exception as error:CODE
LOWbookmarks/models.py164 except Exception:CODE
LOWbookmarks/models.py179 except Exception as error:CODE
LOWbookmarks/middlewares.py33 except Exception:CODE
LOWbookmarks/utils.py16except Exception as exc:CODE
LOWbookmarks/management/commands/migrate_tasks.py57 except Exception:CODE
LOWbookmarks/management/commands/migrate_tasks.py71 except Exception:CODE
LOWbookmarks/api/routes.py121 except Exception as e:CODE
LOWbookmarks/api/routes.py200 except Exception as e:CODE
LOWbookmarks/api/routes.py226 except Exception as e:CODE
LOWbookmarks/views/health.py13 except Exception:CODE
LOWbookmarks/views/settings.py266 except Exception:CODE
LOWbookmarks/views/settings.py295 except Exception:CODE
LOWbookmarks/services/website_loader.py85 except Exception:CODE
LOW⚡bookmarks/services/tasks.py34 except Exception as exc:CODE
LOW⚡bookmarks/services/tasks.py345 except Exception as error:CODE
LOWbookmarks/services/tasks.py217 except Exception as exc:CODE
LOWbookmarks/services/importer.py69 except Exception:CODE
LOWbookmarks/services/importer.py195 except Exception:CODE
LOWbookmarks/services/assets.py53 except Exception as error:CODE
LOWbookmarks/services/assets.py219 except Exception as e:CODE
LOWbookmarks/services/bookmarks.py237 except Exception as e:CODE
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALbookmarks/queries.py5from django.core.exceptions import ValidationErrorCODE
CRITICALbookmarks/tests/test_bookmark_validation.py3from django.core.exceptions import ValidationErrorCODE
Deep Nesting18 hits · 18 pts
SeverityFileLineSnippetContext
LOWbookmarks/utils.py83CODE
LOWbookmarks/queries.py60CODE
LOWbookmarks/queries.py227CODE
LOWbookmarks/tests_e2e/helpers.py32CODE
LOWbookmarks/tests/test_tag_cloud_template.py33CODE
LOWbookmarks/management/commands/full_backup.py15CODE
LOWbookmarks/views/tags.py113CODE
LOWbookmarks/services/assets.py92CODE
LOWbookmarks/services/assets.py176CODE
LOWbookmarks/services/search_query_parser.py353CODE
LOWbookmarks/services/search_query_parser.py419CODE
LOWbookmarks/services/search_query_parser.py511CODE
LOWbookmarks/services/search_query_parser.py59CODE
LOWbookmarks/services/search_query_parser.py126CODE
LOWbookmarks/services/search_query_parser.py303CODE
LOWbookmarks/services/favicon_loader.py60CODE
LOWbookmarks/services/bookmarks.py226CODE
LOWbookmarks/services/preview_image_loader.py26CODE
Modern Structural Boilerplate17 hits · 17 pts
SeverityFileLineSnippetContext
LOWbookmarks/models.py18logger = logging.getLogger(__name__)CODE
LOWbookmarks/middlewares.py12logger = logging.getLogger(__name__)CODE
LOWbookmarks/management/commands/enable_wal.py7logger = logging.getLogger(__name__)CODE
LOW…kmarks/management/commands/create_initial_superuser.py7logger = logging.getLogger(__name__)CODE
LOWbookmarks/management/commands/generate_secret_key.py7logger = logging.getLogger(__name__)CODE
LOWbookmarks/api/routes.py31logger = logging.getLogger(__name__)CODE
LOWbookmarks/views/settings.py28logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/tags.py10logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/singlefile.py14logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/website_loader.py12logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/tasks.py17logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/importer.py12logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/http_client.py54logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/assets.py23logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/favicon_loader.py14logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/bookmarks.py9logger = logging.getLogger(__name__)CODE
LOWbookmarks/services/preview_image_loader.py11logger = logging.getLogger(__name__)CODE
AI Structural Patterns10 hits · 10 pts
SeverityFileLineSnippetContext
LOWbookmarks/models.py262CODE
LOWbookmarks/middlewares.py49CODE
LOWbookmarks/templatetags/shared.py74CODE
LOWbookmarks/templatetags/shared.py93CODE
LOWbookmarks/tests/helpers.py54CODE
LOWbookmarks/tests/helpers.py105CODE
LOWbookmarks/tests/helpers.py174CODE
LOWbookmarks/tests/helpers.py205CODE
LOWbookmarks/tests/helpers.py414CODE
LOWbookmarks/views/turbo.py26CODE
Unused Imports8 hits · 8 pts
SeverityFileLineSnippetContext
LOWbookmarks/tasks.py3CODE
LOWbookmarks/apps.py10CODE
LOWbookmarks/settings/__init__.py4CODE
LOWbookmarks/settings/__init__.py6CODE
LOWbookmarks/settings/dev.py9CODE
LOWbookmarks/settings/dev.py66CODE
LOWbookmarks/settings/prod.py12CODE
LOWbookmarks/settings/prod.py63CODE
Fake / Example Data5 hits · 6 pts
SeverityFileLineSnippetContext
LOWbookmarks/tests/test_auth_proxy_support.py21 "auth_proxy_user", "user@example.com", "password123"CODE
LOW⚡bookmarks/tests/test_auth_proxy_support.py43 "auth_proxy_user", "user@example.com", "password123"CODE
LOW⚡bookmarks/tests/test_auth_proxy_support.py53 "auth_proxy_user", "user@example.com", "password123"CODE
LOWbookmarks/tests/helpers.py281 user = User.objects.create_user(name, "user@example.com", "password123")CODE
LOW…environments/authelia-oidc/authelia/users_database.yml14 email: 'admin@example.com'CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWbookmarks/tests_e2e/helpers.py42 # Check if THIS test is in failures/errors (not just any test)COMMENT
LOWbookmarks/management/commands/migrate_tasks.py15 # Check if background_task table existsCOMMENT
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWinstall-linkding.sh1#!/usr/bin/env bashCOMMENT
LOWdocs/src/env.d.ts1/// <reference path="../.astro/types.d.ts" />COMMENT