StrictMode-safe lifecycle hook for framework bindings.
React 18+ StrictMode intentionally mounts → unmounts → remounts
components in dev to surface effect-cleanup bugs. A naive
useEffect(() => () => controller.dispose()) would permanently
tear the controller down on that first synthetic unmount, leaving
every subsequent submit() a silent no-op.
Call activate from the bind site's effect and return the
result as the effect's cleanup. The controller uses deferred
disposal: a release() only schedules a dispose on the next
microtask, which is cancelled if another activate() arrives
before it fires (the normal StrictMode remount path).