temporalio/temporal · error
missing PollWorkflowTaskQueueResponse
Error message
missing PollWorkflowTaskQueueResponse
What it means
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.
Source
Thrown at common/testing/taskpoller/taskpoller.go:477
}
resp, err := p.respondTaskCompleted(ctx, opts, task, reply)
if err != nil {
return nil, err
}
return resp, nil
}
func (p *workflowTaskPoller) respondQueryTaskCompleted(
ctx context.Context,
task *workflowservice.PollWorkflowTaskQueueResponse,
reply *workflowservice.RespondQueryTaskCompletedRequest,
err error,
) (*workflowservice.RespondQueryTaskCompletedResponse, error) {
p.t.Helper()
if task == nil {
return nil, errors.New("missing PollWorkflowTaskQueueResponse")
}
if task.Query == nil {
return nil, errors.New("missing Legacy Query in PollWorkflowTaskQueueResponse")
}
if reply == nil {
return nil, errors.New("missing RespondQueryTaskCompletedRequest")
}
// setting the fields for RespondQueryTaskCompletedResponse
if reply.Namespace == "" {
reply.Namespace = p.namespace
}
if reply.TaskToken == nil {
reply.TaskToken = task.TaskToken
}
if err != nil {
reply.ErrorMessage = err.Error()View on GitHub (pinned to bde624efd1)
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
Example fix
// before
if resp == nil { return nil }
// after
require.NotNil(t, resp)
require.NotNil(t, resp.Query)
return poller.HandleQuery(ctx, resp, reply) Defensive patterns
Strategy: validation
Validate before calling
if task == nil {
return errors.New("no polled query task to respond to")
} Try / catch
resp, err := poller.HandleQuery(ctx, task, reply)
if err != nil && strings.Contains(err.Error(), "missing PollWorkflowTaskQueueResponse") {
// poll returned nil; check for NoWorkflowTaskAvailable upstream
} Prevention
- Only call HandleQuery after a successful legacy-query poll
- Check the poll step for NoWorkflowTaskAvailable before handling
- Make mocks return a populated PollWorkflowTaskQueueResponse
When it happens
Trigger: Calling HandleQuery/handleQuery where the poll callback chain yields a nil *workflowservice.PollWorkflowTaskQueueResponse into respondQueryTaskCompleted.
Common situations: Test polls a task queue with no legacy query available (NoWorkflowTaskAvailable path propagated as nil); mock client returns nil response without error.
Related errors
- missing Legacy Query in PollWorkflowTaskQueueResponse
- missing RespondQueryTaskCompletedRequest
- missing RespondWorkflowTaskCompletedRequest return
- history is nil
- missing RespondActivityTaskCompletedRequest return
AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01).
Data as JSON: /api/errors/3e7610ba53e71960.
Report an issue: GitHub.