fix: put the recall chip in the header utilities, not the cell the sidebar's expand button owns
Release / release (push) Successful in 6s
Release / release (push) Successful in 6s
The chip registered into `conversation.session.header.corner`, which is a
SINGLE cell the product already occupies: the client catalog lists its
occupants as `client-ui-sidebar-right ExpandButton` and its replaceRisk as
`shadows-shipped-ui`. Two registrations at priority 0 in a single cell are a
hard error inside the slot registry, and the error lands in the OTHER
plugin's `slots.inject()` callback: the renderer's `changed` handler catches
it, calls `stop()` on that inject controller — killing that contribution for
the rest of the fiber's life — and rethrows it from a microtask, which is the
uncaught `single slot ... already has a registration at priority 0 (registered
by dsh-recall)` in the console. So the chip was not merely racing the shipped
right-sidebar expand control; it was taking it down.
It now registers into `conversation.session.header.utilities`, a list cell
(`replaceRisk: none`, right-aligned, same Session scope and therefore the same
`useProjection` prop) as `{ id: 'dsh-recall', order: 20 }`, so it stays at the
right-hand end without competing for a seat.
The suite could not have caught this: the slot stub accepts any registration
and knows nothing about cardinality, keys or collisions. It now asserts the
chip carries a list id and that this plugin registers nothing into the corner.
This commit is contained in:
1 parent
811871e978
commit
28df7a0e56
3 files changed
+61
-26
No files matched your search
@@ -146,18 +146,20 @@ Parameters: `query`, `action`, `limit`, `path` (restrict to a subdirectory),
|
||||
|
||||
Two surfaces, both reading a host projection rather than polling:
|
||||
|
||||
- a **chip in the session header** — `Recall 3 · 40× · 457 KB kept out`. No price
|
||||
on it, deliberately: at the measured rate a whole conversation's avoided
|
||||
context is a fraction of a penny, and a chip advertising that reads as the tool
|
||||
being useless rather than as the arithmetic being honest. The tooltip carries
|
||||
the full comparison.
|
||||
- a **chip in the session header's utilities** — `Recall 3 · 40× · 457 KB kept
|
||||
out`. No price on it, deliberately: at the measured rate a whole conversation's
|
||||
avoided context is a fraction of a penny, and a chip advertising that reads as
|
||||
the tool being useless rather than as the arithmetic being honest. The tooltip
|
||||
carries the full comparison.
|
||||
- a **right-sidebar Recall tab** — the same figures with room for what they are
|
||||
not: *"An estimate, and an upper bound: it assumes a whole file would have been
|
||||
read each time. Token counts are bytes ÷ 4."*
|
||||
|
||||
Both render nothing when there is nothing to say — a conversation that never used
|
||||
recall costs no layout at all, which matters for the header corner because the
|
||||
framework lays it out only while its occupant renders something.
|
||||
recall costs no layout at all. The chip is an entry in the header's `utilities`
|
||||
list, carrying its own id. The far-right corner is deliberately left alone: it is
|
||||
a single cell that the product's own right-sidebar expand control occupies, so a
|
||||
registration there shadows shipped UI rather than sitting beside it.
|
||||
|
||||
The data path is `presentationMeta` → the `tool/result` event's `meta` → a
|
||||
projection unit (`recallUsage`) with a wire view the browser reads through
|
||||
|
||||
Reference in new issue
Block a user