AI Slop Code Risk Monitor

fyne-io/fyne

SlopCodeMonitor badge for fyne-io/fyne Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Cross platform GUI toolkit in Go inspired by Material Design

2.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for fyne-io/fyne, a Go project with 28,798 GitHub stars. SynthScan examined 182,091 lines of code across 1600 source files, recording 322 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 2.1 (Low 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.

2.1
Adjusted Signal
2.1
Raw Pattern Score
100%
Time Factor
2026-10-27
Last Push
28.8K
Stars
Go
Language
182.1K
Lines of Code
1.6K
Files
322
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 7.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.9/100 · LOW

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 9.7/100 · LOW

Which changes need focused human review? 322 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 4HIGH 1MEDIUM 5LOW 312

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 322 distinct pattern matches across 6 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.

Over-Commented Block244 hits · 241 pts
SeverityFileLineSnippetContext
LOWcloud.go1package fyneCOMMENT
LOWwindow.go1package fyneCOMMENT
LOWwindow.go61 // The way this is rendered will depend on the loaded driver.COMMENT
LOWwindow.go81 Show()COMMENT
LOWwidget.go1package fyneCOMMENT
LOWwidget.go21 // Renderers should dispose and clean up any related resources, if necessary.COMMENT
LOWfyne.go1// Package fyne describes the objects and components available to any Fyne app.COMMENT
LOWfyne.go21// widget.NewButton("Hi!", func() {COMMENT
LOWthread.go1package fyneCOMMENT
LOWpreferences.go1package fyneCOMMENT
LOWpreferences.go21 //COMMENT
LOWpreferences.go41 //COMMENT
LOWpreferences.go61 //COMMENT
LOWkey.go161 KeySemicolon KeyName = ";"COMMENT
LOWkey.go181type KeyModifier intCOMMENT
LOWcanvasobject.go1package fyneCOMMENT
LOWcanvasobject.go61// When focused it will also have TypedRune called as text is input andCOMMENT
LOWsettings.go21 //COMMENT
LOWapp.go21var ErrPasswordIncorrect = errors.New("the password is incorrect")COMMENT
LOWapp.go41COMMENT
LOWapp.go61 // This must be set for use of the [App.Preferences]. see [NewWithID].COMMENT
LOWapp.go81 // It is safe to call with an unknown ID or after the notification has already fired.COMMENT
LOWapp.go101 // needed. The app can then obtain a password, through secure means or by asking the user, and call thisCOMMENT
LOWapp.go121COMMENT
LOWapp.go181 // Icon contains, if present, a resource of the icon that was bundled at build time.COMMENT
LOWtext.go41 // TextTruncate trims the text to the widget's width, no wrapping is applied.COMMENT
LOWuri.go21 URI() URICOMMENT
LOWuri.go41type URI interface {COMMENT
LOWuri.go61 // 'file'.COMMENT
LOWuri.go81 // Query should return the URI query, as defined by IETF RFC3986.COMMENT
LOWanimation.go21 // AnimationEaseIn starts slowly and accelerates to the end.COMMENT
LOWdriver.go21 // AbsolutePositionForObject returns the position of a given [CanvasObject] relative to the top/left of a canvas.COMMENT
LOWdriver.go41 //COMMENT
LOWcmd/fyne/internal/mobile/build_iosapp.go641}COMMENT
LOWcmd/fyne/internal/mobile/build_iosapp.go661 //COMMENT
LOWcmd/fyne/internal/mobile/env.go121 }COMMENT
LOWcmd/fyne/internal/mobile/writer.go1// Copyright 2015 The Go Authors. All rights reserved.COMMENT
LOWcmd/fyne/internal/mobile/writer.go21//COMMENT
LOWcmd/fyne/internal/mobile/writer.go41// Note the \r\n line breaks.COMMENT
LOWcmd/fyne/internal/mobile/binres/binres.go1// Copyright 2015 The Go Authors. All rights reserved.COMMENT
LOWcmd/fyne/internal/mobile/binres/binres.go21//COMMENT
LOWcmd/fyne/internal/mobile/binres/pool.go21COMMENT
LOWcmd/fyne/internal/mobile/binres/pool.go41//COMMENT
LOWcmd/fyne/internal/mobile/binres/table.go21type TableRef uint32COMMENT
LOWcmd/fyne/internal/mobile/gendex/gendex.go1// Copyright 2015 The Go Authors. All rights reserved.COMMENT
LOWwidget/gridwrap.go41 // an item in the GridWrap.COMMENT
LOWwidget/tree_internal_test.go201 assert.Equal(t, "foobar", tree.selected[0])COMMENT
LOWwidget/richtextentry.go21const (COMMENT
LOWwidget/label.go21COMMENT
LOWwidget/entry.go501COMMENT
LOWwidget/table.go61 // This will default to an A-Z style content, unless overridden with `CreateHeader` and `UpdateHeader` calls.COMMENT
LOWwidget/table.go81 // Since: 2.4COMMENT
LOWwidget/table.go121}COMMENT
LOWtest/test_helper.go81COMMENT
LOWdriver/native.go21// AndroidWindowContext is passed to the NativeWindow.RunNative callback when it is executedCOMMENT
LOWdriver/native.go61// X11WindowContext is passed to the NativeWindow.RunNative callbackCOMMENT
LOWdriver/desktop/window.go1package desktopCOMMENT
LOWdriver/desktop/key.go41 // ShiftModifier represents a shift key being heldCOMMENT
LOWdriver/desktop/app.go1package desktopCOMMENT
LOWinternal/painter/font_internal_test.go141}COMMENT
184 more matches not shown…
Fake / Example Data65 hits · 67 pts
SeverityFileLineSnippetContext
LOWcmd/fyne_demo/tutorials/widget.go22 loremIpsum = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis consectetur nisi. Suspendisse CODE
LOWcmd/fyne_demo/tutorials/widget.go22 loremIpsum = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis consectetur nisi. Suspendisse CODE
LOWwidget/table_desktop_test.go21 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go32 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go63 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go80 assert.Equal(t, NewLabel("placeholder").MinSize(), content.Objects()[0].(*Label).Size())CODE
LOWwidget/table_internal_test.go86 assert.Equal(t, NewLabel("placeholder").MinSize(), content.Objects()[0].(*Label).Size())CODE
LOWwidget/table_internal_test.go339 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go374 displayText := "placeholder"CODE
LOWwidget/table_internal_test.go387 assert.Equal(t, "placeholder", cellRenderer.(*tableCellsRenderer).Objects()[7].(*Label).Text)CODE
LOWwidget/table_internal_test.go574 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go660 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go689 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go733 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go763 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go814 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go820 obj.(*Label).Text = "placeholder"CODE
LOWwidget/table_internal_test.go975 return NewLabel("placeholder")CODE
LOWwidget/table_internal_test.go1017 return NewLabel("placeholder")CODE
LOW⚡widget/richtext_benchmark_test.go12const loremIpsum = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis consectetur nisi. SuspendCODE
LOW⚡widget/richtext_benchmark_test.go12const loremIpsum = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis consectetur nisi. SuspendCODE
LOW⚡widget/richtext_benchmark_test.go20Nullam eu mattis dolor. Sed sit amet ipsum gravida, pretium justo eget, mattis est. Cras viverra aliquet velit, a faucibCODE
LOW⚡widget/richtext_benchmark_test.go20Nullam eu mattis dolor. Sed sit amet ipsum gravida, pretium justo eget, mattis est. Cras viverra aliquet velit, a faucibCODE
LOWwidget/testdata/form/extended_entry.xml15 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/form/layout.xml15 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/form/layout.xml32 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/focus_gained.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…dget/testdata/entry/tapped_secondary_password_menu.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…get/testdata/entry/focus_with_popup_entry_selected.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/focused_enabled.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/focus_lost.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…testdata/entry/always_on_without_validator_success.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…get/testdata/entry/disableable_enabled_placeholder.xml8 <text color="placeholder" pos="8,6" size="34x19">Type!</text>CODE
LOWwidget/testdata/entry/placeholder_without_text.xml8 <text color="placeholder" pos="8,6" size="63x19">Placehold</text>CODE
LOW…dget/testdata/entry/always_on_with_validator_error.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/validator_not_empty_unfocused.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/initial.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/set_placeholder_set.xml8 <text color="placeholder" pos="8,6" size="26x19">Test</text>CODE
LOWwidget/testdata/entry/tapped_secondary_full_menu.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/validator_not_empty_focused.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/disableable_enabled_empty.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/focus_with_popup_initial.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/validate_initial.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/validator_not_empty_initial.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/focus_with_popup_dismissed.xml8 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…t/testdata/entry/always_on_without_validator_error.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/entry/initial_multiline.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/select_entry/disableable_enabled.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/select_entry/dropdown_initial.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/select_entry/dropdown_empty_setopts.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…t/testdata/select_entry/disableable_enabled_tapped.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/select_entry/dropdown_empty_opened.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…testdata/select_entry/dropdown_empty_opened_shrunk.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…a/select_entry/disableable_enabled_tapped_selected.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOW…t/testdata/select_entry/disableable_enabled_opened.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWwidget/testdata/password_entry/placeholder_initial.xml9 <text color="placeholder" pos="8,6" size="63x19">Password</text>CODE
LOWwidget/testdata/password_entry/initial.xml9 <text color="placeholder" pos="8,6" size="0x19"></text>CODE
LOWtest/markup_renderer.go512 return "placeholder"CODE
LOWinternal/driver/glfw/testdata/windows_hover_object.xml13 <text color="placeholder" pos="8,7" size="0x19"></text>CODE
LOWinternal/driver/glfw/testdata/windows_hover_object.xml30 <text color="placeholder" pos="8,7" size="0x19"></text>CODE
5 more matches not shown…
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippetContext
CRITICALwidget/table.go1533 r.cells.t.dividerLayer.Content.Refresh()CODE
CRITICALwidget/table.go1711 r.cells.t.top.Content.Refresh()CODE
CRITICALwidget/table.go1753 r.cells.t.left.Content.Refresh()CODE
CRITICALwidget/table.go1769 r.cells.t.corner.Content.Refresh()CODE
AI Slop Vocabulary5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMuri.go38// Implementations are highly recommended to utilize [net/url] to implement URICOMMENT
MEDIUMwidget/textgrid.go663 // round it for seamless backgroundCOMMENT
MEDIUMinternal/painter/draw.go386// allowed for the width and height of the shape. Corner radius may utilize unused capacity from adjacent corners with rCOMMENT
MEDIUMinternal/repository/memory.go54// This repository is not designed to be particularly fast or robust, butCOMMENT
MEDIUMinternal/async/doc.go6// can utilize select and channel semantics, whereas queue cannot. A user ofCOMMENT
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHcmd/fyne/internal/mobile/build_iosapp.go663 // greater than U+007f. In this implementation, we just replace everything nonCOMMENT
Hyper-Verbose Identifiers3 hits · 3 pts
SeverityFileLineSnippetContext
LOWcmd/fyne/internal/templates/data/webgl-debug.js631function makeLostContextSimulatingCanvas(canvas) {CODE
LOWcmd/fyne/internal/templates/data/webgl-debug.js805 function makeLostContextFunctionWrapper(ctx, functionName) {CODE
LOWcmd/fyne/internal/templates/data/webgl-debug.js865 function makeLostContextSimulatingContext(ctx) {CODE