add broker abstraction for message passing (redis-ready)
introduces broker module with similar pattern to database backend:
- Broker union type with memory and redis variants
- Message struct with id, topic, data, attributes, timestamp
- Publisher/Consumer interfaces for pub/sub pattern
- BoundedChannel generic for in-process message passing
- MemoryBroker implementation using bounded channels
- RedisBroker stub for future Redis Streams implementation
infrastructure changes:
- main.zig initializes broker on startup (PREFECT_BROKER_BACKEND env var)
- test script: scripts/test-broker-backends
- justfile: `just test-broker [memory|redis|all]`
the broker is initialized but not yet wired into event_persister or WS
subscribers - this sets up the foundation for incremental migration.
๐ค Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>