Skip to content

window: tool names, a green verdict, Copy all and Open folder on Tools - #162

Merged
donislawdev merged 2 commits into
mainfrom
window/tools-results
Oct 5, 2026
Merged

donislawdev merged 2 commits into
mainfrom
window/tools-results

Conversation

@donislawdev

@donislawdev donislawdev commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

The owner's list after looking at the window with the folder tools in it.

  • Layout after a change of tool. The section of boxes kept the height of the tool chosen before: a setting drawn under it with its list hidden, or an empty band. Reproduced in the real window, fixed by laying the screen out again after every change of a section. Guard: every change of tool is drawn the same as the screen laid out with that tool from the start.
  • The menu names the tool: checksum-write - How will I know later that nothing in this folder changed?
  • A match is green - a new part, Verdict, in the catalogue in both tones.
  • Copy all under a result: the result as the section shows it, with every item of a long note.
  • Open folder in the bar after a run: the folder the tool was given, or the folder of the file.

Stored screens: only the catalogue and the Tools scenes changed, plus two new scenes (tools-write, chosen after the screen was laid out, and tools-check-result).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Tool choices now show each tool’s name alongside its description.
    • Tool results show matching verdicts in green and include a Copy all option for copying the complete result.
    • After a successful run, an Open folder button lets you open the folder used by the tool.
    • Tool results now refresh their layout when switching tools, preventing misplaced settings or blank space.

Choosing another tool left the section of boxes at the height of the tool
before - a setting drawn under it with its list hidden, or an empty band.
Seen in the real window with the build before this, three changes of tool
out of three. The screen is laid out again after every change of a section.
In the real window either the view or the page told on its own was enough,
so only the view is told, which also grows the room to scroll; the test
canvas agrees with it, and a guard compares every change of tool with the
screen laid out with that tool from the start.

The menu starts each line with the name the tool has after tfg tool, so
three questions about checksums read as checksum tools. A result that
matches is green, through one part, Verdict, as the run screen already
coloured its own. Copy all puts the result on the clipboard as the section
shows it, in the window's language, with every item of a long note where the
screen stops at twenty. Open folder stands in the bar after a run, as on
Single batch, and leads to the folder the tool worked in: the one it was
given, or the folder of the file.

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

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository UI (base), Organization UI (inherited)
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 053f2953-92e2-4919-b564-b8d27bb3d952

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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: b4d92503-5fe0-4af6-aa06-59465133d532
📥 Commits

Reviewing files that changed from the base of the PR and between 07dff09 and d02a57d.

⛔ Files ignored due to path filters (6)
  • internal/guard/testdata/screens/catalogue.png is excluded by !**/*.png, !**/*.png
  • internal/guard/testdata/screens/tools-check-result.png is excluded by !**/*.png, !**/*.png
  • internal/guard/testdata/screens/tools-refused.png is excluded by !**/*.png, !**/*.png
  • internal/guard/testdata/screens/tools-result.png is excluded by !**/*.png, !**/*.png
  • internal/guard/testdata/screens/tools-write.png is excluded by !**/*.png, !**/*.png
  • internal/guard/testdata/screens/tools.png is excluded by !**/*.png, !**/*.png
