From d301b57f5033ba9c29220399f166eae0577780f9 Mon Sep 17 00:00:00 2001
From: "devsy-app[bot]" <277138668+devsy-app[bot]@users.noreply.github.com>
Date: Sun, 9 Aug 2026 13:24:18 +0000
Subject: [PATCH] fix(ui): add sr-only labels to log buttons
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Problem
In `pages/WorkspaceDetailPage.svelte`, three icon-only buttons in the workspace Logs section — "Copy output", "Copy log", and "Delete log" — had only a hover `Tooltip` for labeling and no accessible name. Screen-reader users heard only an unnamed "button", since a tooltip is not an accessible name and these icons carry no text. Other icon-only buttons in the same file already follow the convention of adding `…`.
## Change
Add a `` label to each of the three icon-only buttons (Copy output, Copy log, Delete log) in the log-files/output area, matching the existing pattern used elsewhere in the file (e.g. the rename, copy SSH, and more-actions buttons). Purely additive markup — no logic, styling, or behavior changes.
## Why it's safe / reviewable in <15 min
- One file, three added lines (`+3`).
- No JS/TS, store, routing, IPC, or CSS changes.
- `sr-only` is visually hidden (existing utility), so the rendered UI is unchanged.
- Uses the exact same idiom already established in this file.
## Verification
- `npm install --ignore-scripts` — succeeded.
- `npm run check` (svelte-check / type check) — **0 errors, 0 warnings**.
- `npx vitest run` — **48/48 tests passed**. (32 unrelated "errors" are a pre-existing jsdom/undici `markAsUncloneable is not a function` incompatibility with the local Node v20 runtime; the repo targets Node 24 per CI. These occur at environment setup, not in test execution, and are not affected by markup changes.)
- `task cli:format` — clean.
- `task cli:lint:ci` — **0 issues**.
- `npx biome check` on the edited file could not complete in this environment (hangs under Node v20, same toolchain incompatibility as the vitest environment errors); svelte-check covers the Svelte/a11y validation.
This PR was created by an AI agent as part of an automated daily UI polish job.
---
desktop/src/renderer/src/pages/WorkspaceDetailPage.svelte | 3 +++
1 file changed, 3 insertions(+)
diff --git a/desktop/src/renderer/src/pages/WorkspaceDetailPage.svelte b/desktop/src/renderer/src/pages/WorkspaceDetailPage.svelte
index 8bc44f6f2a..bedf4256a3 100644
--- a/desktop/src/renderer/src/pages/WorkspaceDetailPage.svelte
+++ b/desktop/src/renderer/src/pages/WorkspaceDetailPage.svelte
@@ -933,6 +933,7 @@ async function handleRenameConfirmed() {
{#snippet child({ props })}
{/snippet}
@@ -991,6 +992,7 @@ async function handleRenameConfirmed() {
onclick={() => copyToClipboard(logContent)}
>
+ Copy log
{/snippet}
@@ -1007,6 +1009,7 @@ async function handleRenameConfirmed() {
onclick={() => deleteLog(entry)}
>
+ Delete log
{/snippet}