{"record":{"id":"9f6516192ec1367b","repo":"argoproj/argo-workflows","slug":"can-t-process-artifact-gc-strategy-s-node-id-q","errorCode":null,"errorMessage":"can't process Artifact GC Strategy %s: node ID %q not found in Status","messagePattern":"can't process Artifact GC Strategy (.+?): node ID %q not found in Status","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"workflow/controller/artifact_gc.go","lineNumber":178,"sourceCode":"\n\tfor _, artifactSearchResult := range artifactSearchResults {\n\t\t// get the permissions required for this artifact and create a unique Pod name from them\n\t\tinfo = woc.getArtifactGCPodInfo(&artifactSearchResult.Artifact)\n\t\tpodName, err = woc.artGCPodName(strategy, info)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, found := podNames[podName]; !found {\n\t\t\tpodNames[podName] = info\n\t\t}\n\t\tif _, found := groupedByPod[podName]; !found {\n\t\t\tgroupedByPod[podName] = make(templatesToArtifacts)\n\t\t}\n\t\t// get the Template for the Artifact\n\t\tnode, nodeErr := woc.wf.Status.Nodes.Get(artifactSearchResult.NodeID)\n\t\tif nodeErr != nil {\n\t\t\twoc.log.WithField(\"nodeID\", artifactSearchResult.NodeID).Error(ctx, \"Was unable to obtain node\")\n\t\t\treturn fmt.Errorf(\"can't process Artifact GC Strategy %s: node ID %q not found in Status\", strategy, artifactSearchResult.NodeID)\n\t\t}\n\t\ttemplateName := util.GetTemplateFromNode(*node)\n\t\tif templateName == \"\" {\n\t\t\treturn fmt.Errorf(\"can't process Artifact GC Strategy %s: node %+v has an unnamed template\", strategy, node)\n\t\t}\n\t\ttemplate, found := templatesByName[templateName]\n\t\tif !found {\n\t\t\ttemplate = woc.wf.GetTemplateByName(templateName)\n\t\t\tif template == nil {\n\t\t\t\treturn fmt.Errorf(\"can't process Artifact GC Strategy %s: template name %q belonging to node %+v not found\", strategy, templateName, node)\n\t\t\t}\n\t\t\ttemplatesByName[templateName] = template\n\t\t}\n\n\t\tif _, found := groupedByPod[podName][template.Name]; !found {\n\t\t\tgroupedByPod[podName][template.Name] = make(wfv1.ArtifactSearchResults, 0)\n\t\t}\n","sourceCodeStart":160,"sourceCodeEnd":196,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/controller/artifact_gc.go#L160-L196","documentation":"During Artifact GC, processArtifactGCStrategy groups artifact search results by pod and needs each artifact's originating node to derive its template. If the node ID recorded in the artifact search result cannot be found in workflow.Status.Nodes, the strategy cannot proceed and this error is returned, failing the GC reconciliation.","triggerScenarios":"Status.Nodes no longer contains the node ID referenced by an artifact search result — e.g. status truncated/offloaded incorrectly, nodes pruned by workflow retention/pod-metadata deletion features, or corrupted/stale artifact GC status after a controller upgrade.","commonSituations":"Running artifactGC after the workflow's node status was compacted (podMetadata/retentionPolicy removed nodes); workflows retried/resubmitted so old node IDs persist in GC state; hydrator offloading bugs causing missing nodes on read.","solutions":["Inspect workflow Status.Nodes (`argo get <wf> -o yaml`) and compare with the nodeID in the artifact GC status","Remove stale artifact-gc-status entries or resubmit so GC state is rebuilt from current nodes","Disable aggressive node deletion (retention/podMetadata strategies) for workflows using artifactGC","Upgrade to a patched Argo version if status offloading is dropping node entries"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// before GC processing, verify node presence\nif _, ok := wf.Status.Nodes[nodeID]; !ok {\n    log.Warn(\"node missing from status, skipping artifact GC\", nodeID)\n}","typeGuard":null,"tryCatchPattern":"err := garbageCollectArtifacts(ctx)\nif err != nil && strings.Contains(err.Error(), \"not found in Status\") {\n    // skip/rebuild GC state instead of failing the workflow\n}","preventionTips":["Avoid retention policies that delete nodes for workflows using artifactGC","Don't hand-edit workflow Status.Nodes","Keep Argo upgraded for artifactGC/hydrator fixes"],"tags":["artifact-gc","workflow-status","argo-workflows"],"backgroundTag":"node-not-found","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"}