📒 Files selected for processing (22)
  • CHANGELOG.md
  • internal/guard/boxwidth_test.go
  • internal/guard/checksumfolder_test.go
  • internal/guard/screenpixels_test.go
  • internal/guard/testdata/checksum-sample.SHA256SUMS
  • internal/guard/testdata/screens/catalogue.xml
  • internal/guard/testdata/screens/tools-check-result.xml
  • internal/guard/testdata/screens/tools-refused.xml
  • internal/guard/testdata/screens/tools-result.xml
  • internal/guard/testdata/screens/tools-write.xml
  • internal/guard/testdata/screens/tools.xml
  • internal/guard/tools_test.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/catalogue/catalogue.go
  • internal/gui/catalogue/fields.go
  • internal/gui/parts/verdict.go
  • internal/gui/text/locale/en.json
  • internal/gui/text/locale/pl.json
  • internal/gui/text/screens.go
  • internal/gui/window/tools.go
  • internal/gui/window/toolsresult.go
  • internal/gui/window/toolstext.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. (20)
  • GitHub Check: race detector (part 0 of 4)
  • GitHub Check: race detector (part 3 of 4)
  • GitHub Check: race detector (part 2 of 4)
  • GitHub Check: race detector (part 1 of 4)
  • GitHub Check: reference tools actually installed
  • GitHub Check: test on macos-latest
  • GitHub Check: semgrep
  • GitHub Check: the installer installs and leaves
  • GitHub Check: bill of materials
  • GitHub Check: test on ubuntu-latest
  • GitHub Check: staticcheck
  • GitHub Check: coverage gate
  • GitHub Check: known vulnerabilities
  • GitHub Check: linters
  • GitHub Check: test on windows-latest
  • GitHub Check: the Chocolatey packages install and leave
  • GitHub Check: import table of the window binary
  • GitHub Check: Analyze (actions)
  • GitHub Check: Analyze (go)
  • GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (14)
Applies to text shown to the user (labels, buttons, tooltips, placeholders, dialogs, errors, status messages, empty states, translations).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/tools_test.go
  • internal/gui/text/locale/pl.json
  • internal/gui/text/locale/en.json
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/gui/window/tools.go
Verify tests check real behavior and would fail if the implementation were broken.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/guard/tools_test.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/guard/toolsscreen_test.go
These are end-user desktop applications.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/tools_test.go
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/gui/window/tools.go
Performance is a known weak spot of these projects.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/tools_test.go
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/gui/window/tools.go
Applies only to code that builds or styles a GUI.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/tools_test.go
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/gui/window/tools.go
User-facing changelog.

⚙️ CodeRabbit configuration file

Files:

  • CHANGELOG.md
Domain: test file generator (Go; `tfg` CLI and `tfg-gui` Fyne window over one engine).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/testdata/screens/tools.xml
  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/testdata/checksum-sample.SHA256SUMS
  • internal/guard/tools_test.go
  • internal/gui/text/locale/pl.json
  • internal/gui/text/locale/en.json
  • internal/guard/testdata/screens/tools-check-result.xml
  • internal/guard/testdata/screens/tools-write.xml
  • internal/guard/testdata/screens/tools-refused.xml
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/guard/testdata/screens/tools-result.xml
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/guard/testdata/screens/catalogue.xml
  • internal/gui/window/tools.go
SECURITY, HIGH PRIORITY.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/tools_test.go
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/gui/window/tools.go
These apps are QA/developer tools.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/tools_test.go
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/gui/window/tools.go
Go code.

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/tools_test.go
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/gui/window/tools.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:

  • CHANGELOG.md
All code in this repository is written by an AI coding agent (Claude Code).

⚙️ CodeRabbit configuration file

Files:

  • internal/guard/testdata/screens/tools.xml
  • internal/guard/boxwidth_test.go
  • internal/gui/catalogue/fields.go
  • internal/guard/testdata/checksum-sample.SHA256SUMS
  • internal/guard/tools_test.go
  • internal/gui/text/locale/pl.json
  • internal/gui/text/locale/en.json
  • internal/guard/testdata/screens/tools-check-result.xml
  • internal/guard/testdata/screens/tools-write.xml
  • internal/guard/testdata/screens/tools-refused.xml
  • internal/gui/catalogue/catalogue.go
  • internal/gui/parts/verdict.go
  • internal/guard/screenpixels_test.go
  • CHANGELOG.md
  • internal/guard/checksumfolder_test.go
  • internal/gui/text/screens.go
  • internal/guard/testdata/screens/tools-result.xml
  • internal/gui/window/toolsresult.go
  • internal/guard/toolsscreen_test.go
  • internal/gui/window/toolstext.go
  • internal/guard/testdata/screens/catalogue.xml
  • internal/gui/window/tools.go
Safe file parsing: Warn if the PR reads, imports or exports files (XML, XAML, CSV, XLSX, JSON, YAML, translations, themes, settings, archives) in a way that could execute code or formulas, resolve external entities, deserialize arbitrary ty...

📄 CodeRabbit inference engine (Custom checks)

