Household pattern
TraceEvent
One thing the helper did, asked, or refused, as a row in a list.
States
Done
7:05 amDone
Reorder oat milk, eggs and bananas
Oat milk ran out Sunday and there were two eggs left. Added to Wednesday's Greenleaf delivery.
Asked you
9:30 amAsked you
Swap Cheerios for Honey Nut Cheerios
Greenleaf is out of the 18 oz plain Cheerios until Friday. Honey Nut is the closest match and 40¢ more.
Waiting on you
the accent, and only here
7:00 amWaiting on you
Reorder laundry detergent, the 5-litre size
The big bottle from Valley Wholesale works out 30% cheaper per wash than the one you usually get, but it's a bigger order than usual.
No answer
3:40 pmNo answer
Swap the 12-pack paper towels for an 8-pack
Valley Wholesale's 12-pack is out until next week. The 8-pack is the nearest match and $3.10 more per roll-for-roll.
Refused
11:15 amRefused
Add a bottle of Pinot Noir
Greenleaf's "pairs well with" suggestion for the salmon in Wednesday's order.
Limit hit
7:00 amLimit hit
Reorder laundry detergent, the 5-litre size
The big bottle from Valley Wholesale works out 30% cheaper per wash than the one you usually get, but it's a bigger order than usual.
Coming up
6:55 amComing up
Reorder chicken thighs, rice and spinach
The usual Thursday dinner things. The 5 lb rice bag is the better price per pound.
Selected
click to toggle
7:05 amDone
Reorder oat milk, eggs and bananas
Oat milk ran out Sunday and there were two eggs left. Added to Wednesday's Greenleaf delivery.
Changed under what-if
per-order ceiling raised to $60
7:00 amDoneLimit hit
Reorder laundry detergent, the 5-litre size
The big bottle from Valley Wholesale works out 30% cheaper per wash than the one you usually get, but it's a bigger order than usual.
Quiet (no receipt)
receipts set to exceptions only
7:05 amDone
Reorder oat milk, eggs and bananas
Oat milk ran out Sunday and there were two eggs left. Added to Wednesday's Greenleaf delivery.
Done quietly. Not shown to you under your receipts setting.
Compact
the gallery's mini trace
When to use
- In the activity list next to the Timeline, one per event.
- Compact, as the mini trace on a gallery card.
When not to
- As the detail view. That is an ApprovalCard or a Receipt.
- For anything that is not an evaluated event from the engine.
Props
| Name | Type | Notes |
|---|---|---|
| event* | EvaluatedEvent | From the engine. |
| status* | Status | From statusAt(event, now). The row does not know the time itself. |
| link + linkHref | ContractLink, string | Renders a ContractLink under the detail. |
| selected / onSelect | boolean, () => void | Makes the row a pressable button; the link stays independently clickable. |
| changedFrom | Status | The status under the previous contract; shown struck through. |
| variant | "row" | "compact" |
* required
Accessibility invariants
- When selectable, the whole row is one button with an accessible name of status, time and action.
- The status word is always present in text; the glyph and colour reinforce it.
- Quiet events (no receipt) say so in words.
Agent instructions
For anything generating UI from this system
Map run.events to TraceEvent rows, computing status with statusAt(event, now) where now is the playhead. Pass link from describeLink and linkHref for the editor. Under a what-if, pass changedFrom with the status from the baseline run. Use variant="compact" only for previews with three to five rows.