Repository navigation
Put the trigger in the session header's action row, not the overlay layer
The one-click graph button was registered in shell.overlay, and the first fix
for it moved the CSS instead of the seat. The slot catalog is explicit about what
that seat is for: "Frame-wide floating layer, above every column and outside their
scroll containers... a badge, a toast stack or a status pill all belong here", and
the layer is click-through by design so an overlay never blocks the app
underneath. A BUTTON registered there is wrong twice over:
- it is drawn in the window's top-left, beside the Application/Edit menus and the
sidebar's reopen control, so it reads as a stray icon in the window chrome; - it cannot be clicked without opting back into pointer events, because the layer
ispointer-events: none.
It now registers in conversation.session.header.actions, the title-adjacent row
the shipped jobs, subagent, agent-preset and agent-team controls occupy, and it
copies their metrics rather than inventing a look: borderless, transparent, at
least 28px, --dsw-radius-sm, tertiary label colour at rest and secondary on
hover, with the open state keeping its brand tint through data-state. The icon
is icon-only in that row, so it now carries aria-label beside its tooltip. The
seat is a named constant (TRIGGER_SLOT), and the comments that described a
top-right frame trigger are gone with the seat.
Verification: node tests/activate.mjs, all checks passing. The gate now asserts
the trigger is in the header action row, that nothing of this plugin is registered
in shell.overlay, and that the action names itself.