{"record":{"id":"3e91317a4f532875","repo":"hashicorp/terraform","slug":"task-stage-s-has-invalid-status-s","errorCode":null,"errorMessage":"Task stage '%s' has invalid status: %s","messagePattern":"Task stage '(.+?)' has invalid status: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote/backend_taskStages.go","lineNumber":51,"sourceCode":"\t\t}\n\n\t\tswitch stage.Status {\n\t\tcase tfe.TaskStagePending:\n\t\t\t// Waiting for it to start\n\t\t\treturn true, nil\n\t\tcase tfe.TaskStageRunning:\n\t\t\t// not a terminal status so we continue to poll\n\t\t\treturn true, nil\n\t\tcase tfe.TaskStagePassed:\n\t\t\treturn false, nil\n\t\tcase tfe.TaskStageCanceled, tfe.TaskStageErrored, tfe.TaskStageFailed:\n\t\t\treturn false, fmt.Errorf(\"Task Stage '%s': %s.\", stage.ID, stage.Status)\n\t\tcase tfe.TaskStageAwaitingOverride:\n\t\t\treturn false, fmt.Errorf(\"Task Stage '%s' awaiting override.\", stage.ID)\n\t\tcase tfe.TaskStageUnreachable:\n\t\t\treturn false, nil\n\t\tdefault:\n\t\t\treturn false, fmt.Errorf(\"Task stage '%s' has invalid status: %s\", stage.ID, stage.Status)\n\t\t}\n\t})\n}\n","sourceCodeStart":33,"sourceCodeEnd":55,"githubUrl":"https://github.com/hashicorp/terraform/blob/d32a084675427f5ac3f7d2868578ef8b2c1dc525/internal/backend/remote/backend_taskStages.go#L33-L55","documentation":"Defensive default arm in waitTaskStage's status switch: TFC returned a TaskStage status value the client does not recognize. Like the plan-mode guard, this indicates the TFC/TFE server introduced a new status that this build of go-tfe doesn't handle.","triggerScenarios":"stage.Status is a value outside the known set (Pending, Running, Passed, Canceled, Errored, Failed, AwaitingOverride, Unreachable): newer TFC/TFE server than the go-tfe client bundled in this Terraform build.","commonSituations":"TFC shipped a new task lifecycle status; Terraform core pinned to an older go-tfe; custom TFE build extending statuses; partial API response corruption returning an empty/garbage status string.","solutions":["Upgrade Terraform to a release whose bundled go-tfe knows the new status.","Or pin the TFC/TFE server version to one compatible with your Terraform build.","If persistent, capture stage.ID and the raw status from TFC support to identify the new value."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Reject unknown statuses explicitly to fail fast on version skew\nswitch stage.Status {\ncase /* all known */: // handle\ndefault:\n    return fmt.Errorf(\"unsupported task stage status %q; upgrade Terraform/go-tfe\", stage.Status)\n}","typeGuard":"var knownTaskStatuses = map[tfe.TaskStageStatus]bool{\n    tfe.TaskStagePending: true, tfe.TaskStageRunning: true, tfe.TaskStagePassed: true,\n    tfe.TaskStageCanceled: true, tfe.TaskStageErrored: true, tfe.TaskStageFailed: true,\n    tfe.TaskStageAwaitingOverride: true, tfe.TaskStageUnreachable: true,\n}\nfunc isKnownTaskStatus(s tfe.TaskStageStatus) bool { return knownTaskStatuses[s] }","tryCatchPattern":null,"preventionTips":["Upgrade Terraform alongside TFC/TFE so go-tfe knows new statuses.","Pin versions together in CI to detect skew early.","Capture unknown statuses for support when they recur."],"tags":["terraform","remote-backend","tfe","run-tasks","version-skew","defensive"],"backgroundTag":null,"analyzedSha":"d32a084675427f5ac3f7d2868578ef8b2c1dc525","analyzedAt":"2026-08-11T18:43:52.779Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}