AI Slop Code RIsk Monitor

sabamdarif/termux-desktop

Install a full Linux desktop environment on your Android device with Termux X11 ( VNC optional) and also enable hardware acceleration

34.8 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for sabamdarif/termux-desktop, a Shell project with 2,307 GitHub stars. SynthScan examined 5,732 lines of code across 16 source files, recording 131 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 34.8 (High 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.

34.8
Adjusted Signal
34.8
Raw Pattern Score
100%
Time Factor
2026-10-07
Last Push
2.3K
Stars
Shell
Language
5.7K
Lines of Code
16
Files
131
Pattern Hits
2026-10-12
Scan Date
0.19
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 42.0/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 71.7/100 · HIGH

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

PR Review Velocity Impact 88.7/100 · CRITICAL

Which changes need focused human review? 131 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 3MEDIUM 52LOW 76

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 131 distinct pattern matches across 9 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.

Decorative Section Separators16 hits · 69 pts
SeverityFileLineSnippetContext
MEDIUMother/motd.sh37#==============================================COMMENT
MEDIUMother/motd.sh39#==============================================COMMENT
MEDIUM⚡other/motd.sh52#==============================================COMMENT
MEDIUM⚡other/motd.sh54#==============================================COMMENT
MEDIUM⚡other/motd.sh63#==============================================COMMENT
MEDIUM⚡other/motd.sh65#==============================================COMMENT
MEDIUM⚡other/motd.sh68#==============================================COMMENT
MEDIUM⚡other/motd.sh70#==============================================COMMENT
MEDIUM⚡other/motd.sh84#==============================================COMMENT
MEDIUM⚡other/motd.sh86#==============================================COMMENT
MEDIUM⚡other/motd.sh91#==============================================COMMENT
MEDIUM⚡other/motd.sh93#==============================================COMMENT
MEDIUM⚡other/motd.sh98#==============================================COMMENT
MEDIUM⚡other/motd.sh100#==============================================COMMENT
MEDIUM⚡other/motd.sh104#==============================================COMMENT
MEDIUM⚡other/motd.sh106#==============================================COMMENT
Excessive Try-Catch Wrapping54 hits · 53 pts
SeverityFileLineSnippetContext
MEDIUM⚡add2menu/add2menu.py225 print(f"Error closing log file: {e}")CODE
MEDIUM⚡add2menu/add2menu.py1248 print(f"Error processing {filepath}: {str(e)}")CODE
MEDIUM⚡add2menu/add2menu.py1250 print(f"Error listing desktop files with sudo: {result.stderr}")CODE
MEDIUM⚡add2menu/add2menu.py1255 print(f"Error running sudo command: {e}")CODE
MEDIUM⚡add2menu/add2menu.py1336 print(f"Error reading desktop file with sudo: {cmd_result.stderr}")CODE
MEDIUM⚡add2menu/add2menu.py1343 print(f"Error parsing desktop file with sudo {filepath}: {e}")CODE
MEDIUMadd2menu/add2menu.py130 print(f"Error closing log file: {e}")CODE
MEDIUMadd2menu/add2menu.py189 print(f"Error writing to log file: {e}")CODE
MEDIUMadd2menu/add2menu.py590 print(f"Error reading configuration: {e}")CODE
MEDIUMadd2menu/add2menu.py1018 print(f"Error processing added file {filepath}: {str(e)}")CODE
MEDIUMadd2menu/add2menu.py1198 print(f"Error processing {filepath}: {str(e)}")CODE
MEDIUMadd2menu/add2menu.py1371 print(f"Error reading symlink with sudo: {e}")CODE
MEDIUMadd2menu/add2menu.py1431 print(f"Error parsing desktop file {filepath}: {e}")CODE
MEDIUMadd2menu/add2menu.py1627 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1657 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1679 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1702 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1729 print(f"Error getting icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1760 print(f"Error getting fallback icon path: {e}")CODE
MEDIUMadd2menu/add2menu.py1970 print(f"Error copying desktop file with sudo: {e}")CODE
MEDIUMadd2menu/add2menu.py2119 print(f"Error running {' '.join(full_cmd)}: {e}")CODE
MEDIUMadd2menu/add2menu.py2596 print(f"Error processing {filepath}: {str(e)}")CODE
MEDIUMadd2menu/add2menu.py2702 print(f"Error reading gtkrc: {e}")CODE
MEDIUMadd2menu/add2menu.py2716 print(f"Error reading gtk3 settings: {e}")CODE
MEDIUMadd2menu/add2menu.py2744 print(f"Error loading icon '{icon_name}' from theme: {e}")CODE
MEDIUMadd2menu/add2menu.py2757 print(f"Error setting icon for '{icon_name}': {e}")CODE
LOW⚡add2menu/add2menu.py224 except Exception as e:CODE
LOW⚡add2menu/add2menu.py291 except Exception as e:CODE
LOW⚡add2menu/add2menu.py1247 except Exception as e:CODE
LOW⚡add2menu/add2menu.py1254 except Exception as e:CODE
LOW⚡add2menu/add2menu.py1342 except Exception as e:CODE
LOWadd2menu/add2menu.py129 except Exception as e:CODE
LOWadd2menu/add2menu.py188 except Exception as e:CODE
LOWadd2menu/add2menu.py589 except Exception as e:CODE
LOWadd2menu/add2menu.py981 except Exception as e:CODE
LOWadd2menu/add2menu.py1017 except Exception as e:CODE
LOWadd2menu/add2menu.py1197 except Exception as e:CODE
LOWadd2menu/add2menu.py1430 except Exception as e:CODE
LOWadd2menu/add2menu.py1625 except Exception as e:CODE
LOWadd2menu/add2menu.py1655 except Exception as e:CODE
LOWadd2menu/add2menu.py1677 except Exception as e:CODE
LOWadd2menu/add2menu.py1700 except Exception as e:CODE
LOWadd2menu/add2menu.py1727 except Exception as e:CODE
LOWadd2menu/add2menu.py1758 except Exception as e:CODE
LOWadd2menu/add2menu.py1969 except Exception as e:CODE
LOWadd2menu/add2menu.py2118 except Exception as e:CODE
LOWadd2menu/add2menu.py2357 except Exception as e:CODE
LOWadd2menu/add2menu.py2387 except Exception as e:CODE
LOWadd2menu/add2menu.py2595 except Exception as e:CODE
LOWadd2menu/add2menu.py2701 except Exception as e:CODE
LOWadd2menu/add2menu.py2715 except Exception as e:CODE
LOWadd2menu/add2menu.py2743 except Exception as e:CODE
LOWadd2menu/add2menu.py2756 except Exception as e:CODE
LOWadd2menu/add2menu.py2854 except Exception as e:CODE
Self-Referential Comments10 hits · 28 pts
SeverityFileLineSnippetContext
MEDIUM⚡add2menu/add2menu.py230 # Create a file chooser dialogCOMMENT
MEDIUM⚡add2menu/add2menu.py2919 # Create the log window if it doesn't exist, but don't show it yetCOMMENT
MEDIUMadd2menu/add2menu.py70 # Create a scrolled window for the text viewCOMMENT
MEDIUMadd2menu/add2menu.py75 # Create a text view with monospace font for terminal-like appearanceCOMMENT
MEDIUMadd2menu/add2menu.py143 # Create a CSS provider for custom stylingCOMMENT
MEDIUMadd2menu/add2menu.py970 # Create a new threadCOMMENT
MEDIUMadd2menu/add2menu.py2372 # Create a GIO input stream for readingCOMMENT
MEDIUMadd2menu/add2menu.py2509 # Create a new list to store filtered resultsCOMMENT
MEDIUMadd2menu/add2menu.py706 # Create a properly integrated headerbarSTRING
MEDIUMadd2menu/add2menu.py916 # Create the column with our play buttonSTRING
Redundant / Tautological Comments17 hits · 16 pts
SeverityFileLineSnippetContext
LOW⚡add2menu/add2menu.py275 # Open the file for appending (we want to keep writing to it)COMMENT
LOW⚡add2menu/add2menu.py282 # Set flag to continue logging to this fileCOMMENT
LOW⚡add2menu/add2menu.py1459 # Check if it's a path within the distroCOMMENT
LOW⚡add2menu/add2menu.py1465 # Check if file exists, using sudo for chroot if neededCOMMENT
LOWadd2menu/add2menu.py44# Set this to True to debug icon issuesCOMMENT
LOWadd2menu/add2menu.py1304 # Check if the resolved file exists using sudoCOMMENT
LOWadd2menu/add2menu.py1407 # Check if the resolved file existsCOMMENT
LOWadd2menu/add2menu.py1612 # Check if the icon exists in the themeCOMMENT
LOWadd2menu/add2menu.py2049 # Check if there's a manual override for this fileCOMMENT
LOWadd2menu/add2menu.py2208 # Check if the click was on the play button column (last column)COMMENT
LOWadd2menu/add2menu.py2225 # Check if the click was on the checkbox columnCOMMENT
LOWadd2menu/add2menu.py2262 # Check if we're in remove modeCOMMENT
LOWadd2menu/add2menu.py2319 # Check if app launch logging is enabledCOMMENT
LOWadd2menu/add2menu.py2397 # Check if the first part is already an absolute pathCOMMENT
LOWadd2menu/add2menu.py2553 # Check if the app matches the search queryCOMMENT
LOWadd2menu/add2menu.py2581 # Check if the item was previously selectedCOMMENT
LOWadd2menu/add2menu.py2690 # Check if there's a .gtkrc-2.0 file in the home directoryCOMMENT
Empty Error Handlers3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHadd2menu/add2menu.py2751except:CODE
HIGHadd2menu/add2menu.py193except:CODE
HIGHadd2menu/add2menu.py296except:CODE
Hyper-Verbose Identifiers14 hits · 7 pts
SeverityFileLineSnippetContext
LOW⚡add2menu/add2menu.py2904 def on_show_added_apps_toggled(self, action, value):CODE
LOW⚡add2menu/add2menu.py2914 def on_show_app_launch_log_toggled(self, action, value):CODE
LOWadd2menu/add2menu.py984 def _complete_background_task(self, result):CODE
LOWadd2menu/add2menu.py1211 def list_desktop_files_with_sudo(self, directory):CODE
LOWadd2menu/add2menu.py1269 def parse_desktop_file_with_sudo(self, filepath):CODE
LOWadd2menu/add2menu.py1944 def copy_desktop_file_with_sudo(self, source_path, dest_path):CODE
LOWadd2menu/add2menu.py2040 def read_and_modify_desktop_file(self, filepath):CODE
LOWadd2menu/add2menu.py2062 def process_remove_applications(self, selected):CODE
LOWadd2menu/add2menu.py2086 def _run_command_if_available(self, cmd_parts, description=""):CODE
LOWadd2menu/add2menu.py2182 def play_button_visibility_func(self, column, cell, model, iter, data):CODE
LOWadd2menu/add2menu.py2234 def highlight_row_temporarily(self, treeview, path):CODE
LOWadd2menu/add2menu.py2681 def detect_current_icon_theme(self):CODE
LOWadd2menu/add2menu.py2932 def on_edit_manually_activated(self, action, param):CODE
LOWadd2menu/add2menu.py511 def read_termux_desktop_config(self):STRING
Deep Nesting14 hits · 7 pts
SeverityFileLineSnippetContext
LOWadd2menu/add2menu.py215CODE
LOWadd2menu/add2menu.py511CODE
LOWadd2menu/add2menu.py1000CODE
LOWadd2menu/add2menu.py1057CODE
LOWadd2menu/add2menu.py1163CODE
LOWadd2menu/add2menu.py1211CODE
LOWadd2menu/add2menu.py1269CODE
LOWadd2menu/add2menu.py1374CODE
LOWadd2menu/add2menu.py1436CODE
LOWadd2menu/add2menu.py1608CODE
LOWadd2menu/add2menu.py2256CODE
LOWadd2menu/add2menu.py2420CODE
LOWadd2menu/add2menu.py2483CODE
LOWadd2menu/add2menu.py2681CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOW⚡add2menu/add2menu.py1452 # For full path icons, just return as is if they existCOMMENT
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWadd2menu/add2menu.py1#!/data/data/com.termux/files/usr/bin/env python3COMMENT
LOWother/motd.sh1#!/data/data/com.termux/files/usr/bin/bashCOMMENT