{"record":{"id":"3e7610ba53e71960","repo":"temporalio/temporal","slug":"missing-pollworkflowtaskqueueresponse","errorCode":null,"errorMessage":"missing PollWorkflowTaskQueueResponse","messagePattern":"missing PollWorkflowTaskQueueResponse","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/testing/taskpoller/taskpoller.go","lineNumber":477,"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 *workflowTaskPoller) respondQueryTaskCompleted(\n\tctx context.Context,\n\ttask *workflowservice.PollWorkflowTaskQueueResponse,\n\treply *workflowservice.RespondQueryTaskCompletedRequest,\n\terr error,\n) (*workflowservice.RespondQueryTaskCompletedResponse, error) {\n\tp.t.Helper()\n\tif task == nil {\n\t\treturn nil, errors.New(\"missing PollWorkflowTaskQueueResponse\")\n\t}\n\tif task.Query == nil {\n\t\treturn nil, errors.New(\"missing Legacy Query in PollWorkflowTaskQueueResponse\")\n\t}\n\tif reply == nil {\n\t\treturn nil, errors.New(\"missing RespondQueryTaskCompletedRequest\")\n\t}\n\n\t// setting the fields for RespondQueryTaskCompletedResponse\n\tif reply.Namespace == \"\" {\n\t\treply.Namespace = p.namespace\n\t}\n\tif reply.TaskToken == nil {\n\t\treply.TaskToken = task.TaskToken\n\t}\n\n\tif err != nil {\n\t\treply.ErrorMessage = err.Error()","sourceCodeStart":459,"sourceCodeEnd":495,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/common/testing/taskpoller/taskpoller.go#L459-L495","documentation":"respondQueryTaskCompleted handles legacy query workflow tasks and requires the polled PollWorkflowTaskQueueResponse to be non-nil. A nil task means no query task was actually polled before attempting to respond, so there is nothing to answer. The helper fails fast with this message rather than panicking on task.Query access.","triggerScenarios":"Calling HandleQuery/handleQuery where the poll callback chain yields a nil *workflowservice.PollWorkflowTaskQueueResponse into respondQueryTaskCompleted.","commonSituations":"Test polls a task queue with no legacy query available (NoWorkflowTaskAvailable path propagated as nil); mock client returns nil response without error.","solutions":["Ensure a legacy query (QueryWorkflow with query reject condition / legacy API) was actually dispatched before calling HandleQuery","Make the mock PollWorkflowTaskQueue client return a response with Query populated","Check that the poll step in the test did not return NoWorkflowTaskAvailable and get ignored"],"exampleFix":"// before\nif resp == nil { return nil }\n// after\nrequire.NotNil(t, resp)\nrequire.NotNil(t, resp.Query)\nreturn poller.HandleQuery(ctx, resp, reply)","handlingStrategy":"validation","validationCode":"if task == nil {\n    return errors.New(\"no polled query task to respond to\")\n}","typeGuard":null,"tryCatchPattern":"resp, err := poller.HandleQuery(ctx, task, reply)\nif err != nil && strings.Contains(err.Error(), \"missing PollWorkflowTaskQueueResponse\") {\n    // poll returned nil; check for NoWorkflowTaskAvailable upstream\n}","preventionTips":["Only call HandleQuery after a successful legacy-query poll","Check the poll step for NoWorkflowTaskAvailable before handling","Make mocks return a populated PollWorkflowTaskQueueResponse"],"tags":["testing","taskpoller","legacy-query","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"}