Skip to content

Avoid duplicate codec calls for System Nexus history - #1206

Open
chaptersix wants to merge 7 commits into
mainfrom
concurrent-codec-server
Open

chaptersix wants to merge 7 commits into
mainfrom
concurrent-codec-server

Conversation

@chaptersix

@chaptersix chaptersix commented Sep 13, 2026 •

Copy link
Copy Markdown
Contributor

Related issues

Related to #1193.

Context:

What changed?

CLI #1017 explicitly called the remote codec while rendering detailed System Nexus history. With api-go #297, the gRPC interceptor now finds and decodes the nested payloads itself. Keeping both paths can send the same payloads to the codec server twice.

This change:

  • uses the api-go v1.63.6 release, which includes the marked System Nexus traversal;
  • bumps the development server to v1.33.0-164.0, which includes the server marker from temporal#10948, and updates the root module to its required Go 1.27;
  • updates both modules to SDK Go v1.49.0, including the SDK field rename to StaticDetails while preserving the CLI flag;
  • removes the CLI's second remote decode path and its extra codec plumbing;
  • resolves marked envelopes generically from their messageType metadata instead of maintaining a hard-coded operation/type registry; and
  • extends the shared-server test to use an HTTP codec endpoint and assert that detailed workflow show both renders the decoded nested value and makes exactly one /decode request.

Raw JSON output remains unchanged. Because this feature has not been enabled, this change intentionally does not preserve compatibility with the earlier unmarked envelope implementation.

This does not solve the whole serialization issue in #1193. Payload groups elsewhere in history are still visited serially: SDK Go's PayloadCodecGRPCClientInterceptorOptions does not currently expose and pass api-go's VisitPayloadsOptions.ConcurrencyLimit. A follow-up SDK Go change is still required to make those codec-server requests concurrent.

Checklist

  • Added functional tests
  • Added unit tests
  • This is a non-breaking change
  • This feature does not depend on Temporal Cloud functionality

The test server uses the latest non-RC Cloud development tag, v1.33.0-164.0, because it includes the System Nexus marker absent from stable OSS v1.32.0.

How did you test this

The shared-server end-to-end test uses an HTTP codec endpoint and checks that detailed workflow show renders the decoded nested System Nexus value while making exactly one /decode request. Unit coverage checks visitor decoding and local unwrapping, resolution through messageType, completed events linked to prior scheduled events, and no-op handling for nil payloads, unknown endpoints, and completed events without a prior scheduled event.

@chaptersix

Copy link
Copy Markdown
Contributor Author

not merging until there's a tagged api version

@chaptersix
chaptersix marked this pull request as ready for review September 13, 2026 01:13
@chaptersix
chaptersix requested a review from a team as a code owner September 13, 2026 01:13
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 13, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-04T03:33:49.182835Z f8a4e1f New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0645eae636

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread cliext/client.go
Comment on lines +1047 to +1049
messageDescriptor, err := protoregistry.GlobalTypes.FindMessageByName(messageType)
if err != nil {
return fmt.Errorf("system nexus payload references unknown message type %q: %w", messageType, err)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Skip envelopes whose message type is unavailable

When a newer server records a marked system operation whose protobuf type is absent from this CLI's linked API version, FindMessageByName fails and aborts the entire workflow show --detailed command. The previous registry-based implementation treated unknown operations as a no-op, allowing the remaining history to render; an unavailable type should likewise skip the optional unwrapped view rather than make history unusable.

Useful? React with 👍 / 👎.

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