Both `^` and `|` means or the difference is in assigns. `|` will create array of size 3 and fill first or second and third  position based on which branch is a successful match. `^` will create array of size 2 and fill first or first and second  based on which branch is a successful match.

I agree `Event.(:event)` is a weird shortcut for `Event.(any, any, ~any, any)` lets have a discussion over coffee ;) I would like to avoid supporting `~:event` because method `~` would have to by defined on `Symbol`. But it also supports `Event.(event: ~any)` so ahat would you say to following?
``` ruby
match message,
      Work::Step.(step: ~any) ^ Work::Event.(step: ~any, event: Event.(event: ~any)) >-> step, event do
        step.execute event
      end,
      Work::Finalize.(~any, any) >-> sequential_manager do
        sequential_manager.finalize
      end
```