{"record":{"id":"15f3e006d1b7acc9","repo":"temporalio/temporal","slug":"missing-respondquerytaskcompletedrequest","errorCode":null,"errorMessage":"missing RespondQueryTaskCompletedRequest","messagePattern":"missing RespondQueryTaskCompletedRequest","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/testing/taskpoller/taskpoller.go","lineNumber":483,"sourceCode":"\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()\n\t\treply.Failure = &failurepb.Failure{\n\t\t\tMessage: err.Error(),\n\t\t}\n\t\treply.CompletedType = enumspb.QUERY_RESULT_TYPE_FAILED\n\t} else {\n\t\treply.CompletedType = enumspb.QUERY_RESULT_TYPE_ANSWERED","sourceCodeStart":465,"sourceCodeEnd":501,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/common/testing/taskpoller/taskpoller.go#L465-L501","documentation":"Returned by the test task poller when a RespondQueryTaskCompletedRequest is absent after a query task handler runs. The poller requires a completion (possibly an error completion) to forward back to the matching/history service.","triggerScenarios":"handleQuery invoked with reply == nil for *workflowservice.RespondQueryTaskCompletedRequest.","commonSituations":"Test callback returns nil, nil for the reply; refactoring removed reply construction; failure-path branches that skip building the response.","solutions":["Return an initialized &workflowservice.RespondQueryTaskCompletedRequest{} (set QueryResult or ErrorMessage as appropriate)","Use the request's ErrorMessage/Completed flag to signal query failure instead of returning a nil request","Ensure the poll-and-handle helper always forwards a constructed reply"],"exampleFix":"// before\nreturn nil, errors.New(\"query failed\")\n// after\nreturn &workflowservice.RespondQueryTaskCompletedRequest{\n    ErrorMessage: \"query failed\",\n    Completed:    false,\n}, nil","handlingStrategy":"validation","validationCode":"if reply == nil {\n    reply = &workflowservice.RespondQueryTaskCompletedRequest{}\n}","typeGuard":null,"tryCatchPattern":"resp, err := poller.HandleQuery(ctx, task, reply)\nrequire.ErrorContains(t, err, \"missing RespondQueryTaskCompletedRequest\") // fail fast in tests","preventionTips":["Always build a RespondQueryTaskCompletedRequest, using ErrorMessage for failures","Avoid nil, nil returns in reply callbacks","Assert reply non-nil in helper functions"],"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"}