temporalio/temporal · error

missing RespondActivityTaskCompletedRequest return

Error message

missing RespondActivityTaskCompletedRequest return

What it means

respondTaskCompleted (activity-task variant) requires a non-nil RespondActivityTaskCompletedRequest. Like the other taskpoller guards, a nil reply means the test never built the activity completion, and the poller fails fast with this message instead of nil-dereferencing.

Source

Thrown at common/testing/taskpoller/taskpoller.go:625

	}

	resp, err := p.respondTaskCompleted(ctx, opts, task, reply)
	if err != nil {
		return nil, err
	}

	return resp, nil
}

func (p *activityTaskPoller) respondTaskCompleted(
	ctx context.Context,
	opts *options,
	task *workflowservice.PollActivityTaskQueueResponse,
	reply *workflowservice.RespondActivityTaskCompletedRequest,
) (*workflowservice.RespondActivityTaskCompletedResponse, error) {
	p.t.Helper()
	if reply == nil {
		return nil, errors.New("missing RespondActivityTaskCompletedRequest return")
	}
	if reply.Namespace == "" {
		reply.Namespace = p.namespace
	}
	if len(reply.TaskToken) == 0 {
		reply.TaskToken = task.TaskToken
	}
	if reply.Identity == "" {
		reply.Identity = opts.tv.WorkerIdentity()
	}

	return p.client.RespondActivityTaskCompleted(ctx, reply)
}

func (p *activityTaskPoller) respondTaskFailed(
	ctx context.Context,
	opts *options,
	task *workflowservice.PollActivityTaskQueueResponse,

View on GitHub (pinned to bde624efd1)

Solutions

  1. Return &workflowservice.RespondActivityTaskCompletedRequest{} — Namespace and TaskToken are filled in automatically
  2. Use reply.Failure (RespondActivityTaskFailedRequest-style fields per API) to signal activity failure rather than a nil request
  3. Check the handler builds the correct request type for activity vs workflow tasks

Example fix

// before
return nil, nil
// after
return &workflowservice.RespondActivityTaskCompletedRequest{
    Result: payloads.EncodeString("done"),
}, nil
Defensive patterns

Strategy: validation

Validate before calling

if reply == nil {
    reply = &workflowservice.RespondActivityTaskCompletedRequest{}
}

Try / catch

resp, err := poller.HandleTask(ctx, opts, activityTask, reply)
require.ErrorContains(t, err, "missing RespondActivityTaskCompletedRequest")

Prevention

When it happens

Trigger: HandleTask for an activity task where the respond callback returns nil for *workflowservice.RespondActivityTaskCompletedRequest.

Common situations: Activity completion omitted in the test's switch on activity type; nil, nil early returns; tests copied from workflow-task handlers that build a different request type.

Related errors


AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01). Data as JSON: /api/errors/f0e136e7767ae1a7. Report an issue: GitHub.