Skip to content

Give each queued follow-up its own row - #219

Open
shreeve wants to merge 1 commit into
egoist:mainfrom
shreeve:fix/queued-prompt-rows
Open

Give each queued follow-up its own row#219
shreeve wants to merge 1 commit into
egoist:mainfrom
shreeve:fix/queued-prompt-rows

Conversation

@shreeve

@shreeve shreeve commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Queued follow-ups in the composer painted over each other whenever one of them spanned more than one line.

Each row in the queued-message card was a fixed 30px box with its content vertically centred and truncate to keep the text on one line. truncate only stops soft wrapping: a hard newline still breaks the text into several lines, and centring those in 30px draws the extra lines over the rows above and below, and past the card's top edge. Any pasted terminal output or file tree in a follow-up did this.

This PR makes each row its own box:

  • the row grows to its text and clips anything past that, so it can never paint over its neighbours;
  • the queue icon and the controls are top-aligned with the first line instead of centred;
  • a hairline rule separates consecutive rows;
  • the text keeps its hard line breaks and wraps long lines, up to three lines with an ellipsis on the last, so a prompt is recognisable without the queue turning into a second transcript.

A one-line row still measures 30px, so the common case looks exactly as it did.

Before

Three queued prompts, the first two multi-line. Rows overlap and the first spills above the card:

before

After

Same three prompts with this change. Each row is bounded, top-aligned, and separated by a rule; the file tree is clamped to three lines:

after

Test plan

  • cargo test --lib: 372 passed
  • Reproduced in Waku Debug.app on main with three queued prompts (two multi-line), then confirmed the layout above after the rebuild with the same queue
  • Single-line queued prompts unchanged at 30px

@shreeve
shreeve force-pushed the fix/queued-prompt-rows branch from 6447a27 to 62017b6 Compare September 9, 2026 17:37
The queued-message card drew every follow-up in a fixed 30px row with
its text vertically centred and only `truncate` to keep it on one line.
`truncate` stops soft wrapping, but a hard newline still breaks the
text into several lines, and centring those in 30px paints the extra
lines over the rows above and below and past the card's top edge. Any
multi-line follow-up, a pasted terminal transcript or a file tree,
overlapped its neighbours.

A row is now its own box: it grows to its text, clips anything past
that, top-aligns the queue icon and the controls with the first line,
and a rule separates it from the row before. The text keeps its hard
line breaks and wraps long lines, up to three lines in all with an
ellipsis on the last, so a prompt is recognisable without the queue
turning into a second transcript. A one-line row still measures 30px,
so the common case looks as it did.
@shreeve

shreeve commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

The Ubuntu job here fails before any Rust runs: apt-get update on the runner image hits Google's Chrome apt repository and gets a Hash Sum mismatch, so "Install Linux dependencies" exits 100. It has failed the same way on three consecutive runs, and macOS passes on the same commit.

#220 removes that apt source from the workflow, so this PR needs #220 merged first before its CI can complete. Once #220 is in, I'll rebase this branch onto main and CI should go green.

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