{"record":{"id":"f0e136e7767ae1a7","repo":"temporalio/temporal","slug":"missing-respondactivitytaskcompletedrequest-return","errorCode":null,"errorMessage":"missing RespondActivityTaskCompletedRequest return","messagePattern":"missing RespondActivityTaskCompletedRequest return","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/testing/taskpoller/taskpoller.go","lineNumber":625,"sourceCode":"\t}\n\n\tresp, err := p.respondTaskCompleted(ctx, opts, task, reply)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn resp, nil\n}\n\nfunc (p *activityTaskPoller) respondTaskCompleted(\n\tctx context.Context,\n\topts *options,\n\ttask *workflowservice.PollActivityTaskQueueResponse,\n\treply *workflowservice.RespondActivityTaskCompletedRequest,\n) (*workflowservice.RespondActivityTaskCompletedResponse, error) {\n\tp.t.Helper()\n\tif reply == nil {\n\t\treturn nil, errors.New(\"missing RespondActivityTaskCompletedRequest return\")\n\t}\n\tif reply.Namespace == \"\" {\n\t\treply.Namespace = p.namespace\n\t}\n\tif len(reply.TaskToken) == 0 {\n\t\treply.TaskToken = task.TaskToken\n\t}\n\tif reply.Identity == \"\" {\n\t\treply.Identity = opts.tv.WorkerIdentity()\n\t}\n\n\treturn p.client.RespondActivityTaskCompleted(ctx, reply)\n}\n\nfunc (p *activityTaskPoller) respondTaskFailed(\n\tctx context.Context,\n\topts *options,\n\ttask *workflowservice.PollActivityTaskQueueResponse,","sourceCodeStart":607,"sourceCodeEnd":643,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/common/testing/taskpoller/taskpoller.go#L607-L643","documentation":"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.","triggerScenarios":"HandleTask for an activity task where the respond callback returns nil for *workflowservice.RespondActivityTaskCompletedRequest.","commonSituations":"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.","solutions":["Return &workflowservice.RespondActivityTaskCompletedRequest{} — Namespace and TaskToken are filled in automatically","Use reply.Failure (RespondActivityTaskFailedRequest-style fields per API) to signal activity failure rather than a nil request","Check the handler builds the correct request type for activity vs workflow tasks"],"exampleFix":"// before\nreturn nil, nil\n// after\nreturn &workflowservice.RespondActivityTaskCompletedRequest{\n    Result: payloads.EncodeString(\"done\"),\n}, nil","handlingStrategy":"validation","validationCode":"if reply == nil {\n    reply = &workflowservice.RespondActivityTaskCompletedRequest{}\n}","typeGuard":null,"tryCatchPattern":"resp, err := poller.HandleTask(ctx, opts, activityTask, reply)\nrequire.ErrorContains(t, err, \"missing RespondActivityTaskCompletedRequest\")","preventionTips":["Always return an initialized activity completion request","Use failure fields to report activity errors","Cover activity handling branches in tests"],"tags":["testing","taskpoller","activity","nil-argument"],"backgroundTag":"nil-request-in-test-poller","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}