Chat status affordances — design options

Four options for the queued / running indicator with clear cancel + play controls, plus a unified icon language that fixes the overlap between the roadrunner ("explained") icon and the trash icon. Hover a bubble to reveal its actions. Tell me which option number you'd like and I'll implement it in chat-ui.

Option 1 — Inline action chip recommended

The status pill carries its own control: a spinner + Stop button while running, a Play + × pair while queued. Compact, lives where the status already lives, and the control's meaning matches the state.

R
queued
@collision optimize validate --workdir D:\collisions2
R
running
@collision optimize validate --workdir D:\collisions2

Option 2 — Hover action bar (unified icon row)

One consistent row of circular icon buttons revealed on hover: roadrunner (explained), play / stop for queue control, and trash. Same button style for every action — fixes the overlap because they share one flex row instead of stacking absolutely. A tiny text label keeps the state legible.

R
running @collision optimize validate --workdir D:\collisions2
R
queued @collision optimize validate --workdir D:\collisions2
explained run now cancel trash

Option 3 — Status footer bar

Status and controls sit on a slim bar below the bubble so they never collide with the avatar or the roadrunner icon. Roadrunner stays in its corner; actions are a clean trailing group. Good when bubbles are dense.

R
@collision optimize validate --workdir D:\collisions2
running
R
@collision optimize validate --workdir D:\collisions2
queued · position 2

Option 4 — Pill button (state = action)

The whole pill is the button. Click "running" to cancel (turns red on hover), click "queued" to run now. Minimal chrome; the roadrunner + trash use the same circular icon button in a hover row so the visual language stays consistent.

R
@collision optimize validate --workdir D:\collisions2
R
@collision optimize validate --workdir D:\collisions2