EntryDecoder
Turns a committed stream into the entry a handler receives. It runs inside the handler's retries, so a stream that cannot be decoded is retried and then parks its aggregate like a failing handler.
The post-commit state (StateEvent) comes with stateEvents, the decoder every state consumer of a context shares: the same code, not the same result. Each subscription decodes an entry's events itself, as each reader decodes a shared state afresh: the events are the application's classes, which may be mutable (a Java bean, a Kotlin class with a var), so one decoded instance handed to every processor would let one handler's change reach the others. The snapshot subscription and the sinks take the stored records and decode no event; what a processor's subscription decodes is that processor's alone.