From d56a15bf44d0415c44c68b5dc7d6778b6f08b3d7 Mon Sep 17 00:00:00 2001 From: Rohit C Prasad Date: Tue, 21 Jul 2026 11:35:29 -0700 Subject: [PATCH] =?UTF-8?q?gui:=20single-line=20session=20rows=20=E2=80=94?= =?UTF-8?q?=20drop=20the=20persona/workspace=20subtitle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Personas are disabled for the first release, so the subtitle repeated the same label on every row. When personas return they surface on hover, not as a second line. UX-DECISIONS §7 updated; e2e spec added. --- surfaces/gui/e2e/sidebar-rows.spec.ts | 15 +++++++++++++ surfaces/gui/src/components/Sidebar.tsx | 28 +++++++------------------ 2 files changed, 23 insertions(+), 20 deletions(-) create mode 100644 surfaces/gui/e2e/sidebar-rows.spec.ts diff --git a/surfaces/gui/e2e/sidebar-rows.spec.ts b/surfaces/gui/e2e/sidebar-rows.spec.ts new file mode 100644 index 00000000..dfd1b2d7 --- /dev/null +++ b/surfaces/gui/e2e/sidebar-rows.spec.ts @@ -0,0 +1,15 @@ +import { test, expect } from "./fixtures"; + +// Session rows are SINGLE-LINE (UX-DECISIONS §7, 2026-07-21): title only — the +// persona/workspace subtitle is gone (personas are launch-flagged off; when they return +// the persona surfaces on hover, not as a second line). +test("recent session rows render the title only — no persona subtitle", async ({ page }) => { + await page.goto("/"); + const row = page + .locator(".sidebar .group") + .filter({ hasText: "Draft the launch note" }) + .first(); + await expect(row).toBeVisible(); + const text = (await row.innerText()).trim(); + expect(text).toBe("Draft the launch note"); +}); diff --git a/surfaces/gui/src/components/Sidebar.tsx b/surfaces/gui/src/components/Sidebar.tsx index f4e3cef7..0b532f95 100644 --- a/surfaces/gui/src/components/Sidebar.tsx +++ b/surfaces/gui/src/components/Sidebar.tsx @@ -348,12 +348,6 @@ export function Sidebar(props: Props) { ) .sort((a, b) => (b.updated_at || "").localeCompare(a.updated_at || "")); const [slackOpen, setSlackOpen] = useState(false); - const personaLabel = (agentId: string) => { - const p = personas?.find((x) => x.id === agentId); - return shortPersonaName(p?.name, agentId); - }; - - // A row in the account menu (§26): closes the menu, then runs the destination. const appMenuItem = ( icon: IconName, @@ -602,9 +596,10 @@ export function Sidebar(props: Props) { ); }; - // A 2-line card row (mock §141 list-flat): an optional persona icon tile + title + a - // persona/channel subtitle + right-side indicators, with the ⋮ actions kebab revealed on hover. - // Shared by the flat layout's Pinned (no icon) and Recent (with icon) sections. + // A single-line card row (mock §141 list-flat, subtitle dropped 2026-07-21): title + + // right-side indicators, with the ⋮ actions kebab revealed on hover. Shared by the flat + // layout's Pinned and Recent sections. Personas are disabled for the first release; when + // they return, surface the persona on hover (e.g. in the row tooltip) — not as a subtitle. const cardRow = (s: SessionInfo) => { const active = s.session_id === props.activeSession; const title = s.title || s.session_id; @@ -614,12 +609,6 @@ export function Sidebar(props: Props) { if (next && next !== title) props.onRenameSession(s.session_id, next); setEditingId(null); }; - // Subtitle (deliberately quiet): just the persona label + the workspace basename for - // project-scoped personas (a real folder). No channel/subscription detail — connectors show as - // the dot indicator on the right, so the subtitle stays clean. Scratch/orphan personas omit the - // workspace (it's an ugly per-conversation hash). - const subParts = [personaLabel(s.agent)]; - if (s.workspace && isProjectScoped(personaOf(s.agent))) subParts.push(baseName(s.workspace)); return (
- {/* No leading glyph on session rows — the persona shows in the subtitle (Rohit's call - 2026-07-07: the per-session icon read as noise in both grouped and chronological). */} + {/* No leading glyph on session rows (Rohit's call 2026-07-07: the per-session icon + read as noise in both grouped and chronological). */} {editing ? ( ) : ( <> - - {title} - {subParts.join(" · ")} + + {title}