{"record":{"id":"519b314feff9697f","repo":"argoproj/argo-workflows","slug":"task-result-s-for-task-s-is-invalid","errorCode":null,"errorMessage":"task result '%s' for task '%s' is invalid","messagePattern":"task result '(.+?)' for task '(.+?)' is invalid","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"workflow/common/ancestry.go","lineNumber":104,"sourceCode":"\n\treturn dependencies, depends\n}\n\nfunc ValidateTaskResults(dagTask *wfv1.DAGTask) error {\n\t// If a user didn't specify a depends expression, there are no task results to validate\n\tif dagTask.Depends == \"\" {\n\t\treturn nil\n\t}\n\n\tmatches := taskResultRegex.FindAllStringSubmatch(dagTask.Depends, -1)\n\tfor _, matchGroup := range matches {\n\t\tsplit := strings.Split(matchGroup[1], \".\")\n\t\ttaskName, taskResult := split[0], TaskResult(split[1])\n\t\tswitch taskResult {\n\t\tcase TaskResultSucceeded, TaskResultFailed, TaskResultSkipped, TaskResultOmitted, TaskResultErrored, TaskResultDaemoned, TaskResultAnySucceeded, TaskResultAllFailed:\n\t\t\t// Do nothing\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"task result '%s' for task '%s' is invalid\", taskResult, taskName)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getTaskDependsLogic(ctx context.Context, dagTask *wfv1.DAGTask, dctx DagContext) string {\n\tif dagTask.Depends != \"\" {\n\t\treturn dagTask.Depends\n\t}\n\n\t// For backwards compatibility, \"dependencies: [A, B]\" is equivalent to \"depends: (A.Successful || A.Skipped || A.Daemoned)) && (B.Successful || B.Skipped || B.Daemoned)\"\n\tvar dependencies []string\n\tfor _, dependency := range dagTask.Dependencies {\n\t\tdepTask := dctx.GetTask(ctx, dependency)\n\t\tdependencies = append(dependencies, expandDependency(dependency, depTask))\n\t}\n\treturn strings.Join(dependencies, \" && \")\n}","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/common/ancestry.go#L86-L122","documentation":"ValidateTaskResults parses depends expressions like 'taskName.Succeeded' in DAG tasks and rejects any task-result suffix that isn't one of the supported ones (Succeeded, Failed, Skipped, Omitted, Errored, Daemoned, AnySucceeded, AllFailed). Prevents silent typos in depends logic from being treated as always-false conditions.","triggerScenarios":"A DAGTask's depends string references '.&lt;result&gt;' with an unrecognized suffix, e.g. 'A.Success', 'A.complete', 'A.SUCCEED' — the regex matches the dot-suffix but the switch has no case for it.","commonSituations":"Typos in depends expressions; confusing OnSuccess/continueOn phrasing with task results; copying depends syntax from other workflow engines; case mismatches.","solutions":["Use an exact supported result: .Succeeded, .Failed, .Skipped, .Omitted, .Errored, .Daemoned, .AnySucceeded, or .AllFailed","Fix capitalization (results are CamelCase, e.g. .Succeeded not .succeeded)","Replace intended-and-unsupported suffixes like .Successful or .Complete with the correct keyword","Run argo lint on the workflow before submitting to catch this pre-flight"],"exampleFix":"// before\ndepends: \"build.Successful && test.Failed\"\n// after\ndepends: \"build.Succeeded && test.Failed\"","handlingStrategy":"validation","validationCode":"var validResults = map[string]bool{\"Succeeded\":true,\"Failed\":true,\"Skipped\":true,\"Omitted\":true,\"Errored\":true,\"Daemoned\":true,\"AnySucceeded\":true,\"AllFailed\":true}\nfunc lintDepends(dep string) error {\n  for _, m := range regexp.MustCompile(`\\.([A-Za-z]+)`).FindAllStringSubmatch(dep, -1) {\n    if !validResults[m[1]] { return fmt.Errorf(\"bad task result: .%s\", m[1]) }\n  }\n  return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run argo lint on every workflow before submit","Copy depends suffixes only from the documented list; watch capitalization","Add CI schema validation of DAG tasks"],"tags":["workflow","dag","validation","depends"],"backgroundTag":"invalid-task-result-expression","analyzedSha":"35bff19146f5a6ada77468c431f2624bd577e373","analyzedAt":"2026-09-03T19:34:35.908Z","contentChangedAt":"2026-09-03T19:34:35.908Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}