From 8993ccaf091b81004bd78a84c1f4e99a7cc7f80e Mon Sep 17 00:00:00 2001 From: Alex Cheema <41707476+AlexCheema@users.noreply.github.com> Date: Wed, 22 Apr 2026 18:39:36 +0100 Subject: [PATCH] feat(app): add friendly context message to bug report prompt (#1959) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Motivation When a user clicks **Send Bug Report** in the macOS app, we already give them the option to add more context via an optional text field. But the current prompt is just a terse label — `"What's the issue? (optional)"` — which doesn't tell the user why bothering to fill it in matters. A friendly one-line explanation increases the chance they'll describe what went wrong, which is the single most useful signal when we triage the resulting diagnostic bundle. ## Changes - `app/EXO/EXO/ContentView.swift`: In the `.prompting` phase of `sendBugReportButton`, replace the single label with a two-line hierarchy: - Primary: `Tell us what went wrong (optional)` - Helper: `A quick description of what you were doing and what happened helps us track down the bug for you.` - The helper uses `.caption2` + `.secondary` + `.opacity(0.8)` + `.fixedSize(horizontal: false, vertical: true)` so it stays visually subordinate and wraps cleanly inside the 340pt popover. No changes to `BugReportService`, the `user_description` payload, or any other flow. ## Why It Works The optional description is already plumbed end-to-end (text editor → `bugReportUserDescription` state → `BugReportService.sendReport(..., userDescription:)` → `report.json`'s `user_description` field → GitHub issue pre-fill). The only gap was user-facing motivation, so this is purely a copy/layout tweak inside the existing `.prompting` case — no new state, bindings, or service changes. ## Test Plan ### Manual Testing - Build the macOS app in Xcode (`app/EXO/EXO.xcodeproj`) and launch it. - Open the menubar popover → expand **Debug Info** → click **Send Bug Report**. - Verify the new primary label and helper sentence both appear above the text editor and wrap cleanly within the popover width. - Leave the field empty → click **Send** → upload should succeed (no `user_description` in payload, same as before). - Fill in a description → click **Send** → upload succeeds and the success card with **Create GitHub Issue** appears; clicking it opens GitHub with the description pre-filled. - Click **Cancel** from the prompting state → returns to idle. ### Automated Testing - No new automated tests. This is a SwiftUI copy/layout change; existing `EXOTests` are smoke-level and don't cover `ContentView` view bodies, and UI snapshot tests aren't worth adding for a two-line copy tweak. - `nix fmt` reports 0 files changed after the edit; `nix flake check` in CI will verify formatting/lint for the rest of the tree. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) --- app/EXO/EXO/ContentView.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/EXO/EXO/ContentView.swift b/app/EXO/EXO/ContentView.swift index 0743df132..c30df9924 100644 --- a/app/EXO/EXO/ContentView.swift +++ b/app/EXO/EXO/ContentView.swift @@ -584,9 +584,18 @@ struct ContentView: View { case .prompting: VStack(alignment: .leading, spacing: 6) { - Text("What's the issue? (optional)") + VStack(alignment: .leading, spacing: 2) { + Text("Tell us what went wrong (optional)") + .font(.caption2) + .foregroundColor(.secondary) + Text( + "A quick description of what you were doing and what happened helps us track down the bug for you." + ) .font(.caption2) .foregroundColor(.secondary) + .opacity(0.8) + .fixedSize(horizontal: false, vertical: true) + } TextEditor(text: $bugReportUserDescription) .font(.caption2) .frame(height: 60)