AI Slop Code RIsk Monitor

anishathalye/dotbot

A tool that bootstraps your dotfiles ⚡️

14.3 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for anishathalye/dotbot, a Python project with 8,016 GitHub stars. SynthScan examined 6,418 lines of code across 51 source files, recording 88 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 14.3 (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.

14.3
Adjusted Signal
14.3
Raw Pattern Score
100%
Time Factor
2026-07-12
Last Push
8.0K
Stars
Python
Language
6.4K
Lines of Code
51
Files
88
Pattern Hits
2026-10-12
Scan Date
0.02
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 39.3/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 9.6/100 · LOW

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

Agent Over-Engineering Ratio 39.3/100 · MEDIUM

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

PR Review Velocity Impact 53.8/100 · HIGH

Which changes need focused human review? 88 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 1MEDIUM 3LOW 84

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

Hyper-Verbose Identifiers55 hits · 49 pts
SeverityFileLineSnippetContext
LOWtests/test_bin_dotbot.py16def test_find_python_executable(CODE
LOWtests/test_plugins.py30def test_plugin_absolute_path(CODE
LOWtests/test_plugins.py100def test_plugin_command_line_and_config(CODE
LOWtests/test_plugins.py165def test_plugin_multiple_directives(CODE
LOWtests/test_plugins.py195def test_plugin_duplicate_loading(CODE
LOWtests/test_link.py15def test_link_canonicalization(CODE
LOWtests/test_link.py73def test_link_environment_user_expansion_link_name(CODE
LOWtests/test_link.py90def test_link_environment_variable_expansion_target(CODE
LOWtests/test_link.py110def test_link_environment_variable_expansion_target_extended(CODE
LOWtests/test_link.py130def test_link_environment_variable_expansion_link_name(CODE
LOWtests/test_link.py168def test_link_environment_variable_unset(CODE
LOWtests/test_link.py185def test_link_force_leaves_when_nonexistent(CODE
LOWtests/test_link.py208def test_link_force_overwrite_symlink(CODE
LOWtests/test_link.py224def test_link_force_directory(CODE
LOWtests/test_link.py242def test_link_backup_directory(CODE
LOWtests/test_link.py285def test_link_backup_not_created_if_link(CODE
LOWtests/test_link.py302def test_link_backup_created_if_force(CODE
LOWtests/test_link.py323def test_link_backup_error_if_dest_already_exists(CODE
LOWtests/test_link.py429def test_link_backup_relink_force_with_existing_incorrect_symlink(CODE
LOWtests/test_link.py459def test_link_backup_relink_real_file_skips_delete(CODE
LOWtests/test_link.py498def test_link_backup_relink_with_existing_incorrect_symlink_glob(CODE
LOWtests/test_link.py667def test_link_glob_ignore_no_glob_chars(CODE
LOWtests/test_link.py882def test_link_glob_multi_star(CODE
LOWtests/test_link.py998def test_link_glob_single_match(CODE
LOWtests/test_link.py1125def test_link_if_defaults_windows(CODE
LOWtests/test_link.py1203def test_link_no_canonicalize(CODE
LOWtests/test_link.py1320def test_link_relink_leaves_file(CODE
LOWtests/test_link.py1335def test_link_relink_overwrite_symlink(CODE
LOWtests/test_link.py1350def test_link_relink_relative_leaves_file(CODE
LOWtests/test_link.py1382def test_target_is_not_overwritten_by_symlink_trickery(CODE
LOWtests/test_link.py1567def test_symlink_exists_when_hardlink_requested(CODE
LOWtests/test_link.py1594def test_hardlink_already_exists(CODE
LOWtests/test_link.py1619def test_broken_symlink_shows_invalid_link_message(CODE
LOWtests/test_link.py1804def test_link_dry_run_overwrite(CODE
LOWtests/test_link.py1850def test_link_error_creating_link(CODE
LOWtests/test_link.py1892def test_link_error_creating_directory(CODE
LOWtests/test_clean.py32def test_clean_environment_variable_expansion(CODE
LOWtests/test_clean.py185def test_clean_dry_run_recursive(CODE
LOWtests/test_create.py46def test_default_mode_override(CODE
LOWtests/test_shell.py80def test_shell_cli_verbosity_stderr(CODE
LOWtests/test_shell.py94def test_shell_cli_verbosity_stderr_with_explicit_stdout_off(CODE
LOWtests/test_shell.py119def test_shell_cli_verbosity_stderr_with_defaults_stdout_off(CODE
LOWtests/test_shell.py148def test_shell_single_v_verbosity_stdout(CODE
LOWtests/test_shell.py162def test_shell_single_v_verbosity_stderr(CODE
LOWtests/test_shell.py215def test_shell_stdout_disabled_by_default(CODE
LOWtests/test_shell.py235def test_shell_can_override_defaults(CODE
LOWtests/test_shell.py281def test_shell_quiet_enabled_with_description(CODE
LOWtests/test_shell.py309def test_shell_quiet_enabled_without_description(CODE
LOWtests/test_cli.py186def test_plugin_loading_directory(CODE
LOWtests/test_cli.py234def test_disable_builtin_plugins(CODE
LOWtests/test_cli.py249def test_plugin_context_plugin(CODE
LOWtests/test_cli.py271def test_plugin_dispatcher_no_plugins(CODE
LOWtests/test_cli.py294def test_dry_run_unaware_plugin(CODE
LOWtests/test_cli.py317def test_dry_run_aware_plugin(CODE
LOWtests/test_cli.py337def test_dry_run_aware_plugin_no_dry_run(CODE
Unused Imports13 hits · 13 pts
SeverityFileLineSnippetContext
LOWsrc/dotbot/__init__.py1CODE
LOWsrc/dotbot/__init__.py2CODE
LOWsrc/dotbot/__init__.py3CODE
LOWsrc/dotbot/context.py4CODE
LOWsrc/dotbot/context.py4CODE
LOWsrc/dotbot/context.py7CODE
LOWsrc/dotbot/util/__init__.py1CODE
LOWsrc/dotbot/plugins/__init__.py1CODE
LOWsrc/dotbot/plugins/__init__.py2CODE
LOWsrc/dotbot/plugins/__init__.py3CODE
LOWsrc/dotbot/plugins/__init__.py4CODE
LOWsrc/dotbot/messenger/__init__.py1CODE
LOWsrc/dotbot/messenger/__init__.py2CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_bin_dotbot.py26 # Create a link to sh.COMMENT
MEDIUMtests/conftest.py183 # Create an isolated temporary directory from which to operate.COMMENT
MEDIUMtests/test_link.py442 # Create an incorrect symlink at the destination.COMMENT
Modern Structural Boilerplate7 hits · 7 pts
SeverityFileLineSnippetContext
LOWsrc/dotbot/__init__.py5__all__ = ["Plugin", "__version__", "main"]CODE
LOWsrc/dotbot/context.py26 def set_base_directory(self, base_directory: str) -> None:CODE
LOWsrc/dotbot/context.py35 def set_defaults(self, defaults: Dict[str, Any]) -> None:CODE
LOWsrc/dotbot/util/__init__.py3__all__ = ["shell_command"]CODE
LOWsrc/dotbot/plugins/__init__.py6__all__ = ["Clean", "Create", "Link", "Shell"]CODE
LOWsrc/dotbot/messenger/__init__.py4__all__ = ["Level", "Messenger"]CODE
LOWsrc/dotbot/messenger/messenger.py11 def set_level(self, level: Level) -> None:CODE
Deep Nesting5 hits · 5 pts
SeverityFileLineSnippetContext
LOWsrc/dotbot/dispatcher.py53CODE
LOWsrc/dotbot/cli.py108CODE
LOWsrc/dotbot/plugins/link.py31CODE
LOWsrc/dotbot/plugins/link.py289CODE
LOWsrc/dotbot/plugins/clean.py43CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHsrc/dotbot/util/module.py23except TypeError:CODE
Excessive Try-Catch Wrapping3 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/dotbot/dispatcher.py79 except Exception as err: # noqa: BLE001CODE
LOWsrc/dotbot/dispatcher.py106 except Exception as err: # noqa: BLE001CODE
LOWsrc/dotbot/config.py29 except Exception as e:CODE
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/dotbot/util/common.py21 if platform.system() == "Windows":COMMENT