Two placements. The connection state moves out of the bottom row to sit between the log and the line you type on, drawn with the same braille mark the terminal traces use — the spinner while it is working, that motion's completed path for everything else. And a message's delivery receipt moves from the right of its text to the bottom of the message's own block.
Screenshots of the real component, driven against a real server: the states are produced the way the product produces them, not by setting classes.
The app's own words for the three states are working, listening and
not connected (REMOTE_STATE_LABEL) — a remote agent has no process here to be
"stopped", only a connection that is or is not there.
A screenshot cannot show the spinner moving, and the braille is the point. These are drawn from the app's own stylesheet, in this page.
The mark is the app's state vocabulary — one measured contract for the spinner's type, cell and ink, and the still path derived from it. Nothing new to keep in sync, and no second thing that also means busy.
| Fact | Was | Now | Why |
|---|---|---|---|
| state (working / listening / not connected) | bottom row | above the input | it changes second to second and it is what you check before typing |
| harness · working directory · host | bottom row | bottom row | identity, not state — CLI bottom-row furniture |
| last seen | bottom row | bottom row | keeps one place that narrates time; on the state row it would say when in two voices |
| ↵ send · ⇧↵ newline | bottom row | bottom row | a keyboard legend, not a state |
| the state word in the bottom row | led the row | gone | it moved; a copy left behind would say the same word twice, forty pixels apart |
The header keeps its StateLogo — the CLI tile whose frame carries the state, which every pane in
the app has and the sidebar matches. The new row is the one with a word. Different shapes at opposite
ends of the pane: which agent this is, and what it is doing right now. Terminal panes already
pair a header mark with a working line in the body; this is that pairing. If it still reads as one too many,
the header logo is the one to drop, because the new row says more.
pending → delivered happens live, under a log pinned to the bottom. Both receipts are one element at one line height, so the swap changes the words and the colour and never the block's height. Measured in the running app: 727px into a 1351px log, the scroll position is identical before and after. Give the two receipts different heights and the log shifts by 2px — which is how that check was proved to work.
Both states still come only from the highest sequence number a poll actually returned: the agent either has this message or has not collected it yet. Nothing claims the agent read it, and moving the mark below the text does not make it claim more. delivered is the word for what the field records.