From b32d872a52fc97fa7f34713c841bcff6d17fe776 Mon Sep 17 00:00:00 2001 From: David McKay Date: Sun, 8 Nov 2026 20:40:44 -0800 Subject: [PATCH] Keep a conversation's rail of turns clear of the Bot's replies The rail drew from a 768px scroller, sized for the old 672px column. The column is 768px now, so between 768px and about 850px the rail's marks sat on the first letters of the Bot's replies. It now draws from 896px, where the column leaves 64px either side for the marks and a gap. A real-browser test sweeps the widths and checks the text starts at least 24px clear of the marks wherever the rail draws. --- .github/workflows/ci.yml | 6 +- CHANGELOG.md | 2 + .../components/channels/transcript-rail.tsx | 8 +- .../transcript-rail-clearance.fixture.tsx | 52 +++++ app/tests/transcript-rail-clearance.test.tsx | 208 ++++++++++++++++++ 5 files changed, 269 insertions(+), 7 deletions(-) create mode 100644 app/tests/transcript-rail-clearance.fixture.tsx create mode 100644 app/tests/transcript-rail-clearance.test.tsx diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f96577d1e8..8620b3d9d4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,14 +159,14 @@ jobs: # The app's real-browser tests, here because this job has the browser: a running step's words # under reduced motion, where onboarding's Back lands beside the Mac window's buttons, the name # step's orb drawn whole under the step dashes, and the New Bot sheet's first four frameworks - # clearing its footer in an 800px window, which only a browser's layout resolves. The root - # playwright-core is the same version as + # clearing its footer in an 800px window, and a conversation's rail of turns clear of the Bot's + # text, which only a browser's layout resolves. The root playwright-core is the same version as # agent-computer's playwright, so it finds the Chromium installed above. The onboarding frame # reads the generated app config, which `bun test` alone doesn't write (the test script's # pretest does). - run: | bun run generate:app-config - bun test app/tests/tool-line-reduced-motion.test.tsx app/tests/onboarding-window-buttons.test.tsx app/tests/onboarding-orb-room.test.tsx app/tests/new-bot-sheet-fit.test.tsx + bun test app/tests/tool-line-reduced-motion.test.tsx app/tests/onboarding-window-buttons.test.tsx app/tests/onboarding-orb-room.test.tsx app/tests/new-bot-sheet-fit.test.tsx app/tests/transcript-rail-clearance.test.tsx env: OPENBOT_APP_BROWSER: '1' # Headed is the default for hosted computers, so it is tested as one: the computer starting its diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d9d58ddd9..9ceaad4eed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -168,6 +168,8 @@ deployment: host-grant-15407-… for shopper-bot". - An opened "Looked for a tool" step lists the tools the Bot found by name ("Send email on Gmail"), where it showed their ids and the descriptions the search returned to the Bot. +- The marks for each turn on the left of a conversation no longer sit on the first letters of a + Bot's replies. They show only where the window leaves room for them beside the messages. ### Personal edition diff --git a/app/src/components/channels/transcript-rail.tsx b/app/src/components/channels/transcript-rail.tsx index 3c8b82b3fb..60c9b1f004 100644 --- a/app/src/components/channels/transcript-rail.tsx +++ b/app/src/components/channels/transcript-rail.tsx @@ -40,9 +40,9 @@ export function sameRail(a: RailProps, b: RailProps): boolean { * Hovering or focusing a mark previews its turn — what the person sent, and the start of the * reply — and choosing it goes there. * - * Only where the margin is wide enough to hold it (`@3xl` of the scroller: the transcript's - * `max-w-2xl` column and a gutter either side), and only once there is more than one turn to move - * between. + * Only where the margin is wide enough to hold it clear of the messages (`@4xl` of the scroller, + * 896px: the transcript's 768px `max-w-3xl` column, and 64px either side for the marks and a gap + * after them), and only once there is more than one turn to move between. */ export const TranscriptRail = memo(function TranscriptRail({ turns, @@ -64,7 +64,7 @@ export const TranscriptRail = memo(function TranscriptRail({ return (