Problem
`drain()` processes leases in FIFO order per stream. There's no way to mark a particular reaction as time-sensitive — a slow audit-log reaction can sit in front of a customer-visible "OrderConfirmed → SendEmail" reaction on a busy stream.
Proposed solution
Add a `.priority(n)` modifier on the reaction builder (default 0; higher = sooner):
```ts
slice()
.on("OrderConfirmed")
.do(sendEmail)
.priority(10)
```
`claim()` orders leases by `max(priority across pending events on that stream)` descending, then by stream id for stability.
Acceptance criteria
Out of scope
- Multiple lanes / dedicated worker pools per priority (consider after we see usage)
Problem
`drain()` processes leases in FIFO order per stream. There's no way to mark a particular reaction as time-sensitive — a slow audit-log reaction can sit in front of a customer-visible "OrderConfirmed → SendEmail" reaction on a busy stream.
Proposed solution
Add a `.priority(n)` modifier on the reaction builder (default 0; higher = sooner):
```ts
slice()
.on("OrderConfirmed")
.do(sendEmail)
.priority(10)
```
`claim()` orders leases by `max(priority across pending events on that stream)` descending, then by stream id for stability.
Acceptance criteria
Out of scope