Files:

  • internal/gui/text/locale/en.json
Source excerpt: **Words a user reads are English, with a flat hyphen and no semicolons.**

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Files:

  • CHANGELOG.md

📝 Walkthrough

Walkthrough

The Tools screen now names tools in its chooser, refreshes layout when the selection changes, formats and copies results, and offers an Open folder button after successful runs with a known working folder.

Changes

Tools screen

Layer / File(s) Summary
Result presentation and copy controls
internal/gui/parts/verdict.go, internal/gui/window/toolsresult.go, internal/gui/window/toolstext.go, internal/gui/text/*, internal/gui/catalogue/*, internal/guard/toolsscreen_test.go, internal/guard/testdata/screens/catalogue.xml, internal/guard/testdata/screens/tools-result.xml
Results now show formatted rows, notes, and match verdicts. Users can copy a row or the complete result. The catalogue and screen tests include verdict and copy examples.
Tool selection, layout, and folder action
internal/gui/window/tools.go, internal/gui/window/toolstext.go, internal/gui/text/*, internal/guard/*, internal/guard/testdata/screens/tools*.xml, CHANGELOG.md
The chooser displays each tool’s ID and question. Switching tools refreshes the layout. After a successful run with a known folder, the screen offers an Open folder button. Tests cover selection, layout, and folder behavior.

Priority: ⬇️ Low

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

Change: Feature · Severity of issue fixed: Low

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant Tools as Tools screen
  participant Runner as startTool
  participant Results as toolsresult
  participant Clipboard
  User->>Tools: Select tool and run
  Tools->>Runner: Submit request
  Runner-->>Tools: Return result
  Tools->>Results: Render result
  User->>Results: Select Copy all
  Results->>Clipboard: Copy formatted result
  User->>Tools: Select Open folder
  Tools->>Tools: Open stored run folder
Loading

Suggested labels: enhancement, bug, ui

Merge Risk: ⚪ Minimal · up to d02a5

The Tools changes are ready to merge after normal checks. The inspected folder action does not point to a different tool’s folder when selection changes during a run.

Security Architecture Review

Security architecture risk: 🔵 Low · up to d02a5

The new actions remain user-triggered and use the application's existing desktop permissions. However, copying a result can report a failed comparison when no comparison was performed. No privilege escalation or verification bypass was established; runtime behavior and broader security coverage remain incomplete.

Retained concerns

  • Low · reliability · observed: The new clipboard consumer disagrees with both result producers and the displayed result about the no-comparison state. Successful checksum runs without an expected value, and checksum-write runs, return an empty Outcome. Because Unasked is "none", resultText exports that empty outcome through verdictSaid's mismatch fallback, adding a failed-comparison statement that the screen does not display. This distorts the integrity result handed to external consumers, although it does not create a false successful verification or change filesystem operations.
Security review details

Security Blast Radius

  • inferred — The changed exposure is within the user's desktop session: explicit copying can place every result-note item, including paths omitted from the visible list, on the OS clipboard; explicit folder opening delegates the captured input path to the desktop. The inspected flow does not grant additional process privileges.

Trust Boundaries and Controls

  • observed — Folder opening uses the submitted input, not a tool-generated result string or later field edit. The native opener constructs an absolute URL with the fixed file scheme and path field; it does not treat the input as an arbitrary URL or shell command.
  • observed — A new run or tool selection clears the folder offer. Error completion, including cancellation, clears it; successful completion shows it only when a nonempty folder remains. Another run is rejected while busy. A selection change before the pre-existing delayed freeze suppresses the old folder offer rather than retargeting it.

Resilience and Maintainability Implications

  • observed — The clipboard defect changes the reported integrity outcome, not the checksum computation, comparison, or write operation. Its failure direction is an unsupported mismatch statement, not a false successful verification.
🚥 Pre-merge checks | ✅ 12 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
No Obvious Performance Problems ⚠️ Warning The new Copy all button formats the complete result synchronously in its tap callback: toolsresult.go calls resultText, which visits every row and note item in toolstext.go. This runs on the but… Move full-result formatting out of the UI callback. For example, format the captured result on a worker goroutine, then use fyne.Do to set the clipboard and update the status on the UI thread. Preserve the full Copy all output.
Safe File Parsing ⚠️ Warning Copy all adds a large-input memory risk. resultText in internal/gui/window/toolstext.go calls noteLines(..., 0) to collect every note item, then strings.Join builds the full output. copyAll … Build clipboard text with a strict byte limit. Stop formatting when the limit is reached, and do not call Clipboard.SetContent for oversized results. Show a localized message that the result exceeds the copy limit. Apply the limit before …
✅ Passed checks (12 passed)
Check name Status Explanation
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.
Tests For Changed Behavior ✅ Passed PASS. The runtime changes are confined to GUI behavior in internal/gui: tool relayout, menu labels, verdict display, Copy all, and Open folder. The PR adds internal/guard/toolsscreen_test.go with …
No Secrets Or Debug Leftovers ✅ Passed The PR adds no CLAUDE.md, CLAUDE.local.md, AGENTS.md, .claude/, or .env files. Scans of added text and changed screen XML found no credentials, URLs, emails, absolute local paths, IPs, internal hostna…
No Hardcoded Ui Styling ✅ Passed The PR changes Fyne GUI code, but it does not introduce literal control styling. The new Verdict component uses Fyne’s semantic DangerImportance and SuccessImportance values and shared `inkTight…
Desktop Robustness ✅ Passed The PR does not introduce a desktop-robustness failure. The added file write is test setup under t.TempDir(), not a settings or application-data write. The new relative checksum path is a guard-test…
System Changes Are Reversible ✅ Passed The PR does not introduce changes to network filters or rules, proxies, firewalls, system time, process hooking or injection, Windows services, the registry, or drivers. Its new Open folder button cal…
Clear User-Facing Text ✅ Passed The changed user-facing text uses clear, consistent labels. The tool menu names each tool before its question; the new buttons say “Copy all” and “Open folder,” and the copy confirmation says the whol…
No Resource Leaks ✅ Passed The PR adds no accumulating resource that lacks cleanup. The new Tools state is bounded: one folder-offer button and one folder path per screen, plus a fixed tool-choice map. The result renderer remov…
Scope, Duplication And Docs ✅ Passed The PR changes stay within the Tools-tab work described in the title and description. The changelog documents both the new Tools-tab behavior and the layout fix. The new folder offer is for the folder…
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the Tools tab changes: tool names, a green verdict, Copy all, and Open folder.
Full details: No Obvious Performance Problems

Explanation

The new Copy all button formats the complete result synchronously in its tap callback: toolsresult.go calls resultText, which visits every row and note item in toolstext.go. This runs on the button's event path (parts.Button.Tapped invokes OnTapped directly). The checksum checker accepts files up to 64 MiB, described as about half a million entries, and can place many problem paths in a single note. The screen displays at most 20 note items, but Copy all converts every item before setting the clipboard. A large valid result can therefore keep the UI unresponsive while it builds and joins the full text.

Full details: Safe File Parsing

Explanation

Copy all adds a large-input memory risk. resultText in internal/gui/window/toolstext.go calls noteLines(..., 0) to collect every note item, then strings.Join builds the full output. copyAll passes that string to the clipboard. The checksum reader accepts files up to 64 MiB, which its source says can contain about half a million entries. A large valid check can therefore cause substantial extra allocation and delay, with possible memory exhaustion. This behavior was introduced by the new Copy all path.

Resolution

Build clipboard text with a strict byte limit. Stop formatting when the limit is reached, and do not call Clipboard.SetContent for oversized results. Show a localized message that the result exceeds the copy limit. Apply the limit before collecting all note lines; replacing strings.Join alone does not bound memory.

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

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 bug Something isn't working enhancement New feature or request ui labels Oct 5, 2026
@donislawdev donislawdev changed the title window: the Tools tab after the owner's first look at the folder tools window: tool names, a green verdict, Copy all and Open folder on Tools Oct 5, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@donislawdev
donislawdev merged commit 3e919e8 into main Oct 5, 2026
25 checks passed
@donislawdev
donislawdev deleted the window/tools-results branch October 5, 2026 17:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working enhancement New feature or request ui

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant