Skip to content

mutation: the last four HOLEs, x/text 0.43.0, golangci-lint v2.15.0 - #197

Merged
donislawdev merged 4 commits into
mainfrom
mutation/menu-holes
Oct 19, 2026
Merged

donislawdev merged 4 commits into
mainfrom
mutation/menu-holes

Conversation

@donislawdev

@donislawdev donislawdev commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Three things in one pull request, one commit each.

The last four HOLEs of the Sunday mutation run (2026-10-18: 1782 entries, 1725 ok, 4 HOLE, 0 BROKEN, 0 SKIP). All four were about the width of a menu.

  • A field in the form's grid is as wide as the columns it takes, not as wide as it asks. So at the width the window opens at, taking the floor out of parts.menuWidth changed nothing a guard could see. The floor only shows in the narrowest window, where it decides how many columns a menu takes: without it, the damage menu on the single batch screen falls from 265.91 px to 124.96, beside boxes of 253.91.
  • inEveryMenuLayout lays every screen out with every section open, at the opening width and at the narrowest one. It asserts both states instead of assuming them. The guard about the toolkit's words also asks whether the width a menu asks for covers the toolkit's minimum. Laid out, the menu without its floor was still 0.73 px wider than the words.
  • Two entries are retired: measuring the placeholder in menuWidth. Since NewChooser gives every menu the window's placeholder from the start, that change widens every format menu at once (154.73 to 180.23 px), which is still one width everywhere. Their two guards are listed as not proven by mutation. The cause is held at the source by TestAMenuIsOneWidthBeforeAndAfterItIsDrawn.

golang.org/x/text 0.43.0, in place of #196, which was red only on the notices file. Only unicode/bidi and secure/bidirule changed between the two module copies, and neither binary links them, so no generated byte can move.

golangci-lint v2.15.0, from the weekly tool versions job. v2.15.0 refuses exhaustive.ignore-enum-types in config verify, so the setting is now ignore-types. Checked: without the setting the linter reports seven switches on fyne.KeyName, with it none. A full run reports no issues.

The merge needs the browser, because .github/workflows/ci.yml changes.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Maintenance
    • Updated the project’s code-quality tooling and refreshed a supporting text-processing component.
  • Tests
    • Expanded menu layout checks across screens, window widths, and open sections. Checks now verify that menus remain wide enough for their contents and aligned with nearby input fields.
    • Added coverage for consistent menu widths across screens and table-row alignment.

donislawdev and others added 3 commits October 19, 2026 18:48
…t window

The last four HOLEs of the Sunday mutation runs were all about the width of
a menu, and none of them was a guard looking in the wrong place for the
reason the earlier analysis gave.

A field in the form's grid is as wide as the columns it takes, not as wide
as it asks. At the width the window opens at, every menu is a column wide
whatever it asks for, so taking the floor out of parts.menuWidth changed
nothing the guards could see. The floor only shows in the narrowest window
the window allows, where it decides how many columns a menu takes: without
it, the damage menu on the single batch screen falls from two columns
(265.91 px) to one (124.96), beside boxes of 253.91.

inEveryMenuLayout lays every screen out with every section open and at
both widths, and asserts both states rather than assuming them: a section
that stays shut when its head is pressed, or content that did not take the
width it was resized to, stops the guard. The guard about the toolkit's own
words also asks whether the width a menu asks for covers the toolkit's
minimum - laid out, the menu without its floor was still given one column,
0.73 px wider than the words, so the layout alone could never prove it.

