Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
4dcbfab
Vendored handler progress and told new callers of old records.
moetemp Oct 14, 2026
4be208e
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
f80dda2
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
a0874eb
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
e0728c5
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
24969fb
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
6bb46d6
Declared `read_range` and the read's floor holder in the contract.
moetemp Oct 14, 2026
74def5f
Held the floor on a Nexus read and answered the range that crossed.
moetemp Oct 14, 2026
a58f237
Served `read_range` through the codec step.
moetemp Oct 14, 2026
4c2c3b8
Noted the Nexus floor holder and `read_range` in the changelog.
moetemp Oct 14, 2026
41d2d86
Vendored and wired `ExecuteSyncNexusOperation`.
moetemp Oct 14, 2026
d1439c5
Keyed the `read_range` operation as `readRange` in the contract.
moetemp Oct 14, 2026
66a980d
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 14, 2026
130ada1
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 14, 2026
47d1a82
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 14, 2026
cd8f4cf
Told a trimmed start apart from other records in a replay read.
moetemp Oct 14, 2026
e966cfa
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 14, 2026
374aac5
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
0cff5ff
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 14, 2026
66bf369
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 14, 2026
ac744f9
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 14, 2026
9e26db3
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 14, 2026
a949dae
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
fb77c55
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 14, 2026
fc955b7
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 14, 2026
c486dee
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 14, 2026
1a37b6b
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 14, 2026
2d22018
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 14, 2026
2cc16ef
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 14, 2026
b07a4d9
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 14, 2026
761ab56
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 14, 2026
cad7b29
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 14, 2026
404fef4
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
4fdb0f5
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
91a22ba
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
103513c
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
5b28be8
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
4dfda57
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
eceede1
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
3937dd3
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
14689ef
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
b2fdeac
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
ea8c782
Said that AttachCaller announces only the newest record in the change…
moetemp Oct 15, 2026
882dd4f
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
91d03a3
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
0d36efb
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
e689213
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
7d4e540
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
10e0163
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
0a30075
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
c3628b4
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
4526f03
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
abb8d5e
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
392b1ed
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
c19514e
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
0efad5b
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
0b5bdb2
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
08eb9fc
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
d263eeb
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
c47bd66
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
cb083eb
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
f07304e
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
7499d04
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
22084ce
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
ebf5240
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
966b03a
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
3bb716c
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
77b7e6d
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
5bc9ca6
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
bfb26bf
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
1077a85
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
7313b98
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
26fbe24
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 15, 2026
d95cf35
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 15, 2026
46794e9
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 15, 2026
2fe8590
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 15, 2026
b4d068d
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 15, 2026
04b745e
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 16, 2026
866a917
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 16, 2026
a5e5a48
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 16, 2026
82969d7
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 16, 2026
fd45c76
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 16, 2026
66c803a
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 16, 2026
ad91437
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 16, 2026
d0d9cd5
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 16, 2026
0e083f6
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 16, 2026
7fcb85c
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 16, 2026
ff571a9
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 16, 2026
04f947c
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 16, 2026
2925680
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 16, 2026
2948030
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 16, 2026
1377a89
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 16, 2026
43071c8
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 16, 2026
e134cf3
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 16, 2026
f272240
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 16, 2026
6372f6c
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 16, 2026
fbd5129
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 16, 2026
b21ff93
Merged cn5-stream-callers into u5i-protos.
moetemp Oct 16, 2026
18fbd5d
Merged u5i-protos into dr1-read-range-idl.
moetemp Oct 16, 2026
189d888
Merged dr1-read-range-idl into dr2-read-holds-floor.
moetemp Oct 16, 2026
2a6d936
Merged dr2-read-holds-floor into dr3-serve-read-range.
moetemp Oct 16, 2026
1d9831f
Merged dr3-serve-read-range into dr13-execute-sync-nexus-rpc.
moetemp Oct 16, 2026
e2d3464
Merged cn5 into u5i.
moetemp Oct 16, 2026
1ea092e
Merged u5i into dr1.
moetemp Oct 16, 2026
86703f7
Merged dr1 into dr2.
moetemp Oct 16, 2026
cf25c57
Checked a Nexus read's floor holder and refused one at `$end`.
moetemp Oct 16, 2026
d7b3f1f
Merged dr2 into dr3.
moetemp Oct 16, 2026
9ed12d3
Checked the floor holder of a Nexus replay read too.
moetemp Oct 16, 2026
921c6b1
Merged dr3 into dr13.
moetemp Oct 16, 2026
a29838b
Merged cn5 into u5i.
moetemp Oct 16, 2026
1e61774
Merged u5i into dr1.
moetemp Oct 16, 2026
c17d600
Merged dr1 into dr2.
moetemp Oct 16, 2026
b11425b
Merged dr2 into dr3.
moetemp Oct 16, 2026
c4e0b9c
Merged dr3 into dr13.
moetemp Oct 16, 2026
9d37849
Merged cn5 into u5i.
moetemp Oct 16, 2026
dc5428c
Merged u5i into dr1.
moetemp Oct 16, 2026
8b35cfb
Merged dr1 into dr2.
moetemp Oct 16, 2026
deb86e3
Merged dr2 into dr3.
moetemp Oct 16, 2026
5dce077
Merged dr3 into dr13.
moetemp Oct 16, 2026
0439ebb
Merged cn5 into dr13.
moetemp Oct 16, 2026
c5835b8
Merged cn5 into dr13.
moetemp Oct 16, 2026
7d12af4
Merged cn5 into dr13.
moetemp Oct 16, 2026
f946289
Merged cn5 into dr13.
moetemp Oct 16, 2026
ed1c7b9
Merged cn5 into dr13.
moetemp Oct 16, 2026
bf2320c
Merged cn5 into dr13.
moetemp Oct 16, 2026
547f7f4
Merged cn5 into dr13.
moetemp Oct 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions crates/client/src/grpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1942,6 +1942,15 @@ proxier! {
r.extensions_mut().insert(IsUserLongPoll);
}
);
(
execute_sync_nexus_operation,
ExecuteSyncNexusOperationRequest,
ExecuteSyncNexusOperationResponse,
|r| {
let labels = namespaced_request!(r);
r.extensions_mut().insert(labels);
}
);
}

