Parent
#256
Split
#265 was the original stream umbrella. After API lock it is SourceGenerators-only. Sibling slices:
What to build
Generator support that binds [RegisterCommandHandler] types implementing IStreamCommandHandler<TCommand, TItem> into the command registry/router glue, with Verify (and/or runtime) coverage. Non-stream registry paths remain valid.
Locked decisions
- Reuse
[RegisterCommandHandler] (generic + non-generic); detect stream via IStreamCommandHandler<,> contract
- Same command type cannot bind both stream and non-stream handlers (DP073 bijection)
- Contract mismatch for stream attribute without stream interface extends DP074 semantics (or reports existing DP074)
- Static / parameterless-ctor path; DI
RegisterDi for stream handlers when DI flag enabled (parity with non-stream if already generated)
- No stream pipeline behaviors
- No new diagnostic ID allocation unless DP073/DP074 cannot express the case (prefer reuse)
Acceptance criteria
Blocked by
Parent
#256
Split
#265 was the original stream umbrella. After API lock it is SourceGenerators-only. Sibling slices:
What to build
Generator support that binds
[RegisterCommandHandler]types implementingIStreamCommandHandler<TCommand, TItem>into the command registry/router glue, with Verify (and/or runtime) coverage. Non-stream registry paths remain valid.Locked decisions
[RegisterCommandHandler](generic + non-generic); detect stream viaIStreamCommandHandler<,>contractRegisterDifor stream handlers when DI flag enabled (parity with non-stream if already generated)Acceptance criteria
[RegisterCommandHandler]on stream handlers drives generated registry/router binding forSendStreamAsyncBlocked by