{"record":{"id":"386a53c80b0da31d","repo":"argoproj/argo-workflows","slug":"node-is-not-expecting-output-parameter-s","errorCode":null,"errorMessage":"node is not expecting output parameter '%s'","messagePattern":"node is not expecting output parameter '(.+?)'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"workflow/util/util.go","lineNumber":700,"sourceCode":"\t\t\t\t\t\t\treturn true, fmt.Errorf(\"cannot set output parameters because node is not expecting any raw parameters\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor name, val := range values.OutputParameters {\n\t\t\t\t\t\t\thit := false\n\t\t\t\t\t\t\tfor i, param := range node.Outputs.Parameters {\n\t\t\t\t\t\t\t\tif param.Name == name {\n\t\t\t\t\t\t\t\t\tif param.ValueFrom == nil || param.ValueFrom.Supplied == nil {\n\t\t\t\t\t\t\t\t\t\treturn true, fmt.Errorf(\"cannot set output parameter '%s' because it does not use valueFrom.raw or it was already set\", param.Name)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tnode.Outputs.Parameters[i].Value = wfv1.AnyStringPtr(val)\n\t\t\t\t\t\t\t\t\tnode.Outputs.Parameters[i].ValueFrom = nil\n\t\t\t\t\t\t\t\t\tnodeUpdated = true\n\t\t\t\t\t\t\t\t\thit = true\n\t\t\t\t\t\t\t\t\tAddParamToGlobalScope(ctx, wf, node.Outputs.Parameters[i])\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif !hit {\n\t\t\t\t\t\t\t\treturn true, fmt.Errorf(\"node is not expecting output parameter '%s'\", name)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twf.Status.Nodes.Set(ctx, nodeID, node)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !nodeUpdated {\n\t\t\treturn true, fmt.Errorf(\"currently, set only targets suspend nodes: no suspend nodes matching nodeFieldSelector: %s\", nodeFieldSelector)\n\t\t}\n\n\t\terr = hydrator.Dehydrate(ctx, wf)\n\t\tif err != nil {\n\t\t\treturn true, fmt.Errorf(\"unable to compress or offload workflow nodes: %w\", err)\n\t\t}\n\t\tcreator.LabelActor(ctx, wf, action)\n\t\t_, err = wfIf.Update(ctx, wf, metav1.UpdateOptions{})","sourceCodeStart":682,"sourceCodeEnd":718,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/util/util.go#L682-L718","documentation":"When merging reported output parameters into a node, every reported name must match a parameter declared in node.Outputs.Parameters. If a reported name finds no matching declared parameter (hit == false), this error is returned. It enforces that executors only report parameters the template actually declared.","triggerScenarios":"WorkflowTaskResult.OutputParameters contains a name absent from the node's declared outputs — e.g. the executor's cached template is older/newer than the node's template, or the producing step emits a parameter that was renamed or removed.","commonSituations":"Template edited (parameter renamed/removed) while a pod from the old definition reports outputs; version skew between argoexec and the controller after an upgrade mid-workflow.","solutions":["Match reported parameter names to the template's outputs.parameters exactly (case-sensitive).","Re-run the step under the current template so the pod and node status agree.","After upgrading Argo, delete/resubmit workflows whose pods still carry old template definitions rather than resuming them."],"exampleFix":"// before (template declares 'out' but step reports 'output')\noutputs:\n  parameters:\n    - name: out\n      valueFrom:\n        supplied: {}\n// after\noutputs:\n  parameters:\n    - name: output\n      valueFrom:\n        supplied: {}","handlingStrategy":"validation","validationCode":"declared := map[string]bool{}\nfor _, p := range node.Outputs.Parameters {\n\tdeclared[p.Name] = true\n}\nfor name := range values.OutputParameters {\n\tif !declared[name] {\n\t\treturn fmt.Errorf(\"%q not declared on node %s\", name, nodeID)\n\t}\n}","typeGuard":"func declaresParam(n wfv1.NodeStatus, name string) bool {\n\tif n.Outputs == nil {\n\t\treturn false\n\t}\n\tfor _, p := range n.Outputs.Parameters {\n\t\tif p.Name == name {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}","tryCatchPattern":"if err := setOutputs(...); err != nil {\n\tif strings.Contains(err.Error(), \"is not expecting output parameter\") {\n\t\t// template/pod version skew: requeue and rerun the node\n\t\treturn requeue\n\t}\n\treturn err\n}","preventionTips":["Keep executor template and node status in sync — don't rename/remove outputs on running workflows.","Use argo lint to confirm reported outputs match declared parameters.","Resubmit workflows after controller/executor upgrades instead of resuming old pods."],"tags":["outputs","parameters","name-mismatch"],"backgroundTag":"undeclared-output-parameter","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"}