proxier! {
Expand Down
1 change: 1 addition & 0 deletions crates/common/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -761,6 +761,7 @@ const BLOB_FIELDS: &[&str] = &[
"temporal.api.protocol.v1.Message.body", // whole Any body; see EXTRA_WHOLE_MESSAGE_LEAVES
"temporal.api.query.v1.WorkflowQuery.query_args",
"temporal.api.workflow.v1.NewWorkflowExecutionInfo.input",
"temporal.api.workflowservice.v1.ExecuteSyncNexusOperationRequest.input",
"temporal.api.workflowservice.v1.NotifyStreamRequest.close_failure",
"temporal.api.workflowservice.v1.NotifyStreamRequest.close_result",
"temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatByIdRequest.details",
Expand Down
95 changes: 95 additions & 0 deletions crates/protos/protos/api_upstream/nexus/notification-service.wit

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion crates/protos/protos/api_upstream/openapi/openapiv2.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions crates/protos/protos/api_upstream/openapi/openapiv3.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ service StreamNexusService {
rpc NexusAppend(NexusCall) returns (NexusStep);
// The stream service's Nexus `read` operation, over its JSON transfer form.
rpc NexusRead(NexusCall) returns (NexusStep);
// The stream service's Nexus `read_range` operation, over its JSON transfer form.
rpc NexusReadRange(NexusCall) returns (NexusStep);
// Goes on with a call that asked for codec work.
rpc NexusResume(NexusResumeRequest) returns (NexusStep);
// Attaches the caller of a stream-returning Nexus operation's start to the stream's notifier,
Expand Down
16 changes: 16 additions & 0 deletions crates/protos/src/protos/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3071,6 +3071,22 @@ mod sdk_helpers {
};
use anyhow::anyhow;

mod nexus_handler_callback {
use crate::protos::temporal::api::common::v1::callback::NexusHandler;
use prost::Message;

// The server reads the progress operation by its field number, so a renumbered field
// would send progress to an operation the Worker never named.
#[test]
fn the_progress_operation_keeps_its_field_number() {
let handler = NexusHandler {
progress_operation: "p".to_string(),
..Default::default()
};
assert_eq!(handler.encode_to_vec(), vec![0x2a, 0x01, b'p']);
}
}

mod stream_record_envelope {
use crate::protos::temporal::{
api::common::v1::Payload,
Expand Down
3 changes: 3 additions & 0 deletions crates/sdk-core-c-bridge/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,9 @@ async fn call_workflow_service(
"ExecuteMultiOperation" => {
rpc_call_on_trait!(client, call, WorkflowService, execute_multi_operation)
}
"ExecuteSyncNexusOperation" => {
rpc_call_on_trait!(client, call, WorkflowService, execute_sync_nexus_operation)
}
"FetchWorkerConfig" => {
rpc_call_on_trait!(client, call, WorkflowService, fetch_worker_config)
}
Expand Down
12 changes: 12 additions & 0 deletions crates/sdk-core/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,18 @@ relevant information.
the Nexus calls, so lang's handler raises it as it is. A mistake in the stream, an empty callback
URL or request id, and a token that names no stream are `BAD_REQUEST`. An attach for the latest
run describes the Workflow fresh, so it never lands on a chain that already ended.
* Experimental: with `notify_on_append`, `AttachCaller` tells the stream's notifier about the
newest record after the attach, so a caller that only waits for progress hears of the records
already there. An empty stream needs nothing, since every append notifies. The API protos carry the
`NexusHandler` progress fields and `nexus/notification-service.wit`.
* Experimental: the Nexus `read` takes `floor_holder`. With it the read holds the floor and
answers `replay`, the range of the records that crossed after the byte cut, with Core's digest
over them. The new Nexus `read_range` operation, `NexusReadRange` for lang, reads that range
again through the codec step and checks the digest. Its answer has no byte budget and carries
only the records and `next_token`. It checks that the chain it names is one of the Workflow's.
* Experimental: the API protos carry `WorkflowService.ExecuteSyncNexusOperation`, which runs one
synchronous Nexus operation for a caller namespace and persists nothing. The client and the C
bridge call it, and its `input` counts against the blob size limit.
* Experimental: a Workflow publishes stream records with `WorkflowOutputStreamCommit` in its
activation completion. The Worker appends them to its `stream_store` before it reports the
completion, so readers see them while the Workflow Task runs, and nothing goes to History. The
Expand Down
Loading
Loading