{"record":{"id":"c0e0b95b8275b154","repo":"argoproj/argo-workflows","slug":"codenotimplemented-c0e0b9","errorCode":"CodeNotImplemented","errorMessage":"IsDirectory currently unimplemented for http","messagePattern":"IsDirectory currently unimplemented for http","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"workflow/artifacts/http/http.go","lineNumber":193,"sourceCode":"\t}\n\treq, url, err := h.buildPutRequest(ctx, reader, outputArtifact)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn h.doPutRequest(req, url, \"saving stream\")\n}\n\n// Delete is unsupported for the http artifacts\nfunc (h *ArtifactDriver) Delete(ctx context.Context, s *wfv1.Artifact) error {\n\treturn common.ErrDeleteNotSupported\n}\n\nfunc (h *ArtifactDriver) ListObjects(ctx context.Context, artifact *wfv1.Artifact) ([]string, error) {\n\treturn nil, fmt.Errorf(\"ListObjects is currently not supported for this artifact type, but it will be in a future version\")\n}\n\nfunc (h *ArtifactDriver) IsDirectory(ctx context.Context, artifact *wfv1.Artifact) (bool, error) {\n\treturn false, errors.New(errors.CodeNotImplemented, \"IsDirectory currently unimplemented for http\")\n}\n","sourceCodeStart":175,"sourceCodeEnd":195,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/artifacts/http/http.go#L175-L195","documentation":"The HTTP artifact driver does not implement IsDirectory; calling it always returns a CodeNotImplemented error. HTTP artifacts are single objects (no listing/directory semantics), so Argo cannot determine directory-ness for them.","triggerScenarios":"Calling IsDirectory(ctx, artifact) on an http artifact — typically the artifact server or UI trying to browse/expand the artifact as a directory tree.","commonSituations":"Generic artifact endpoints calling IsDirectory for any driver type; user exposing an HTTP artifact through the artifact server and clicking into it in the UI.","solutions":["Treat http artifacts as files; do not attempt directory browsing.","Serve directory trees via a supported driver (S3/GCS/raw) instead.","Patch the driver to implement IsDirectory via a HEAD request + content-type/Content-Disposition heuristic if needed."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":"// http artifacts never support IsDirectory\nif art.HTTP != nil {\n    // skip IsDirectory; treat as file\n}","tryCatchPattern":"isDir, err := driver.IsDirectory(ctx, art)\nif err != nil && strings.Contains(err.Error(), \"currently unimplemented\") {\n    isDir = false\n}","preventionTips":["Don't build UI/server flows that browse http artifacts as directories","Use S3/GCS/raw for directory-shaped artifacts","Gate generic IsDirectory calls on artifact type"],"tags":["http","unimplemented","artifact"],"backgroundTag":"artifact-driver-not-implemented","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"}