ScrollStateObserver
Privileged owner-thread observer identity shared with one retained scroll node.
The runtime owns the handle and closes it during permanent node disposal. Calls are confined to the thread that owns the originating ScrollState, and release is idempotent.