Skip to content

Transcript rail: ten ticks at most; hovering opens the prompt list - #1034

Merged
wingleeio merged 2 commits into
mainfrom
zeron/transcript-rail-popover
Oct 25, 2026
Merged

wingleeio merged 2 commits into
mainfrom
zeron/transcript-rail-popover

Conversation

@zeronsh

@zeronsh zeronsh Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

In long conversations the rail had become a dense comb of one tick per prompt. Now it draws at most 10 ticks, and resting the pointer on it replaces it with a list of every prompt, the pattern shadcn recommends from ChatGPT web. Each entry shows the prompt and the opening of its reply.

Rail

  • Up to 10 prompts, one tick each, as before. Past 10, each tick stands for an even slice of the conversation, lit while any of its prompts is on screen.
  • The rail now centres between the titlebar and the composer, the same band the list opens in.
  • Lighting fix: while the transcript is pinned to the bottom, the list reported no row positions, so only the prompt being read lit up. Rows are now placed from the content's end in that state, so every prompt on screen lights its tick and its list entry.

Prompt list (on hover)

  • Opening: it opens after the pointer rests on the rail for 150ms, so passing over it on the way to the sidebar doesn't flash it open. It closes when the pointer leaves.
  • Content: each prompt on one line, with its reply's opening on up to three. Replies are reduced to prose (no **, backticks or link targets).
  • Size and position: it opens where the rail is, replacing it. It's at most three quarters of the band's height, and sizes to the gutter left of the reading column (260 to 320px) to overlap the transcript as little as possible.
  • Navigation: clicking an entry glides the transcript to that prompt and the list stays open. Prompts on screen are highlighted. It opens on the prompt being read.
  • Virtualized once it can't fit, so very long chats only lay out the rows in view. A short conversation's list hugs its content. Only rows whose text changed, such as a streaming reply, get re-measured.

These screenshots are from the real app, with a 24-prompt conversation pinned to the bottom. The rail, with every on-screen prompt lit:

Resting on it:

After clicking How do I tell the bakery the oven grant was denied?: the transcript jumped and the list stayed open:

A three-prompt conversation, where the list fits its content:

Notes

  • The old one-tick-per-prompt rail with fisheye hover and a single-preview card is gone. The list gives every prompt a target.
  • I also checked a real pointer passing quickly across the rail: the list stays closed.
  • Not included: a search field and arrow-key navigation in the list.

Tests: rail:: and transcript:: UI tests (145) pass. New tests cover the 10-tick slicing (gapless, covers every prompt), the gutter-fitted width, stripping Markdown from reply previews, and the list re-measuring only rows that change as replies stream, prompts arrive or the conversation is rewound. Clippy is clean.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

wingleeio and others added 2 commits October 25, 2026 08:43
Past ten prompts the rail stops compressing one tick per prompt into a
dense comb: it draws ten, each standing for an even slice of the
conversation and lit while any of its prompts is on screen.

Hovering the rail now replaces it with a list of every prompt (the
ChatGPT-web pattern): each prompt with the opening of its reply, three
lines each, Markdown stripped to prose. Clicking one glides the transcript
there and the list stays open, highlighting what's on screen; it closes
when the pointer leaves. It opens on the prompt being read, sits in the
band between the titlebar and the composer (where the rail now centres
too, so it opens under the pointer), and is virtualized once it can't fit
that band, with a short conversation's list hugging its content.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: zeronsh[bot] <346184242+zeronsh[bot]@users.noreply.github.com>
…tter

- The list opens once the pointer rests on the rail for 150ms, so passing
  over it on the way to the sidebar no longer flashes it open.
- Prompts keep one line; replies keep three.
- The list is capped at three quarters of the band it opens in.
- It sizes to the gutter left of the reading column (260–320px), so it
  overlaps the transcript as little as it can.
- Glued to the bottom, the list reports no row bounds, so only the prompt
  being read lit up. Rows now place from the content's end there, and every
  prompt on screen lights its tick and its entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: zeronsh[bot] <346184242+zeronsh[bot]@users.noreply.github.com>
@wingleeio
wingleeio merged commit a4187fd into main Oct 25, 2026
22 checks passed
wingleeio added a commit that referenced this pull request Oct 25, 2026
…ail (#1049)

* Transcript rail: back to one tick per prompt; long chats scroll the rail

Reverts #1034's ten-tick rail and hover prompt list. The rail draws every
prompt at its natural spacing again; once the stack outgrows its window
(70% of the band, at most 640px) it scrolls like Codex's prompt rail:
wheel over it, edges fade, and it follows the prompts on screen when those
change. Keeps #1034's band centring and the pinned-to-bottom lighting fix.

Adds the rail-fixture example (offline long chat, --capture films it).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: zeronsh[bot] <346184242+zeronsh[bot]@users.noreply.github.com>

* PR screenshots (removed in the next commit)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: zeronsh[bot] <346184242+zeronsh[bot]@users.noreply.github.com>

* Remove PR screenshots

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: zeronsh[bot] <346184242+zeronsh[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: zeronsh[bot] <346184242+zeronsh[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant