Conversation
An activity's topics get one Redis stream each, keyed by the run its execution belongs to and the activity id, so a retry writes to the same stream and an id started again in a new run starts new ones. A read ends once the activity is terminal and the retained tail is delivered.
The shared activity suite runs on Redis when STREAMS_LIVE=redis, and the Redis module checks the key scheme, the run keying and when a read ends.
This was referenced Oct 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR lets an activity own streams on the Redis provider.
What changed?
RedisStreams.get_activity_stream_handle()returns a real handle instead of refusing.STREAMS_LIVE=redis, and the Redis module covers the key scheme and run keying.Part of AI-198 (epic AI-37).
Why?
The interface lets an activity write its own stream, and the server-side provider already keys those by run. An activity's append is visible as soon as Redis takes it. There's no workflow reading it, so there's no staging. The owner sits in one key component joined with
/, a character the chain keys never contain, so an activity's key can't collide with a workflow's.How did you test it?
Link to a test plan if any -
poe lintis clean. The streams suite withSTREAMS_LIVE=redis, which now includes the activity cases, passes against a channel server and a local Redis.