First-class hat blocks

no need, you can relabel the (new) generic When "event" hat block into the old When "rule" block through its context menu, and then you'll see the infinity "always" symbol again. Also in your existing projects any old "When" blocks will still have the old semantics (and display the "always" symbol).

The difference is roughly this: By default all hat blocks are "event" hats, they signal a state change the very moment their predicate changes from evaluating to false to evaluating to true. Afterwards, for as long as it remains true, they won't fire again, until it switches back to false.

"Rule" hats, on the other hand, are what the generic "When" hat block used to be (and at this time still is in production): Syntactic sugar for "forever .. if ...". A "rule" hat will repeatedly (always) fire its script whenever its predicate evaluates to true.

In practice you'll almost always want events instead of rules.