update Frame
Producer-facing: replace the current frame.
The single write path for the frame. The transform runs on the producer's own frame — with the isVisible the producer last asked for, not the published one — and what is published is that request combined with the host's veto from setMainToolbarHostVisible. So a transform never sees, and cannot bake in, the veto, while ToolbarFrame.isVisible on frame is always the effective value a renderer should follow.
TODO(Phase 0): wire this to the ToolbarPipeline stages so that customer transforms registered via the public API run at the right moment (loophole P1-11).