Because unsafe operators are the only place where non-determinism due to asynchrony is exposed, we can write deterministic unit tests if the developer defines their behavior. For example, the boundaries of batching, or which snapshot of a singleton is revealed. We can do this with a hooks API that gives developers a type-safe handle to individual unsafe operators.
Depends on #1874
Question: what happens if an unsafe operator does not have a hook defined? Should it just execute randomly (like iteration over hash collections)?
Because unsafe operators are the only place where non-determinism due to asynchrony is exposed, we can write deterministic unit tests if the developer defines their behavior. For example, the boundaries of batching, or which snapshot of a singleton is revealed. We can do this with a hooks API that gives developers a type-safe handle to individual unsafe operators.
Depends on #1874
Question: what happens if an unsafe operator does not have a hook defined? Should it just execute randomly (like iteration over hash collections)?