Conversation
Core decodes the stream commands, events, slices and consumed ranges only when its vendored api carries them. The type maps in the protos crate name the two new commands and events, which are not ignorable.
A consumed stream range reaches lang as its own job. The Rust SDKs have no stream API yet, so they fail the activation rather than drop records the server will not send again.
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 brings the native stream api into Core and adds the job that hands a workflow a consumed stream range.
What changed?
StreamSlice,StreamRange,StreamStartPosition, the subscribe and append commands and events,consumed_stream_rangeson the Workflow Task completed event andstream_sliceson the poll response.streampackage gets its serde derives and its module.StreamRecord.bodyand.metadataaren't checked against the blob limit. Records never reach an event, and the server bounds a batch by message count instead.DeliverStreamRecordsis a new activation job. The Rust SDK and the Rust workflow runtime have no stream API, so they fail the activation instead of ignoring it.Part of AI-198 (epic AI-37).
Why?
Core can only decode the stream fields on a poll response or a completed event once its vendored api carries them. The job comes first so the machines and the delivery can build on it in the next two PRs. Failing in the Rust SDKs is on purpose: the server has recorded the range as consumed and won't send it again, so dropping it would lose data without a trace. There are no commands here yet, so nothing can subscribe through this PR alone.
How did you test it?
Link to a test plan if any -
The workspace builds,
cargo lint,cargo test-lintandcargo fmt --checkare clean, and both commits build. The protos, common, client, SDK, workflow and Core unit tests pass. The vendored files are byte-identical to the api PR.