Repository Analysis

gnome-terminator/terminator

multiple GNOME terminals in one window

14.3 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of gnome-terminator/terminator, a Python project with 2,636 GitHub stars. SynthScan v2.0 examined 19,271 lines of code across 81 source files, recording 271 pattern matches distributed across 10 syntactic categories. The overall adjusted score of 14.3 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

14.3
Adjusted Score
14.3
Raw Score
100%
Time Factor
2026-08-09
Last Push
2.6K
Stars
Python
Language
19.3K
Lines of Code
81
Files
271
Pattern Hits
2026-08-09
Scan Date
0.05
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 4MEDIUM 12LOW 255

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 271 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers128 hits · 106 pts
SeverityFileLineSnippetContext
LOWtests/test_window_title.py44def test_background_terminal_cannot_override_window_title():CODE
LOWtests/test_prefseditor_keybindings.py21def detect_close_message_dialog(prefs_editor, message_dialog_token):CODE
LOWtests/test_prefseditor_keybindings.py51def test_non_empty_default_keybinding_accels_are_distinct():CODE
LOWtests/test_prefseditor_keybindings.py84def test_message_dialog_is_shown_on_duplicate_accel_assignment(CODE
LOWtests/test_prefseditor_keybindings.py132def test_duplicate_accels_not_possible_to_set(accel_params):CODE
LOWtests/test_prefseditor_keybindings.py222def test_keybinding_edit_produce_expected_accels(CODE
LOWtests/test_prefseditor_keybindings.py271def test_keybinding_successfully_reassigned_after_clearing(accel_params):CODE
LOWterminatorlib/config.py388 def connect_gsetting_callbacks(self):CODE
LOWterminatorlib/config.py445 def on_gsettings_change_event(self, settings, key):CODE
LOWterminatorlib/config.py771 def restore_config_with_suffix(self, suffix):CODE
LOWterminatorlib/config.py790 def remove_config_with_suffix(self, suffix):CODE
LOWterminatorlib/window.py388 def apply_window_decoration_style(self, style):CODE
LOWterminatorlib/window.py823 def deferred_set_rough_geometry_hints(self):CODE
LOWterminatorlib/window.py831 def do_deferred_set_rough_geometry_hints(self):CODE
LOWterminatorlib/terminal.py246 def switch_to_previous_profile(self):CODE
LOWterminatorlib/terminal.py704 def do_autocleangroups_toggle(self):CODE
LOWterminatorlib/terminal.py1454 def ensure_visible_and_focussed(self):CODE
LOWterminatorlib/terminal.py1519 def deferred_on_vte_size_allocate(self, widget, allocation):CODE
LOWterminatorlib/terminal.py1527 def do_deferred_on_vte_size_allocate(self, widget, allocation):CODE
LOWterminatorlib/terminal.py2271 def key_preferences_keybindings(self):CODE
LOWterminatorlib/terminator.py149 def deregister_launcher_window(self, window):CODE
LOWterminatorlib/ipc.py102 def toggle_visibility_cmdline(self,options=dbus.Dictionary):CODE
LOWterminatorlib/ipc.py357def toggle_visibility_cmdline(session,options):CODE
LOWterminatorlib/util.py375def update_config_to_cell_height(filename):CODE
LOWterminatorlib/prefseditor.py895 def on_detachable_tabs_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py899 def on_disable_mousewheel_zoom_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py904 def on_winbordercheck_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py909 def on_extrastylingcheck_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py914 def on_window_decoration_style_combo_changed(self, widget):CODE
LOWterminatorlib/prefseditor.py929 def on_hidefromtaskbcheck_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py934 def on_alwaysontopcheck_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py939 def on_hideonlosefocuscheck_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py949 def on_title_hide_sizetextcheck_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py954 def on_title_at_bottom_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py959 def on_new_tab_after_current_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py964 def on_always_split_with_profile_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py969 def on_allow_bold_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py979 def on_copy_on_selection_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py984 def on_putty_paste_style_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py989 def on_putty_paste_style_source_clipboard_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1001 def on_clear_select_on_copy_toggled(self,widget):CODE
LOWterminatorlib/prefseditor.py1006 def on_disable_mouse_paste_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1016 def on_icon_bell_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1021 def on_visual_bell_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1026 def on_audible_bell_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1031 def on_urgent_bell_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1036 def on_login_shell_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1041 def on_scroll_on_keystroke_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1046 def on_scroll_on_output_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1051 def on_delete_binding_combobox_changed(self, widget):CODE
LOWterminatorlib/prefseditor.py1147 def on_darken_background_scale_value_changed(self, widget):CODE
LOWterminatorlib/prefseditor.py1155 def on_background_blur_checkbutton_toggled(self, widget):CODE
LOWterminatorlib/prefseditor.py1160 def on_palette_combobox_changed(self, widget):CODE
LOWterminatorlib/prefseditor.py1343 def on_custom_url_handler_entry_changed(self, widget):CODE
LOWterminatorlib/prefseditor.py1348 def on_custom_command_entry_changed(self, widget):CODE
LOWterminatorlib/prefseditor.py1353 def on_cursor_color_default_checkbutton_toggled(self, checkbutton):CODE
LOWterminatorlib/prefseditor.py1369 def on_cursor_fg_color_color_set(self, widget):CODE
LOWterminatorlib/prefseditor.py1374 def on_cursor_bg_color_color_set(self, widget):CODE
LOWterminatorlib/prefseditor.py1379 def on_cursor_shape_combobox_changed(self, widget):CODE
LOWterminatorlib/prefseditor.py1391 def on_word_chars_entry_changed(self, widget):CODE
68 more matches not shown…
Excessive Try-Catch Wrapping41 hits · 48 pts
SeverityFileLineSnippetContext
LOWsetup.py61 except Exception as e:CODE
LOWterminatorlib/config.py672 except Exception as ex:CODE
LOWterminatorlib/config.py685 except Exception as ex:CODE
LOWterminatorlib/config.py767 except Exception as ex:CODE
LOWterminatorlib/config.py786 except Exception as ex:CODE
LOWterminatorlib/config.py797 except Exception as ex:CODE
LOWterminatorlib/config.py873 except Exception as ex:CODE
MEDIUMterminatorlib/config.py750def save_config_with_suffix(self, suffix):CODE
MEDIUMterminatorlib/config.py771def restore_config_with_suffix(self, suffix):CODE
MEDIUMterminatorlib/config.py790def remove_config_with_suffix(self, suffix):CODE
LOWterminatorlib/configjson.py126 except Exception as ex:CODE
LOWterminatorlib/configjson.py138 except Exception as ex:CODE
LOWterminatorlib/configjson.py154 except Exception as ex:CODE
MEDIUMterminatorlib/configjson.py111def get_layout(self, layoutjson):CODE
MEDIUMterminatorlib/configjson.py130def get_profile(self, profilejson, baseprofile):CODE
LOWterminatorlib/window.py474 except Exception as e:CODE
LOWterminatorlib/window.py551 except Exception as e:CODE
MEDIUMterminatorlib/terminal.py207def set_background_image(self,image):CODE
LOWterminatorlib/terminal.py213 except Exception as e:CODE
LOWterminatorlib/terminal.py278 except Exception as ex:CODE
LOWterminatorlib/terminal.py433 except Exception as ex:CODE
LOWterminatorlib/terminal.py1768 except Exception as ex:CODE
LOWterminatorlib/ipc.py55 except Exception as e:CODE
LOWterminatorlib/util.py404 except Exception as ex:CODE
LOWterminatorlib/layoutlauncher.py41 except Exception as ex:CODE
LOWterminatorlib/prefseditor.py208 except Exception as ex:CODE
LOWterminatorlib/prefseditor.py231 except Exception as e:CODE
LOWterminatorlib/terminal_popup_menu.py355 except Exception as ex:CODE
LOWterminatorlib/plugin.py115 except Exception as ex:CODE
LOWterminatorlib/plugins/remote.py175 except Exception as e:CODE
LOWterminatorlib/plugins/remote.py212 except Exception as e:CODE
LOWterminatorlib/plugins/remote.py243 except Exception as e:CODE
LOWterminatorlib/plugins/remote.py259 except Exception as e:CODE
LOWterminatorlib/plugins/remote.py388 except Exception as e:CODE
LOWterminatorlib/plugins/remote.py502 except Exception as e:CODE
LOWterminatorlib/plugins/remote.py642 except Exception as e:CODE
MEDIUMterminatorlib/plugins/remote.py499def get_as_bool(config, key):CODE
LOWterminatorlib/plugins/custom_commands.py135 except Exception as ex:CODE
LOWterminatorlib/plugins/run_cmd_on_match.py41 except Exception as e:CODE
LOWterminatorlib/plugins/run_cmd_on_match.py52 except Exception as e:CODE
LOWterminatorlib/plugins/run_cmd_on_match.py63 except Exception as e:CODE
Deep Nesting51 hits · 48 pts
SeverityFileLineSnippetContext
LOWsetup.py41CODE
LOWsetup.py106CODE
LOWterminatorlib/config.py654CODE
LOWterminatorlib/config.py876CODE
LOWterminatorlib/config.py901CODE
LOWterminatorlib/window.py209CODE
LOWterminatorlib/window.py1038CODE
LOWterminatorlib/window.py1124CODE
LOWterminatorlib/terminal.py368CODE
LOWterminatorlib/terminal.py708CODE
LOWterminatorlib/terminal.py1009CODE
LOWterminatorlib/terminal.py1056CODE
LOWterminatorlib/terminal.py1099CODE
LOWterminatorlib/terminal.py1158CODE
LOWterminatorlib/terminal.py1225CODE
LOWterminatorlib/terminal.py1347CODE
LOWterminatorlib/terminal.py1623CODE
LOWterminatorlib/terminal.py1740CODE
LOWterminatorlib/terminator.py216CODE
LOWterminatorlib/terminator.py311CODE
LOWterminatorlib/terminator.py368CODE
LOWterminatorlib/terminator.py546CODE
LOWterminatorlib/ipc.py166CODE
LOWterminatorlib/ipc.py213CODE
LOWterminatorlib/keybindings.py64CODE
LOWterminatorlib/util.py100CODE
LOWterminatorlib/util.py148CODE
LOWterminatorlib/util.py243CODE
LOWterminatorlib/util.py263CODE
LOWterminatorlib/util.py279CODE
LOWterminatorlib/util.py303CODE
LOWterminatorlib/paned.py159CODE
LOWterminatorlib/paned.py202CODE
LOWterminatorlib/paned.py274CODE
LOWterminatorlib/paned.py364CODE
LOWterminatorlib/prefseditor.py258CODE
LOWterminatorlib/prefseditor.py1506CODE
LOWterminatorlib/titlebar.py102CODE
LOWterminatorlib/terminal_popup_menu.py87CODE
LOWterminatorlib/plugin.py72CODE
LOWterminatorlib/notebook.py98CODE
LOWterminatorlib/notebook.py357CODE
LOWterminatorlib/notebook.py527CODE
LOWterminatorlib/plugins/remote.py197CODE
LOWterminatorlib/plugins/remote.py350CODE
LOWterminatorlib/plugins/custom_commands.py176CODE
LOWterminatorlib/plugins/custom_commands.py480CODE
LOWterminatorlib/plugins/custom_commands.py602CODE
LOWterminatorlib/plugins/run_cmd_on_match.py378CODE
LOWterminatorlib/plugins/run_cmd_on_match.py477CODE
LOWterminatorlib/plugins/maven.py44CODE
Unused Imports28 hits · 28 pts
SeverityFileLineSnippetContext
LOWtests/test_signalman.py36CODE
LOWterminatorlib/debugserver.py6CODE
LOWterminatorlib/debugserver.py9CODE
LOWterminatorlib/debugserver.py17CODE
LOWterminatorlib/debugserver.py18CODE
LOWterminatorlib/keybindings.py25CODE
LOWterminatorlib/util.py18CODE
LOWterminatorlib/layoutlauncher.py8CODE
LOWterminatorlib/layoutlauncher.py10CODE
LOWterminatorlib/layoutlauncher.py12CODE
LOWterminatorlib/layoutlauncher.py14CODE
LOWterminatorlib/layoutlauncher.py106CODE
LOWterminatorlib/prefseditor.py11CODE
LOWterminatorlib/plugin.py214CODE
LOWterminatorlib/plugin.py215CODE
LOWterminatorlib/editablelabel.py20CODE
LOWterminatorlib/plugins/command_notify.py21CODE
LOWterminatorlib/plugins/save_user_session_layout.py13CODE
LOWterminatorlib/plugins/save_user_session_layout.py13CODE
LOWterminatorlib/plugins/save_last_session_layout.py11CODE
LOWterminatorlib/plugins/save_last_session_layout.py11CODE
LOWterminatorlib/plugins/custom_commands.py19CODE
LOWterminatorlib/plugins/run_cmd_on_match.py7CODE
LOWterminatorlib/plugins/auto_theme.py18CODE
LOWterminatorlib/plugins/auto_theme.py19CODE
LOWterminatorlib/plugins/mousefree_url_handler.py19CODE
LOWterminatorlib/plugins/mousefree_url_handler.py19CODE
LOWterminatorlib/plugins/mousefree_url_handler.py19CODE
Cross-File Repetition4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHterminatorlib/window.py0handle a keyboard event requesting a terminal resizeSTRING
HIGHterminatorlib/paned.py0handle a keyboard event requesting a terminal resizeSTRING
HIGHterminatorlib/container.py0handle a keyboard event requesting a terminal resizeSTRING
HIGHterminatorlib/notebook.py0handle a keyboard event requesting a terminal resizeSTRING
Over-Commented Block11 hits · 10 pts
SeverityFileLineSnippetContext
LOWterminatorlib/config.py1# TerminatorConfig - layered config classesCOMMENT
LOWterminatorlib/version.py1# TerminatorVersion - version numberCOMMENT
LOWterminatorlib/terminal.py281 dbg('os.kill failed: %s' % ex)COMMENT
LOWterminatorlib/keybindings.py1# Terminator - multiple gnome terminals in one windowCOMMENT
LOWterminatorlib/util.py1# Terminator.util - misc utility functionsCOMMENT
LOWterminatorlib/prefseditor.py81 'custom': 8}COMMENT
LOWterminatorlib/__init__.py1# Terminator - multiple gnome terminals in one windowCOMMENT
LOWterminatorlib/optionparse.py1# Terminator.optionparse - Parse commandline optionsCOMMENT
LOWterminatorlib/translation.py1# Terminator - multiple gnome terminals in one windowCOMMENT
LOWterminatorlib/editablelabel.py1# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtabCOMMENT
LOWterminatorlib/plugins/maven.py1# Copyright (c) 2010 Julien Nicoulaud <julien.nicoulaud@gmail.com>COMMENT
Self-Referential Comments4 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMterminatorlib/terminal.py1028 # Create a new group and assign currently focusedCOMMENT
MEDIUMterminatorlib/terminator.py414 # Create a dummy window/vte and realise it so it has correctSTRING
MEDIUMterminatorlib/prefseditor.py1311 # Create the dialog to choose a custom colorCOMMENT
MEDIUMterminatorlib/plugins/run_cmd_on_match.py23# This class is not useful as is, it needs to be forged through MetaRCOM metaclass to be usefulCOMMENT
AI Slop Vocabulary2 hits · 3 pts
SeverityFileLineSnippetContext
LOWterminatorlib/window.py865 # FIXME: I don't think we should just use whatever font size info is onCOMMENT
LOWterminatorlib/terminal.py2018 # bindings that should be moved to Terminator as they all just callCOMMENT
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMterminatorlib/debugserver.py24CODE
AI Structural Patterns1 hit · 0 pts
SeverityFileLineSnippetContext
LOWterminatorlib/terminal.py1563CODE