Skip to content

Vendored the channel api on the external-stream Core base. - #12

Closed
moetemp wants to merge 3 commits into
moe/AI-198-ch-ext-core-0-suite-healthfrom
moe/AI-198-ch-ext-core-1-protos
Closed

moetemp wants to merge 3 commits into
moe/AI-198-ch-ext-core-0-suite-healthfrom
moe/AI-198-ch-ext-core-1-protos

Conversation

@moetemp

@moetemp moetemp commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

This PR brings the notification channel api into Max's external-stream Core and exposes the channel RPCs to language SDKs.

What changed?

  • The vendored api tree gets the channel api from the two api PRs, the channel service (Added the notification channel service. api#2) and the workflow as a listener (Added the workflow listener of a notification channel. api#3). That's temporal.api.notification.v1, the five channel RPCs with their request_header option, the subscribe and unsubscribe commands and events, notifications on the Workflow Task scheduled event, and channel_subscriptions on describe.
  • The protos crate's type maps name the two new commands and events. Neither event is ignorable.
  • NotificationsReceived is activation job 21. Max's external jobs keep 17 to 20. The Rust SDK and the Rust workflow runtime can't subscribe, so they drop the job.
  • notify_channel, register_channel_listener, unregister_channel_listener, poll_channel and describe_channel are on the Core client and in the C bridge dispatch.
  • The serde derive list and the payload-limit table know the notification package.

Part of AI-198 (epic AI-37).

Why?

This is the main lineage's protos PR on Max's base, so the Python external chain gets the same channel surface as the main chain. The generated Python RPC table doesn't compile without the five client entries. The commands come in the next PR with their machines, because the exhaustive TryFrom<WorkflowCommand> match needs both at once. So nothing here can send a command Core can't handle.

How did you test it?

Link to a test plan if any -

  • Unit Tests
  • Staging
  • End to End Tests

The workspace builds, the lints and fmt are clean, and every commit builds on its own. The Core, client and common lib suites pass. The vendored channel files carry the api PRs' diff exactly. The other vendored files differ only where Max's base already did.

The channel commands, events, failed causes, RPCs and the notifications on
the scheduled event come from the api change that adds the channel. The
generated-type tables in the protos crate are exhaustive, so they name the
new commands and events here.
Lang learns of a channel's notifications through one job per activation,
taken from the scheduled event so replay yields the same job. The Rust SDK
and the workflow runtime cannot subscribe, so they drop the job.
Lang clients reach notify, poll, register, unregister and describe through
the same proxier as every other workflow service RPC, and the Python bridge
generates its RPC table from that trait.
@moetemp

moetemp commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

Replaced by #25 and #28 in the v4 series: one lineage through the channel and the interface, with Max's Option 7 prototype replayed onto it. The branch stays as a pin.

@moetemp moetemp closed this Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant