Conversation
An errored trace has no tokens, no cost and nothing in context, and the trace row rendered only the values it had. The cells that survived slid rightward into the columns the healthy rows spend on something else, so a list of traces stopped reading as a list: an error's duration sat under its neighbours' cost, its model badge under their context meter, and the card lost a line of height where the `output:` preview would have been. Give the header strip its own primitive. MetaStrip lays the cells out as fixed columns — the widths live in META_COLUMN, next to the compact ContextMeter's own 132px — and a cell with nothing to show keeps its column and prints a muted dash with a title saying what is missing, rather than dropping out of the row. Only the leading column sizes to content, which is safe because the strip is anchored at its right edge: a model name is the one value with no sensible fixed width. PreviewLines gains `hold` for the same reason, so a trace that errored before it answered still prints its `output:` line and its card stands as tall as the ones around it. Spans don't take it — a span's missing half is usually one the panel above already showed, and a dash there would deny content the span really carried. The Interactions session header is the same object header, with the same gaps when an interaction reported no tokens, so it moves to the strip too. Trace tokens now read "—" rather than "0 tokens" when nothing was recorded: a run that failed before the provider answered spent an unknown amount, not zero. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LM8AkEnmLvp6pW2qgCGtyd
|
Superseded by #471, which merged as 6fb8816. #471's first commit ( The only thing that differed was the compiled Closing rather than merging so the change isn't applied twice. |
Ports the MetaStrip from activeagents#470 so the evaluation runs list can keep its cost, movement and status columns aligned on every row — a failed run with nothing to put in a column prints a dash there rather than sliding its neighbours over. The trace and interaction lists take the same strip, as that change has it; the source is identical to the branch so it no-ops once activeagents#470 merges. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QmHbHdDkfVrg3WX95CnFhd
Summary
This PR refactors the metrics display logic in trace cards and interaction sessions into a reusable
MetaStripcomponent that maintains consistent column alignment across all rows, regardless of which metrics are present or missing.Key Changes
New
MetaStripcomponent inTelemetryObject.jsx: A grid-based layout component that renders a consistent set of metric columns (model, context, duration, tokens, cost, status, etc.) with fixed widths. Empty cells display a muted dash ("—") with explanatory tooltips instead of being omitted, ensuring all rows maintain visual alignment.New
META_COLUMNconstants: Defines fixed pixel widths for each metric column type (context: 132px, duration: 76px, tokens: 104px, cost: 88px, status: 68px, count: 96px, age: 76px).Updated
formatTokens()function inTraceCard.jsx: Changed to returnnullwhen no tokens are recorded (instead of "0"), allowing the MetaStrip to display a dash for missing data with appropriate messaging.Refactored
TraceCardmetrics display: Replaced inline flex layout withMetaStripcomponent, passing metrics as a structured cell array with content, width, title, and empty state descriptions.Refactored
InteractionsViewsession metrics: Applied the sameMetaStrippattern to session rows, ensuring consistent column alignment between trace cards and session cards.Enhanced
PreviewLinescomponent: Addedholdprop to optionally preserve empty preview lines (showing a dash) so that rows in a list maintain consistent height and label alignment, while still allowing individual expanded traces to omit missing values.Notable Implementation Details
MetaStripuses CSS Grid with column widths anchored at the right edge, allowing only the first column (model name) to size to its content while other columns maintain fixed widths.https://claude.ai/code/session_01LM8AkEnmLvp6pW2qgCGtyd