A dismissed cycle currently opens into a paragraph. This is what it looks like if it opens into a second rail instead — smaller dots, hanging off the row that dismissed them.
2026-08-28 · prospect detail → “Following up automatically” · round 2, after the caret and indent notes
Both of your notes were right, and they were the same mistake twice. I argued the child indent should be derived from the label column — then broke that column with a leading caret, and indented the child chain a second time on top of an inset it already had. Both fixed below.
| Your note | What was wrong | Now |
|---|---|---|
| “the text is not left aligned” | A leading caret pushed that row's label off the 20px column every sibling holds. | Caret moved to the trailing edge. Label back on the column. |
| “doesn't need to be further indented” | The panel is already inset by the row; I indented the chain again inside it, so it sat 37px in. | Child dots start at the panel's own left edge — no second indent. |
Switch the trailing control to compare. The blue line is the label column, drawn so alignment is visible rather than claimed.
2 of 5 sent
Sent · Aug 20
Sent · Aug 22
Dismissed due to activity — the lead moved on, so these never went out.
Scheduled · Sep 2
The house disclosure convention really is caret-first — ConversationDetailsDisclosure says so in as many words, and CheckpointSection follows it. But those are standalone headers, where nothing else has to line up with them.
A rail row is the one place that convention can't hold: its labels form a column, and anything ahead of the label breaks it for one row only. So the rail is a principled exception, not a preference — and trailing is the conventional accordion position anyway.
The row was going to carry a count at the trailing edge regardless. Two separate right-hand elements read as two things; 3 unsent › reads as one, and the count is the actual reason to open it. It also answers “the caret should look different” — it's an attached control rather than a glyph floating at the edge.
The panel already sits inside the row's 20px inset, so the child dots start at the panel's own left edge and land on the parent's label column with no offset of their own. Round 1 added 17px on top of that — the argument was right and the CSS didn't follow it.
2 of 5 sent
Sent · Aug 20
3
Dismissed due to activity — the lead moved on, so these never went out.
Scheduled · Sep 2
Three touches that occupy real positions in a cadence, rendered as a two-column list. Nothing says they were steps, and nothing ties them to the row that cancelled them.
And nothing says it opens. An expandable rail row is a real <button aria-expanded> — a keyboard and a screen reader find it — but it draws no glyph at all. That's the gap behind your question, and it's a defect rather than a preference: the affordance exists for assistive tech and is invisible to everyone else.
So the nested chain separates by size and position — 6px against 10px — not by becoming a different kind of mark. Two sizes of one dot read as parent and child; two shapes would read as two unrelated systems. Every nested dot is grey because the brand run is earned by happening, and none of these did.
Geometry mirrored from TimelineRail.tsx and timeline-dot.ts · specimens at the real 358px sidebar width · mock data, no real lead.