feat(panel): Inbox thread heads are the writer's chip, its face on the thread's line
Builds design A · Chip on the rail, the one the developer picked, and drops "draft" after "You".
What changed
- Each comment's head is the standard chip. It uses
ActorRefwithoutnameOnly, so the face and name are one target that hangs the standard card (actorCard). The agent usesAgentActorRef, so it gets its tile and its tab's card, the same as everywhere else. The time follows the chip. - The chip's face is the gutter.
Commentno longer draws a separate face column. The head starts 2px in, so the chip's 16px face sits centred on the thread line at the same x as the old 20px gutter faces. The name and time run to its right, and the body keeps its old indent (--inbox-face+ 12px). - The line runs through the faces. Each comment draws the line from its own face down to the next comment's face. Each head sits above the line (
z-index: 1), and the face's ring in--luke-color-groundmasks the line, the same way facepile faces are cut from the ground. Bare squares (agents) and "someone" outlines are filled with the ground so the line never shows through their glyph. A member who left keeps their own tile. On hover, the ring takes the wash's colour so it doesn't show as a white halo. - The draft reply's head is the reader's "You" chip with nothing after it: no "draft" and no time.
- Narrow widths: the head stays on one row. The writer's name truncates with an ellipsis first. What follows the time ("· Sent to Alerts") wraps beside the chip only after that, so nothing wraps underneath onto the line.
- The older single-item layout (items from before thread version 5) uses the same
Comment, so it gets the same treatment. AgentActorRef'snameOnlyprop had no callers left, so I removed it.
Kept as is
The answered controls in the reply, the markers (#4289 has since dropped the thread's "Waiting on you" marker on main; the rest are unchanged), the stamp-less reply, files after words, and the title in the top bar. I didn't touch the composer's internals.
Session replay
The name is still drawn by InlineRef's label, the same element as before, inside .inbox-board.ph-no-capture, and session replay masks every word. The face is the same ActorMark, whose picture address is masked as before.
Tests
desktop-inbox.test.ts:
- New test: each comment's head holds its writer's chip with its face (agent, person, and the draft's person). No face is drawn outside the head or body. The draft head reads exactly "You". This test fails on
main. - The existing face assertions now look for the face in the head chip (
.inbox-comment-head [data-actor-ref] .actor-mark). The draft-head expectations change from "Youdraft" to "You", and the draft head has only the name part. Onmain, 16 tests fail against these expectations. On this branch, all 176 pass.
Screenshots
The thread has the agent's question, your answer, a teammate with a long name, the agent's follow-up, and the draft. I rendered it from the real component and stylesheets in Chromium. The dates read 1970 because the test clock is used.
| Before | After | |
|---|---|---|
| Wide (760px) | ![]() | ![]() |
| Narrow (320px) | ![]() | ![]() |
At narrow width, the long teammate name truncates and the time stays on the head's row. When the chip is hovered, the face's ring blends into the wash:
Made with Luke