The two entries that measured the placeholder in menuWidth are retired.
Since NewChooser gives every menu the window's placeholder from the start,
measuring it widens every format menu at once (154.73 to 180.23 px), which
is one width everywhere. Their guards are listed as not proven by mutation,
and the cause they were written for is held at the source by
TestAMenuIsOneWidthBeforeAndAfterItIsDrawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Dependabot pull request (#196) was red on one guard: the notices file
writes the version by hand and still said 0.42.0.

Between the two copies in the module cache only unicode/bidi and
secure/bidirule changed. Neither binary links either of them - go list
-deps of cmd/tfg and cmd/tfg-gui reaches cases, language, transform and
unicode/norm of this module, all four unchanged - so no generated byte and
no verdict about two names colliding can move.

The mutation entry that names the version in the notices moves with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reported by the weekly tool versions job. v2.15.0 refuses
exhaustive.ignore-enum-types in config verify, which CI runs before the
linter, so the setting is ignore-types now, a list of the same patterns.
Checked rather than assumed: without it the linter reports seven switches
on fyne.KeyName in internal/gui/parts, with it none. A full run on the tree
reports no issues.

The two mutation entries that name the pinned command move with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository UI (base), Organization UI (inherited)
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 803ad706-f43f-44e2-86f7-2f2a9c7d4d74
📥 Commits

Reviewing files that changed from the base of the PR and between fd6a3eb and f05048a.

⛔ Files ignored due to path filters: 1
  • go.sum is excluded by !**/*.sum, !**/go.sum
📒 Files selected for processing: 8
  • .github/workflows/ci.yml
  • .golangci.yml
  • THIRD-PARTY-NOTICES.md
  • go.mod
  • internal/guard/menushape_test.go
  • internal/guard/mutation/entries.py
  • internal/guard/mutationcoverage_test.go
  • internal/gui/parts/ring.go

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout: 3
  • GitHub Check: race detector (part 1 of 4)
  • GitHub Check: race detector (part 0 of 4)
  • GitHub Check: race detector (part 2 of 4)
🧰 Additional context used
📚 Code guidelines: 1
SECURITY.md — unknown
📓 Path-based instructions: 15
For every added or upgraded dependency: confirm the package really exists and the name is spelled correctly (typosquatting), it is actively maintained, the license is compatible with this project's license, and it is actually needed (not re...

⚙️ CodeRabbit configuration file

Files:

  • go.mod
Applies to text shown to the user (labels, buttons, tooltips, placeholders, dialogs, errors, status messages, empty states, translations).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
Verify tests check real behavior and would fail if the implementation were broken.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/menushape_test.go
These are end-user desktop applications.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
Performance is a known weak spot of these projects.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
Applies only to code that builds or styles a GUI.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
Check GitHub Actions security: third-party actions pinned to a full commit SHA, minimal `permissions:` block, no `pull_request_target` with checkout of PR code, no untrusted input (`github.event.*.title/body`, branch names) interpolated dir...

⚙️ CodeRabbit configuration file

Files:

  • .github/workflows/ci.yml
Domain: test file generator (Go; `tfg` CLI and `tfg-gui` Fyne window over one engine).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
SECURITY, HIGH PRIORITY.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
These apps are QA/developer tools.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
Go code.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
Check that documentation matches the actual code in this PR: commands, flags, config keys, file paths, build steps and examples must exist.

⚙️ CodeRabbit configuration file

Files:

  • THIRD-PARTY-NOTICES.md
Python code.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutation/entries.py
All code in this repository is written by an AI coding agent (Claude Code).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/mutationcoverage_test.go
  • go.mod
  • THIRD-PARTY-NOTICES.md
  • internal/guard/mutation/entries.py
  • internal/gui/parts/ring.go
  • internal/guard/menushape_test.go
Source excerpt: **Access is scoped per workflow.**

📄 CodeRabbit inference engine (SECURITY.md)

Files:

  • .github/workflows/ci.yml
🔇 Additional comments: 4
.github/workflows/ci.yml: 1

861-861: LGTM!

Also applies to: 875-875

.golangci.yml: 1

117-120: LGTM!

go.mod: 1

86-86: LGTM!

THIRD-PARTY-NOTICES.md: 1

81-81: LGTM!

📝 Walkthrough

The menu guards now check multiple screen layouts and window widths. The CI workflow and mutation entries use golangci-lint v2.15.0, and golang.org/x/text is updated to v0.43.0.

Changes: Menu Layout Guards

Layer / File(s) Summary
Check menu widths across layouts
internal/guard/menushape_test.go, internal/guard/mutation/entries.py, internal/guard/mutationcoverage_test.go, internal/gui/parts/ring.go
The guards test menus at opening and minimum content widths, open all sections, and compare menu widths with toolkit requirements and typing-box widths. Mutation records and coverage declarations change. Comments document the toolkit width requirement.

Toolchain and Dependency Updates

Layer / File(s) Summary
Update lint and text-library versions
.github/workflows/ci.yml, .golangci.yml, go.mod, THIRD-PARTY-NOTICES.md, internal/guard/mutation/entries.py
CI and mutation entries use golangci-lint v2.15.0. The exhaustive linter configuration uses ignore-types, and golang.org/x/text and its notice are updated to v0.43.0.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Other

Suggested labels: dependencies

Merge Risk: ⚪ Minimal · up to f0504

No identified issue needs to be resolved before merging, subject to normal checks.

Pre-merge checks: Passed 13 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Tests For Changed Behavior Warning The PR changes a runtime dependency from x/text v0.42.0 to v0.43.0. Production code uses x/text in non-UI paths, including core.FoldName and engine filename-collision handling. The PR adds or updates … Add or update focused tests for the x/text-backed non-UI paths, such as Unicode normalization and case folding through core.FoldName and filename collision handling. If v0.43.0 does not change any linked package, add repository evidence or …
Passed Passed checks: 13 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title identifies the menu mutation-guard changes and both dependency/tool updates with exact versions. It is specific and within the length limit.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
No Secrets Or Debug Leftovers Passed No prohibited leftovers were introduced. The PR changes only existing files; it adds no CLAUDE.md, CLAUDE.local.md, AGENTS.md, .claude/, or .env path. Added lines contain dependency and linter updates…
No Hardcoded Ui Styling Passed The PR does not add or change GUI styling or controls. The only production Fyne-file diff (internal/gui/parts/ring.go) changes comments. The new Fyne test code only resizes the test canvas using mea…
No Obvious Performance Problems Passed No clear performance problem is introduced. The only production Go diff changes comments in internal/gui/parts/ring.go; it does not change menuWidth execution. The added work is test-only layout c…
Desktop Robustness Passed PASS. The pull request changes CI tool versions, linter configuration, dependency metadata, mutation tables, comments, and guard tests. The added Go test code only resizes test windows and checks menu…
Safe File Parsing Passed No changed code introduces unsafe file parsing. The PR changes menu-layout tests, mutation metadata, dependency versions, and linter configuration. The added test code only resizes UI objects and taps…
System Changes Are Reversible Passed The PR does not add or change code for network rules, proxies, firewalls, system time, process hooking/injection, Windows services, registries, or drivers. The executable change in `internal/gui/parts…
Clear User-Facing Text Passed No changed product UI text was found. The executable change in internal/gui/parts/ring.go is comment-only; the other text changes are CI/configuration, mutation-test diagnostics, or the third-party …
No Resource Leaks Passed No resource-leak condition is introduced. The PR changes test layout logic, mutation metadata, CI versions, configuration, dependency metadata, and comments. The new layout helper only resizes and ref…
Scope, Duplication And Docs Passed The authoritative diff contains only the described menu-width test/mutation-coverage work, the x/text 0.43.0 dependency and notice update, and the golangci-lint v2.15.0 CI/config update. The new layou…
Full details: No Secrets Or Debug Leftovers

Explanation

No prohibited leftovers were introduced. The PR changes only existing files; it adds no CLAUDE.md, CLAUDE.local.md, AGENTS.md, .claude/, or .env path. Added lines contain dependency and linter updates, test diagnostics, and comments. The targeted diff scan found no credentials, private URLs, local absolute paths, private hostnames/IPs, personal email addresses, or listed debug calls such as fmt.Println, pprint, dbg!, println!, breakpoint(), or debugger.

Full details: No Hardcoded Ui Styling

Explanation

The PR does not add or change GUI styling or controls. The only production Fyne-file diff (internal/gui/parts/ring.go) changes comments. The new Fyne test code only resizes the test canvas using measured sizes and does not set literal colors, fonts, margins, paddings, control sizes, corner radii, or duplicate controls.

Full details: No Obvious Performance Problems

Explanation

No clear performance problem is introduced. The only production Go diff changes comments in internal/gui/parts/ring.go; it does not change menuWidth execution. The added work is test-only layout coverage over six fixed tabs and two widths, with bounded tree walks. The remaining changes update CI tooling, configuration, dependency metadata, and mutation-test data.

Full details: Desktop Robustness

Explanation

PASS. The pull request changes CI tool versions, linter configuration, dependency metadata, mutation tables, comments, and guard tests. The added Go test code only resizes test windows and checks menu layout. No changed production code loads working-directory assets, writes files, parses culture-sensitive values, starts uncancellable background work, adds destructive actions, requests app-wide admin rights, or adds user-unannounced network calls.

Full details: Safe File Parsing

Explanation

No changed code introduces unsafe file parsing. The PR changes menu-layout tests, mutation metadata, dependency versions, and linter configuration. The added test code only resizes UI objects and taps fold headers. It does not add XML, CSV, XLSX, JSON, YAML, translation, theme, settings, or archive file reads or writes. Existing archive-menu setup is reused, not changed.

Full details: System Changes Are Reversible

Explanation

The PR does not add or change code for network rules, proxies, firewalls, system time, process hooking/injection, Windows services, registries, or drivers. The executable change in internal/gui/parts/ring.go only updates comments. Other changes update tests, dependency versions, linter configuration, and CI tool versions. The reversibility condition is not applicable.

Full details: Clear User-Facing Text

Explanation

No changed product UI text was found. The executable change in internal/gui/parts/ring.go is comment-only; the other text changes are CI/configuration, mutation-test diagnostics, or the third-party notice version. No new control, icon-only button, error message, confirmation, or user-facing concept naming was introduced that matches a stated failure condition.

Full details: No Resource Leaks

Explanation

No resource-leak condition is introduced. The PR changes test layout logic, mutation metadata, CI versions, configuration, dependency metadata, and comments. The new layout helper only resizes and refreshes an existing test canvas; laidOutWindow registers t.Cleanup(w.Close) for its test window. No new timers, subscriptions, files, processes, goroutines, queues, caches, images, or native allocations are added.

Full details: Scope, Duplication And Docs

Explanation

The authoritative diff contains only the described menu-width test/mutation-coverage work, the x/text 0.43.0 dependency and notice update, and the golangci-lint v2.15.0 CI/config update. The new layout helpers are test-only and unique; they reuse existing layout, tab, fold-row, and menu walkers. No public API, CLI argument, persisted format, or user-facing feature changed. CHANGELOG.md states that it documents changes visible to tfg users, while the analogous prior tool/dependency updates also changed CI, module, notices, and mutation metadata without changelog entries. The dependency notice is updated.

Full details: Tests For Changed Behavior

Explanation

The PR changes a runtime dependency from x/text v0.42.0 to v0.43.0. Production code uses x/text in non-UI paths, including core.FoldName and engine filename-collision handling. The PR adds or updates only UI layout tests; it adds no tests for the affected non-UI normalization or name-collision behavior.

Resolution

Add or update focused tests for the x/text-backed non-UI paths, such as Unicode normalization and case folding through core.FoldName and filename collision handling. If v0.43.0 does not change any linked package, add repository evidence or a guard that proves that claim and keep the dependency update out of the runtime-behavior finding.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

CI annotation context is incomplete: annotation collection unavailable or limited

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added the dependencies Pull requests that update a dependency file label Oct 19, 2026
staticcheck (SA1019) refuses test.WindowlessCanvas, which fyne v2.8.2 keeps
only as a deprecated alias of driver/software.WindowlessCanvas - the same
type under its current name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@donislawdev
donislawdev merged commit 40acad0 into main Oct 19, 2026
29 checks passed
@donislawdev
donislawdev deleted the mutation/menu-holes branch October 19, 2026 17:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant