Tool-call cards and grouping, with the state a result never arrived in
P1b (docs/RUST.md). `transcript-ui/src/tool.rs` draws a card per tool call and a group per run: collapsed, a card is its name and the one-line summary `parse_tool_input` derives; open, it is the description, the input (highlighted, on the verbatim surface) and the output, capped with a "Show all N lines". A run is one surface with a heading and a chevron bar at its foot, so it closes from either end. Three things worth knowing. **A collapsed card lays out its summary line and nothing else.** The fixture's tool outputs are tens of kilobytes and a collapsed card never builds a widget for one -- `collapsed_cards_shape_only_their_summary_ lines` opens a three-card group over 88 kB of output each and asserts the text-shape count equals the same group's over three bytes (17 either way; 17 against 20 when the discipline is deliberately broken, so the test is real). **A result arriving replaces one card.** `ToolRow::apply_calls` is the group's half of `RowBlocks::apply_delta`'s rule, and `build_row` now hands back one `TailRow` -- blocks for a message, cards for a run -- rather than two mechanisms chosen at each call site. **Every tap is a tap**: `GestureOutcome::Tapped` out of the `DragArbiter` `Selection` already owns, so a drag that started on a card scrolls the transcript instead of opening it. Three defects found by looking at the render, all recorded with their repro in docs/IRIS_TODO.md: a `Span` of padded children inside another `Span` places them a slot out of step (worked around by building the group as one span, which costs the 4dp inset); `scrollable_on(Axis::X)` on a non-editable text draws nothing, so a card's command is clipped rather than pannable; and `NotoSans-Regular` has no U+25B8/25BE/25B4 at all, so the expander mark is set in the monospace face. Screenshots: docs/bench/p1b-2026-09-06/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
b332873894
commit
7e7cbb5402
13 files changed
+356
-111
No files matched your search
@@ -5,6 +5,45 @@ they can be judged and reversed later. Detail lives in RUST.md (and IRIS.md
|
||||
for iris API changes); this file is only the summary. Newest first. Items
|
||||
marked **DEFERRED** are ones the agent chose not to decide alone.
|
||||
|
||||
## 2026-09-06 (how a tool call looks, P1b)
|
||||
|
||||
- **A card that never got a result says "no result", in yellow, and it is
|
||||
a state Compose cannot say.** A call that finished having printed
|
||||
nothing and a call whose turn was interrupted before anything came back
|
||||
both leave an empty output. Compose draws both as an ordinary finished
|
||||
call, which reads as a fact somebody established. There are five states
|
||||
now, each with a word and a colour: nothing at all for a call that
|
||||
worked, "running" (grey), "your turn" (peach, Compose's own wording and
|
||||
colour), "failed" (red), "no result" (yellow).
|
||||
|
||||
- **A failed call is drawn as failed, which needed a field on the wire.**
|
||||
`is_error` is on the CLI's `tool_result` and was being dropped; the
|
||||
server now carries it to the phone. Reversible, but the alternative is a
|
||||
card that says a call succeeded because it cannot tell.
|
||||
|
||||
- **A group's cards do not each carry their own surface.** Compose gives
|
||||
each card a fill and squares the corners where it faces a neighbour, so
|
||||
a run reads as one object broken into parts. iris has no per-corner
|
||||
radius, and -- more to the point -- a group built the way Compose builds
|
||||
it hit a framework layout defect that drew every card's text a card
|
||||
below its own box. So a group is one surface with its cards on it,
|
||||
separated by a small gap, and the 4dp inset Compose holds them off the
|
||||
edge by is gone. Worth revisiting once the layout defect is fixed
|
||||
(docs/IRIS_TODO.md).
|
||||
|
||||
- **A long tool output is capped at 80 lines or 4 kB with a "Show all N
|
||||
lines".** Compose draws the whole thing, and gets away with it because
|
||||
its `Text` inside a `LazyColumn` lays out lazily; here the output is one
|
||||
text widget and shaping a hundred kilobytes of it costs what the file
|
||||
editor's 32 kB limit was measured against. If iris's text gets cheaper,
|
||||
this is the number to move.
|
||||
|
||||
- **A card's command is clipped, not pannable, and its summary line is
|
||||
clipped rather than ellipsised.** Both are framework gaps rather than
|
||||
choices (`scrollable_on` on a non-editable text draws nothing; there is
|
||||
no overflow ellipsis), and both are worse than Compose today. Named here
|
||||
because they are visible.
|
||||
|
||||
## 2026-09-06 (how a markdown block looks, P1a)
|
||||
|
||||
- **A table is drawn as padded monospace columns, not as a grid.** Your
|
||||
|
||||
Reference in new issue
Block a user