AI Slop Code RIsk Monitor

chriskiehl/Gooey

Turn (almost) any Python command line program into a full GUI application with one line

15.9 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for chriskiehl/Gooey, a Python project with 21,898 GitHub stars. SynthScan examined 19,158 lines of code across 212 source files, recording 296 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 15.9 (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.

15.9
Adjusted Signal
15.9
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
21.9K
Stars
Python
Language
19.2K
Lines of Code
212
Files
296
Pattern Hits
2026-10-12
Scan Date
0.01
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 21.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 39.0/100 · MEDIUM

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

Agent Over-Engineering Ratio 16.8/100 · LOW

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

PR Review Velocity Impact 56.3/100 · HIGH

Which changes need focused human review? 296 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

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

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

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 3LOW 290

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 296 distinct pattern matches across 11 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.

Unused Imports180 hits · 172 pts
SeverityFileLineSnippetContext
LOWsetup.py2CODE
LOWgooey/__init__.py1CODE
LOWgooey/__init__.py2CODE
LOWgooey/__init__.py3CODE
LOWgooey/__init__.py4CODE
LOWgooey/__init__.py5CODE
LOWgooey/__init__.py6CODE
LOWgooey/__init__.py7CODE
LOWgooey/__init__.py8CODE
LOWgooey/util/functional.py6CODE
LOWgooey/tests/test_filterable_dropdown.py2CODE
LOWgooey/tests/test_filterable_dropdown.py4CODE
LOWgooey/tests/test_filterable_dropdown.py6CODE
LOWgooey/tests/test_slider.py2CODE
LOWgooey/tests/test_slider.py6CODE
LOWgooey/tests/test_time_remaining.py1CODE
LOWgooey/tests/test_time_remaining.py4CODE
LOWgooey/tests/test_time_remaining.py9CODE
LOWgooey/tests/test_config_generator.py6CODE
LOWgooey/tests/test_common.py6CODE
LOWgooey/tests/harness.py3CODE
LOWgooey/tests/harness.py4CODE
LOWgooey/tests/harness.py12CODE
LOWgooey/tests/tmmmmp.py1CODE
LOWgooey/tests/test_radiogroup.py4CODE
LOWgooey/tests/test_textarea.py5CODE
LOWgooey/tests/test_control.py1CODE
LOWgooey/tests/test_control.py4CODE
LOWgooey/tests/test_control.py5CODE
LOWgooey/tests/test_control.py6CODE
LOWgooey/tests/test_control.py7CODE
LOWgooey/tests/test_control.py9CODE
LOWgooey/tests/test_control.py12CODE
LOWgooey/tests/test_control.py15CODE
LOWgooey/tests/test_control.py16CODE
LOWgooey/tests/test_control.py16CODE
LOWgooey/tests/test_control.py25CODE
LOWgooey/tests/test_util.py1CODE
LOWgooey/tests/test_util.py4CODE
LOWgooey/tests/test_textfield.py6CODE
LOWgooey/tests/test_constraints.py4CODE
LOWgooey/tests/test_decoration.py1CODE
LOWgooey/tests/test_decoration.py2CODE
LOWgooey/tests/test_decoration.py3CODE
LOWgooey/tests/test_decoration.py5CODE
LOWgooey/tests/test_cmd_args.py6CODE
LOWgooey/tests/test_chooser_results.py1CODE
LOWgooey/tests/test_chooser_results.py6CODE
LOWgooey/tests/test_dropdown.py2CODE
LOWgooey/tests/test_dropdown.py3CODE
LOWgooey/tests/test_dropdown.py7CODE
LOWgooey/tests/test_numeric_inputs.py2CODE
LOWgooey/tests/test_numeric_inputs.py3CODE
LOWgooey/tests/test_numeric_inputs.py7CODE
LOWgooey/tests/test_password.py5CODE
LOWgooey/tests/test_parent_inheritance.py5CODE
LOWgooey/tests/test_header.py3CODE
LOWgooey/tests/test_header.py6CODE
LOWgooey/tests/test_checkbox.py5CODE
LOWgooey/tests/test_application.py1CODE
120 more matches not shown…
Hyper-Verbose Identifiers50 hits · 48 pts
SeverityFileLineSnippetContext
LOWgooey/tests/test_filterable_dropdown.py33 def test_arrow_key_selection_cycling(self):CODE
LOWgooey/tests/test_time_remaining.py19 def test_time_remaining_visibility(self):CODE
LOWgooey/tests/test_time_remaining.py34 def test_time_remaining_visibility_on_complete(self):CODE
LOWgooey/tests/test_config_generator.py44 def test_font_weight_defaults_to_normal(self):CODE
LOWgooey/tests/test_config_generator.py51 def test_invalid_font_weights_throw_error(self):CODE
LOWgooey/tests/test_options.py39 def test_only_provided_arguments_included(self):CODE
LOWgooey/tests/test_radiogroup.py22 def test_initial_selection_options(self):CODE
LOWgooey/tests/test_radiogroup.py76 def test_optional_radiogroup_click_behavior(self):CODE
LOWgooey/tests/test_radiogroup.py113 def click_scenarios_optional_widget(self):CODE
LOWgooey/tests/test_radiogroup.py144 def click_scenarios_required_widget(self):CODE
LOWgooey/tests/test_radiogroup.py172 def click_scenarios_initial_selection(self):CODE
LOWgooey/tests/test_constraints.py39 def test_visibility_constraint(self):CODE
LOWgooey/tests/test_cmd_args.py22 def test_required_not_enforced(self):CODE
LOWgooey/tests/test_parent_inheritance.py9 def test_parent_arguments_exist_in_child(self):CODE
LOWgooey/tests/test_parent_inheritance.py30 def test_parent_arguments_are_not_overridden(self):CODE
LOWgooey/tests/test_parent_inheritance.py55 def test_duplicates_on_same_parser_are_ignored(self):CODE
LOWgooey/tests/test_parent_inheritance.py76 def _verify_duplicate_parameters(self, action1, action2, parser):CODE
LOWgooey/tests/test_argparse_to_json.py16 def test_mutex_groups_conversion(self):CODE
LOWgooey/tests/test_argparse_to_json.py43 def test_json_iterable_conversion(self):CODE
LOWgooey/tests/test_argparse_to_json.py67 def test_choice_string_cooersion(self):CODE
LOWgooey/tests/test_argparse_to_json.py79 def test_choice_string_cooersion_no_default(self):CODE
LOWgooey/tests/test_argparse_to_json.py92 def test_listbox_defaults_cast_correctly(self):CODE
LOWgooey/tests/test_argparse_to_json.py106 def test_listbox_single_default_cast_correctly(self):CODE
LOWgooey/tests/test_argparse_to_json.py119 def test_non_data_defaults_are_dropped_entirely(self):CODE
LOWgooey/tests/test_argparse_to_json.py145 def test_suppress_is_removed_as_default_value(self):CODE
LOWgooey/tests/test_argparse_to_json.py161 def test_version_maps_to_checkbox(self):CODE
LOWgooey/tests/test_argparse_to_json.py181 def test_textinput_with_list_default_mapped_to_cli_friendly_value(self):CODE
LOWgooey/tests/test_argparse_to_json.py267 def test_filetype_chooses_good_widget(self):CODE
LOWgooey/tests/test_formatters.py47 def test_multifilechooser_formatter(self):CODE
LOWgooey/tests/dynamics/test_live_updates.py43 def test_validate_form_without_errors(self):CODE
LOWgooey/tests/processor/test_processor.py27 def test_extract_progress_returns_none_if_no_regex_supplied(self):CODE
LOWgooey/tests/processor/test_processor.py32 def test_extract_progress_returns_none_if_no_match_found(self):CODE
LOWgooey/tests/processor/test_processor.py43 def test_eval_progress_returns_none_on_failure(self):CODE
LOWgooey/tests/processor/test_processor.py51 def test_all_interrupts_halt_process(self):CODE
LOWgooey/tests/processor/test_processor.py87 def test_ignore_sigint_family_signals(self):CODE
LOWgooey/python_bindings/argparse_to_json.py150def assert_subparser_constraints(parser):CODE
LOWgooey/python_bindings/argparse_to_json.py571def textinput_with_nargs_and_list_default(action, widget):CODE
LOWgooey/python_bindings/gooey_parser.py37 def add_mutually_exclusive_group(self, *args, **kwargs):CODE
LOWgooey/python_bindings/gooey_parser.py118 def _mutually_exclusive_groups(self):CODE
LOWgooey/python_bindings/gooey_parser.py162 def add_mutually_exclusive_group(self, *args, **kwargs):CODE
LOWgooey/python_bindings/types.py359 def getOrThrow(self):CODE
LOWgooey/python_bindings/types.py377 def getOrThrow(self):CODE
LOWgooey/python_bindings/constraints.py25def assert_visibility_requirements(action, options):CODE
LOWgooey/python_bindings/constraints.py42def assert_listbox_constraints(widget, **kwargs):CODE
LOWgooey/python_bindings/cmd_args.py59 def restore_original_configuration(item):CODE
LOWgooey/python_bindings/dynamics.py155def recursively_patch_actions(parser, fn):STRING
LOWgooey/python_bindings/dynamics.py265def monkey_patch_for_form_validation(error_registry: Dict[str, Exception], parser):STRING
LOWgooey/gui/components/options/options.py14def _include_global_option_docs(f):CODE
LOWgooey/gui/components/options/options.py24def _include_chooser_msg_wildcard_docs(f):STRING
LOWgooey/gui/components/options/options.py36def _include_choose_dir_file_docs(f):STRING
Fake / Example Data17 hits · 17 pts
SeverityFileLineSnippetContext
LOWREADME.md550 <p><font color="red">Lorem ipsum dolor sit amet, consectetur</font></p>CODE
LOWREADME.md550 <p><font color="red">Lorem ipsum dolor sit amet, consectetur</font></p>CODE
LOWdocs/releases/1.0.6-release-notes.md18 'placeholder': 'Start typing to view suggestions',CODE
LOWdocs/releases/1.0.7-release-notes.md31 'placeholder': 'Type some text here!'CODE
LOWdocs/releases/1.0.7-release-notes.md49 'placeholder': 'Type some text here!',CODE
LOWdocs/releases/1.0.5-release-notes.md29 'placeholder': 'Type something!'CODE
LOWgooey/tests/test_textarea.py18 [{'placeholder': 'Hello'}, 'Hello']CODE
LOWgooey/tests/test_textfield.py21 [{'placeholder': 'Hello'}, 'Hello']CODE
LOWgooey/tests/test_password.py18 [{'placeholder': 'Hello'}, 'Hello']CODE
LOWgooey/gui/components/options/validators.py144 'placeholder': non_empty_string,CODE
LOWgooey/gui/components/widgets/dropdown_filterable.py49 'placeholder': str,CODE
LOWgooey/gui/components/widgets/dropdown_filterable.py96 self.widget.SetHint(self._options.get('placeholder', ''))CODE
LOWgooey/gui/components/widgets/dropdown_filterable.py244 'placeholder': str,CODE
LOWgooey/gui/components/widgets/textfield.py26 textctr.SetHint(state['placeholder'])CODE
LOWgooey/gui/components/widgets/dropdown.py14 'placeholder': str,CODE
LOWgooey/gui/components/widgets/bases.py91 if self._options.get('placeholder'):CODE
LOWgooey/gui/components/widgets/bases.py92 self.setPlaceholder(self._options.get('placeholder'))CODE
Over-Commented Block17 hits · 17 pts
SeverityFileLineSnippetContext
LOWgooey/__main__.py1# '''COMMENT
LOWgooey/tests/test_slider.py21 [{'default': 76}, 76],COMMENT
LOWgooey/tests/test_decoration.py1import unittestCOMMENT
LOWgooey/tests/test_decoration.py21#COMMENT
LOWgooey/tests/test_decoration.py41# subs = parser.add_subparsers()COMMENT
LOWgooey/tests/test_dropdown.py21 # - default values are used as the initial selection (when present)COMMENT
LOWgooey/tests/test_dropdown.py41 # for choices, default, initalSelection, dynamicUpdate, expectedFinalSelection in testcases:COMMENT
LOWgooey/tests/test_numeric_inputs.py21 [{'default': 10, 'widget': 'IntegerField'}, 10],COMMENT
LOWgooey/tests/test_application.py61 # def testOnCloseShutsDownActiveClients(self, mockModal):COMMENT
LOWgooey/tests/test_cli.py21 # print(cli.formValidationCmd('target', 'cmd', positionals, optionals))COMMENT
LOWgooey/tests/test_filtering.py41 TestData({'choice_tokenizer': PrefixTokenizers.ENTIRE_PHRASE}, 'Afghan', [p.kabul]),COMMENT
LOWgooey/python_bindings/argparse_to_json.py241def reapply_mutex_groups(mutex_groups, action_groups):COMMENT
LOWgooey/python_bindings/argparse_to_json.py661 'BlockCheckbox',COMMENT
LOWgooey/python_bindings/dynamics.py181 # lift_actions_mutating(subparser)COMMENT
LOWgooey/gui/state.py161def cmdOrPlaceholderOrNone(item: EnrichedItem) -> Optional[str]:COMMENT
LOWgooey/gui/components/options/validators.py181 # print(validateColor(123.234))COMMENT
LOWgooey/gui/components/widgets/bases.py41 def dispatchChange(self, value, **kwargs):COMMENT
Deep Nesting15 hits · 14 pts
SeverityFileLineSnippetContext
LOWgooey/tests/test_time_remaining.py34CODE
LOWgooey/tests/test_common.py22CODE
LOWgooey/tests/test_radiogroup.py22CODE
LOWgooey/tests/test_radiogroup.py76CODE
LOWgooey/tests/test_numeric_inputs.py65CODE
LOWgooey/python_bindings/argparse_to_json.py278CODE
LOWgooey/python_bindings/cmd_args.py12CODE
LOWgooey/python_bindings/cmd_args.py14CODE
LOWgooey/python_bindings/cmd_args.py42CODE
LOWgooey/gui/formatters.py11CODE
LOWgooey/gui/formatters.py54CODE
LOWgooey/gui/components/footer.py58CODE
LOWgooey/gui/components/widgets/dropdown_filterable.py180CODE
LOWgooey/gui/containers/application.py157CODE
LOWgooey/gui/containers/application.py208CODE
Empty Error Handlers2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHgooey/tests/processor/test_processor.py83except KeyboardInterrupt:CODE
HIGHgooey/gui/three_to_four.py8except ImportError:CODE
Excessive Try-Catch Wrapping8 hits · 10 pts
SeverityFileLineSnippetContext
LOWgooey/util/functional.py117 except Exception as e:CODE
MEDIUMgooey/util/functional.py114def inner(x) -> Try:CODE
LOWgooey/python_bindings/control.py78 except Exception as e:CODE
LOWgooey/python_bindings/control.py125 except Exception as e:CODE
LOWgooey/python_bindings/control.py164 except Exception as e:CODE
LOWgooey/python_bindings/dynamics.py88 except Exception as e:STRING
MEDIUMgooey/python_bindings/dynamics.py85def update_reg(_self, _action, _value):CODE
LOWgooey/gui/application/application.py315 except Exception as e:CODE
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHgooey/tests/test_filtering.py60 # In this example, we index the choices under PHRASE, but set the inputCOMMENT
AI Slop Vocabulary3 hits · 6 pts
SeverityFileLineSnippetContext
LOWgooey/tests/test_config_generator.py28 # if no description is provided anywhere, we just set it to be an empty string.COMMENT
MEDIUMgooey/tests/test_filtering.py69 # the default AND behavior can be swapped to OR to facilitate matching acrossCOMMENT
LOWgooey/gui/components/widgets/radio_group.py47 # just return the first widget's value even though it'sCOMMENT
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWgooey/gui/processor.py141CODE
LOWgooey/gui/components/options/options.py49CODE
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWgooey/gui/lang/i18n.py14__all__ = ['load', '_']CODE