Tencent/WeKnora · error
unsupported runtime task state %q
Error message
unsupported runtime task state %q
What it means
ListRuntimeTasks in internal/router/task_inspector.go:547 returns this error when the requested runtime task state string does not match any valid state via state.Valid(). Unlike pure filters, an unrecognized state is treated as a caller mistake rather than an empty result, so it fails fast with the offending value quoted.
Source
Thrown at internal/router/task_inspector.go:547
}
}
// ListRuntimeTasks returns one cursor page in state-appropriate time order:
// newest first for pending/active/archived/completed, and next-to-run first
// for scheduled/retry. Only allow-listed routing metadata is projected from
// payloads so the dashboard never exposes document content or secrets.
func (a *asynqTaskInspector) ListRuntimeTasks(
ctx context.Context,
queue string,
state types.RuntimeTaskState,
cursor string,
pageSize int,
) (types.RuntimeTaskPage, bool, error) {
if a == nil || a.inspector == nil || a.redis == nil {
return types.RuntimeTaskPage{}, false, nil
}
if !state.Valid() {
return types.RuntimeTaskPage{}, true, fmt.Errorf("unsupported runtime task state %q", state)
}
if pageSize < 1 {
pageSize = 20
}
if pageSize > 100 {
pageSize = 100
}
anchors, err := decodeRuntimeTaskCursor(cursor, queue, state)
if err != nil {
return types.RuntimeTaskPage{}, true, err
}
workers := map[string]runtimeWorkerMetadata{}
if state == types.RuntimeTaskActive {
workers = a.activeWorkerMetadata()
}
result := make([]types.RuntimeTaskInfo, 0, pageSize)
hasMore := false
View on GitHub (pinned to 988cbb0330)
Solutions
- Use one of the exact state values accepted by types' runtime task state enum (call state.Valid()/the documented set).
- Validate/normalize the state parameter in the client before calling.
- Check for enum renames if this worked before a version upgrade.
Example fix
// before page, _, err := ListRuntimeTasks(ctx, "pendng", cursor, 20) // typo // after page, _, err := ListRuntimeTasks(ctx, "pending", cursor, 20)
Defensive patterns
Strategy: type-guard
Validate before calling
if !isValidRuntimeTaskState(stateParam) { // reject or default before calling
} Type guard
func validRuntimeTaskState(s string) (types.RuntimeTaskState, bool) {
st := types.RuntimeTaskState(s)
return st, st.Valid()
} Try / catch
if err != nil {
if strings.Contains(err.Error(), "unsupported runtime task state") {
// surface valid state options to the user / clear stale filter
}
} Prevention
- Derive filter dropdown options from the same enum the server validates.
- Normalize case/whitespace on the state parameter.
- Re-check enum values after upgrading the server version.
When it happens
Trigger: Calling ListRuntimeTasks (admin/inspector API) with a state value that isn't a defined runtime task state — e.g. a typo like "pendng", renamed state constant, or arbitrary user-supplied filter string passed through unvalidated.
Common situations: Dashboard filter built from stale UI options after state enum renames; scripts passing human words like "running now"; case mismatches between caller and enum values.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/543dd3999d21874d.
Report an issue: GitHub.