From 1b063292b143d42d25b9299a2dc0902978a1e11f Mon Sep 17 00:00:00 2001 From: Dan Plyukhin Date: Fri, 23 Oct 2026 11:34:48 -0500 Subject: [PATCH 1/3] Complete Go System Nexus WIT annotations --- nexus/deps/nexus-temporal-types/model.wit | 26 +++++++++++++++++------ nexus/workflow-service.wit | 10 ++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/nexus/deps/nexus-temporal-types/model.wit b/nexus/deps/nexus-temporal-types/model.wit index c661ee510..02803d712 100644 --- a/nexus/deps/nexus-temporal-types/model.wit +++ b/nexus/deps/nexus-temporal-types/model.wit @@ -8,6 +8,7 @@ interface model { /// @nexus.type /// python="typing.Any" /// typescript="common.Payload" + /// go="any" /// dotnet="object?" /// dotnet-from="ProtoExtensions.FromPayload" /// dotnet-to="ProtoExtensions.ToPayload" @@ -16,7 +17,7 @@ interface model { /// @nexus.proto "temporal.api.common.v1.Payloads" /// typescript-import="@temporalio/proto" - /// @nexus.type dotnet="IReadOnlyCollection" dotnet-from="ProtoExtensions.FromPayloads" dotnet-to="ProtoExtensions.ToPayloads" + /// @nexus.type go="[]any" dotnet="IReadOnlyCollection" dotnet-from="ProtoExtensions.FromPayloads" dotnet-to="ProtoExtensions.ToPayloads" type payloads = list; /// Temporal failure represented by the target SDK's native exception/error type. @@ -35,11 +36,12 @@ interface model { /// @nexus.type /// python="collections.abc.Awaitable[WorkflowResult]" /// typescript="Promise" + /// go="any" /// dotnet="System.Threading.Tasks.Task" type workflow-result = placeholder; /// Receiver/context argument for workflow callable method forms. - /// @nexus.type python="typing.Any" typescript="any" dotnet="object" + /// @nexus.type python="typing.Any" typescript="any" go="go.temporal.io/sdk/workflow:workflow.Context" dotnet="object" type callable-prefix = placeholder; /// @nexus.function-args @@ -49,7 +51,7 @@ interface model { workflow-call: async func(callable-prefix: callable-prefix, args: payloads) -> workflow-result; /// Callable result annotation for signal functions. - /// @nexus.type python="None | collections.abc.Awaitable[None]" typescript="void" dotnet="void" + /// @nexus.type python="None | collections.abc.Awaitable[None]" typescript="void" go="any" dotnet="void" type signal-result = placeholder; /// @nexus.function-args @@ -62,6 +64,7 @@ interface model { /// @nexus.type /// python="str" /// typescript="string" + /// go="string" /// dotnet="string" /// dotnet-from="ProtoExtensions.FromWorkflowTypeProto" /// dotnet-to="ProtoExtensions.ToWorkflowTypeProto" @@ -73,6 +76,7 @@ interface model { /// args-field="input" /// result-type-parameter="WorkflowResult" /// alternate-type="workflow-type" + /// go-name-extractor="WorkflowFunctionName" /// dotnet-name-extractor="TemporalFunctionNames.WorkflowName" /// dotnet-call-extractor="TemporalFunctionNames.ExtractCall" /// @nexus.add-rpc-compatible-with "workflow-type" @@ -82,6 +86,8 @@ interface model { /// signature="signal-call" /// args-field="signal-input" /// alternate-type="string" + /// go-value-type="string" + /// go-args-type="any" /// python-converter="signal_function_to_proto" /// typescript-name-extractor="signalFunctionName" /// dotnet-name-extractor="TemporalFunctionNames.SignalName" @@ -96,6 +102,7 @@ interface model { /// @nexus.type /// python="temporalio.common.RetryPolicy" /// typescript="common.RetryPolicy" + /// go="go.temporal.io/sdk/temporal.RetryPolicy" /// dotnet="Temporalio.Common.RetryPolicy" /// dotnet-from="ProtoExtensions.FromRetryPolicyProto" /// typescript-import="@temporalio/common" @@ -105,13 +112,14 @@ interface model { /// @nexus.type /// python="str" /// typescript="string" + /// go="string" /// dotnet="string" /// dotnet-from="ProtoExtensions.FromTaskQueueProto" /// dotnet-to="ProtoExtensions.ToTaskQueueProto" type task-queue = placeholder; /// @nexus.proto "temporal.api.common.v1.Memo" typescript-import="@temporalio/proto" - /// @nexus.type python="collections.abc.Mapping[str, typing.Any]" typescript="Record" dotnet="IReadOnlyDictionary" dotnet-from="ProtoExtensions.FromMemoProto" + /// @nexus.type python="collections.abc.Mapping[str, typing.Any]" typescript="Record" go="map[string]any" dotnet="IReadOnlyDictionary" dotnet-from="ProtoExtensions.FromMemoProto" type memo = placeholder; /// @nexus.proto "temporal.api.common.v1.Header" typescript-import="@temporalio/proto" @@ -129,6 +137,7 @@ interface model { /// @nexus.type /// python="temporalio.common.TypedSearchAttributes" /// typescript="common.TypedSearchAttributes" + /// go="go.temporal.io/sdk/temporal.SearchAttributes" /// dotnet="Temporalio.Common.SearchAttributeCollection" /// dotnet-from="ProtoExtensions.FromSearchAttributesProto" /// typescript-import="@temporalio/common" @@ -138,6 +147,7 @@ interface model { /// @nexus.type /// python="temporalio.common.Priority" /// typescript="common.Priority" + /// go="go.temporal.io/sdk/temporal.Priority" /// dotnet="Temporalio.Common.Priority" /// dotnet-from="ProtoExtensions.FromPriorityProto" /// typescript-import="@temporalio/common" @@ -147,6 +157,7 @@ interface model { /// @nexus.type /// python="temporalio.common.VersioningOverride" /// typescript="common.VersioningOverride" + /// go="go.temporal.io/sdk/client.VersioningOverride" /// dotnet="Temporalio.Common.VersioningOverride" /// dotnet-from="ProtoExtensions.FromVersioningOverrideProto" /// typescript-import="@temporalio/common" @@ -156,6 +167,7 @@ interface model { /// @nexus.type /// python="datetime.timedelta" /// typescript="common.Duration" + /// go="time.Duration" /// dotnet="System.TimeSpan" /// dotnet-from="ProtoExtensions.FromDurationProto" /// typescript-import="@temporalio/common" @@ -165,6 +177,7 @@ interface model { /// @nexus.type /// python="temporalio.common.WorkflowIDReusePolicy" /// typescript="common.WorkflowIdReusePolicy" + /// go="go.temporal.io/api/enums/v1:enums.WorkflowIdReusePolicy" /// dotnet="Temporalio.Api.Enums.V1.WorkflowIdReusePolicy" /// typescript-import="@temporalio/common" type workflow-id-reuse-policy = placeholder; @@ -173,6 +186,7 @@ interface model { /// @nexus.type /// python="temporalio.common.WorkflowIDConflictPolicy" /// typescript="common.WorkflowIdConflictPolicy" + /// go="go.temporal.io/api/enums/v1:enums.WorkflowIdConflictPolicy" /// dotnet="Temporalio.Api.Enums.V1.WorkflowIdConflictPolicy" /// typescript-import="@temporalio/common" type workflow-id-conflict-policy = placeholder; @@ -184,11 +198,11 @@ interface model { record user-metadata { /// @nexus.doc "Single-line fixed summary for the workflow execution that may appear in UI and CLI. This can be in single-line Temporal Markdown format." /// @nexus.proto-field "summary" - /// @nexus.flattened-type python="str" typescript="string" dotnet="string" + /// @nexus.flattened-type python="str" typescript="string" dotnet="string" go="string" static-summary: option, /// @nexus.doc "General fixed details for the workflow execution that may appear in UI and CLI. This can be in Temporal Markdown format and can span multiple lines. This value is fixed on the workflow execution and cannot be updated." /// @nexus.proto-field "details" - /// @nexus.flattened-type python="str" typescript="string" dotnet="string" + /// @nexus.flattened-type python="str" typescript="string" dotnet="string" go="string" static-details: option, } } diff --git a/nexus/workflow-service.wit b/nexus/workflow-service.wit index caf3842a3..17dd95b0f 100644 --- a/nexus/workflow-service.wit +++ b/nexus/workflow-service.wit @@ -6,7 +6,7 @@ world system { /// @nexus.endpoint "__temporal_system" /// @nexus.service-name "temporal.api.workflowservice.v1.WorkflowService" -/// @nexus.namespace dotnet="Temporalio.Workflows" +/// @nexus.namespace dotnet="Temporalio.Workflows" go="go.temporal.io/sdk/workflow" /// @nexus.operations-class dotnet="Workflow" /// @nexus.delay-load-temporalio-workflow /// @nexus.experimental @@ -49,6 +49,7 @@ interface workflow-service { /// python="Signal name or callable to send with the start request." /// typescript="Signal name or signal definition to send with the start request." /// dotnet="Signal name or signal expression to send with the start request." + /// go="Signal name to send with the start request." /// @nexus.proto-field "signal_name" signal: signal-function, /// @nexus.doc "Total workflow execution timeout, including retries and continue-as-new. Defaults to unlimited." @@ -70,9 +71,11 @@ interface workflow-service { /// @nexus.doc "Behavior when a closed workflow with the same ID exists. Default is allow-duplicate." /// @nexus.proto-field "workflow_id_reuse_policy" /// @nexus.default "allow-duplicate" + /// @nexus.name go="WorkflowIDReusePolicy" id-reuse-policy: workflow-id-reuse-policy, /// @nexus.doc "Behavior when a workflow is currently running with the same ID. Set to use-existing for idempotent deduplication on workflow ID. Cannot be set if id-reuse-policy is terminate-if-running. Defaults to use-existing." /// @nexus.proto-field "workflow_id_conflict_policy" + /// @nexus.name go="WorkflowIDConflictPolicy" id-conflict-policy: option, /// @nexus.doc "Retry policy for the workflow." retry-policy: option, @@ -81,6 +84,7 @@ interface workflow-service { /// @nexus.doc "Memo for the workflow." memo: option, /// @nexus.doc "Typed search attributes for the workflow." + /// @nexus.name go="TypedSearchAttributes" search-attributes: option, /// @nexus.doc "Priority of the workflow execution." priority: option, @@ -91,7 +95,7 @@ interface workflow-service { start-delay: option, /// @nexus.doc "Static metadata for the workflow execution." user-metadata: option, - /// @nexus.source python="workflow_namespace()" typescript="workflowNamespace()" go="workflow.GetInfo(ctx).Namespace" dotnet="TemporalWorkflowContext.WorkflowNamespace()" + /// @nexus.source python="workflow_namespace()" typescript="workflowNamespace()" go="WorkflowNamespace(ctx)" dotnet="TemporalWorkflowContext.WorkflowNamespace()" /// @nexus.doc "Namespace of the workflow execution." namespace: string, /// @nexus.omit @@ -133,7 +137,7 @@ interface workflow-service { /// dotnet-type="Temporalio.Workflows.ExternalWorkflowHandle" /// dotnet="Temporalio.Workflows.Workflow.GetExternalWorkflowHandle(request.Id, result.RunId)" /// @nexus.operation name="SignalWithStartWorkflowExecution" - /// @nexus.serialization-context python="signal_with_start_workflow_serialization_context" typescript="signalWithStartWorkflowSerializationContext" dotnet="WorkflowServiceSerializationContexts.SignalWithStartWorkflow" + /// @nexus.serialization-context python="signal_with_start_workflow_serialization_context" typescript="signalWithStartWorkflowSerializationContext" dotnet="WorkflowServiceSerializationContexts.SignalWithStartWorkflow" go="SignalWithStartWorkflowSerializationContext" /// @nexus.experimental signal-with-start-workflow: func( request: signal-with-start-workflow-request, From 5502f11504447c8ae1ea6c29e5c39a7e99ddf019 Mon Sep 17 00:00:00 2001 From: Dan Plyukhin Date: Fri, 23 Oct 2026 15:17:44 -0500 Subject: [PATCH 2/3] Sync shared WIT annotations with nexgen --- nexus/deps/nexus-temporal-types/model.wit | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/nexus/deps/nexus-temporal-types/model.wit b/nexus/deps/nexus-temporal-types/model.wit index 02803d712..8fd7255d4 100644 --- a/nexus/deps/nexus-temporal-types/model.wit +++ b/nexus/deps/nexus-temporal-types/model.wit @@ -17,7 +17,11 @@ interface model { /// @nexus.proto "temporal.api.common.v1.Payloads" /// typescript-import="@temporalio/proto" - /// @nexus.type go="[]any" dotnet="IReadOnlyCollection" dotnet-from="ProtoExtensions.FromPayloads" dotnet-to="ProtoExtensions.ToPayloads" + /// @nexus.type + /// go="[]any" + /// dotnet="IReadOnlyCollection" + /// dotnet-from="ProtoExtensions.FromPayloads" + /// dotnet-to="ProtoExtensions.ToPayloads" type payloads = list; /// Temporal failure represented by the target SDK's native exception/error type. @@ -93,7 +97,7 @@ interface model { /// dotnet-name-extractor="TemporalFunctionNames.SignalName" /// dotnet-call-extractor="TemporalFunctionNames.ExtractCall" /// typescript-value-type="common.SignalDefinition" - /// typescript-args-type="Value extends common.SignalDefinition ? Args : never" + /// typescript-args-type="Value extends common.SignalDefinition ? Args : never" /// typescript-import="@temporalio/common" /// @nexus.add-rpc-compatible-with "string" type signal-function = placeholder; @@ -119,13 +123,18 @@ interface model { type task-queue = placeholder; /// @nexus.proto "temporal.api.common.v1.Memo" typescript-import="@temporalio/proto" - /// @nexus.type python="collections.abc.Mapping[str, typing.Any]" typescript="Record" go="map[string]any" dotnet="IReadOnlyDictionary" dotnet-from="ProtoExtensions.FromMemoProto" + /// @nexus.type + /// python="collections.abc.Mapping[str, typing.Any]" + /// typescript="Record" + /// go="map[string]any" + /// dotnet="IReadOnlyDictionary" + /// dotnet-from="ProtoExtensions.FromMemoProto" type memo = placeholder; /// @nexus.proto "temporal.api.common.v1.Header" typescript-import="@temporalio/proto" /// @nexus.type /// python="collections.abc.Mapping[str, typing.Any]" - /// typescript="Record" + /// typescript="common.Headers" /// go="map[string]any" /// dotnet="IReadOnlyDictionary" /// dotnet-from="ProtoExtensions.FromHeaderProto" From 72a6ab4c16343ffd2d97a129531a369c866fdce0 Mon Sep 17 00:00:00 2001 From: Dan Plyukhin Date: Fri, 23 Oct 2026 15:23:10 -0500 Subject: [PATCH 3/3] Preserve canonical non-Go WIT annotations --- nexus/deps/nexus-temporal-types/model.wit | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nexus/deps/nexus-temporal-types/model.wit b/nexus/deps/nexus-temporal-types/model.wit index 8fd7255d4..69dec6b0b 100644 --- a/nexus/deps/nexus-temporal-types/model.wit +++ b/nexus/deps/nexus-temporal-types/model.wit @@ -97,7 +97,7 @@ interface model { /// dotnet-name-extractor="TemporalFunctionNames.SignalName" /// dotnet-call-extractor="TemporalFunctionNames.ExtractCall" /// typescript-value-type="common.SignalDefinition" - /// typescript-args-type="Value extends common.SignalDefinition ? Args : never" + /// typescript-args-type="Value extends common.SignalDefinition ? Args : never" /// typescript-import="@temporalio/common" /// @nexus.add-rpc-compatible-with "string" type signal-function = placeholder; @@ -134,7 +134,7 @@ interface model { /// @nexus.proto "temporal.api.common.v1.Header" typescript-import="@temporalio/proto" /// @nexus.type /// python="collections.abc.Mapping[str, typing.Any]" - /// typescript="common.Headers" + /// typescript="Record" /// go="map[string]any" /// dotnet="IReadOnlyDictionary" /// dotnet-from="ProtoExtensions.FromHeaderProto"