Mark system Nexus envelope payloads#1667
Open
tconley1428 wants to merge 1 commit into
Open
Conversation
tconley1428
marked this pull request as draft
July 21, 2026 20:01
tconley1428
force-pushed
the
system-nexus-payload-marker
branch
from
July 23, 2026 19:12
4cf4eaa to
b489b0e
Compare
tconley1428
marked this pull request as ready for review
July 23, 2026 19:14
dplyukhin
reviewed
Jul 23, 2026
Comment on lines
58
to
+79
| async def _visit_nexus_operation_input_payload( | ||
| self, | ||
| fs: VisitorFunctions, | ||
| endpoint: str, | ||
| payload: Payload, | ||
| ) -> None: | ||
| new_payload = await temporalio.nexus.system._maybe_visit_payload( | ||
| endpoint, | ||
| payload, | ||
| await self._visit_temporal_api_common_v1_Payload(fs, payload) | ||
|
|
||
| async def _visit_temporal_api_common_v1_Payload( | ||
| self, fs: VisitorFunctions, o: Payload | ||
| ): | ||
| new_payload = await temporalio.nexus.system.maybe_visit_payload( | ||
| o, | ||
| fs, | ||
| self.skip_search_attributes, | ||
| ) | ||
| if new_payload is None: | ||
| await self._visit_temporal_api_common_v1_Payload(fs, payload) | ||
| await fs.visit_payload(o) | ||
| return | ||
|
|
||
| if new_payload is not payload: | ||
| payload.CopyFrom(new_payload) | ||
| await fs.visit_system_nexus_envelope(payload) | ||
|
|
||
| async def _visit_temporal_api_common_v1_Payload( | ||
| self, fs: VisitorFunctions, o: Payload | ||
| ): | ||
| await fs.visit_payload(o) | ||
| if new_payload is not o: | ||
| o.CopyFrom(new_payload) | ||
| await fs.visit_system_nexus_envelope(o) |
There was a problem hiding this comment.
Not sure if the formatter allows it, but I'd put put some of these args and params on the same line and rename o to payload
Contributor
Author
There was a problem hiding this comment.
It would be a little painful I think because it is all generated code, and is using some of the same names as all other functions.
Contributor
Author
There was a problem hiding this comment.
I take it back, looks like this one isn't part of that, so it should be easy
| ) | ||
| visitor = SystemNexusVisitor() | ||
|
|
||
| await PayloadVisitor().visit(visitor, comp) |
There was a problem hiding this comment.
Codex observed that this fails if concurrency_limit>1.
Contributor
Author
There was a problem hiding this comment.
Can you elaborate? And do you think it matters for some reason?
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.
What changed
System Nexus envelope payloads encoded by the system Nexus payload converter now carry a
__temporal_system_payloadmetadata marker with valueb"true".Payload visitors now use that marker to detect system Nexus envelopes whenever they encounter an already-encoded payload. This lets nested user payloads inside the envelope still be decoded and visited even when the payload is no longer accompanied by a Nexus endpoint field.
Detection behavior
Detection is metadata-only. Unmarked payloads are treated as regular payloads, even if they are used as the input for the Temporal system Nexus endpoint. Marked payloads are treated as system Nexus envelopes regardless of endpoint.
Tests
./.venv/bin/pytest tests/nexus/test_temporal_system_nexus.py -q./.venv/bin/pytest tests/worker/test_visitor.py -qpoe lint