{"record":{"id":"4b955a7ed4fb9ce0","repo":"argoproj/argo-workflows","slug":"invalid-concurrencypolicy-s","errorCode":null,"errorMessage":"invalid ConcurrencyPolicy: %s","messagePattern":"invalid ConcurrencyPolicy: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"workflow/cron/operator.go","lineNumber":287,"sourceCode":"\t\tcase v1alpha1.AllowConcurrent, \"\":\n\t\t\t// Do nothing\n\t\tcase v1alpha1.ForbidConcurrent:\n\t\t\tif len(woc.cronWf.Status.Active) > 0 {\n\t\t\t\twoc.metrics.CronWfPolicy(ctx, woc.cronWf.Name, woc.cronWf.Namespace, v1alpha1.ForbidConcurrent)\n\t\t\t\twoc.log.Info(ctx, \"'ConcurrencyPolicy: Forbid' and has an active Workflow so it was not run\")\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\tcase v1alpha1.ReplaceConcurrent:\n\t\t\tif len(woc.cronWf.Status.Active) > 0 {\n\t\t\t\twoc.metrics.CronWfPolicy(ctx, woc.cronWf.Name, woc.cronWf.Namespace, v1alpha1.ReplaceConcurrent)\n\t\t\t\twoc.log.Info(ctx, \"'ConcurrencyPolicy: Replace' and has active Workflows\")\n\t\t\t\terr := woc.terminateOutstandingWorkflows(ctx)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\treturn false, fmt.Errorf(\"invalid ConcurrencyPolicy: %s\", woc.cronWf.Spec.ConcurrencyPolicy)\n\t\t}\n\t}\n\treturn true, nil\n}\n\nfunc (woc *cronWfOperationCtx) terminateOutstandingWorkflows(ctx context.Context) error {\n\tfor _, wfObjectRef := range woc.cronWf.Status.Active {\n\t\twoc.log.WithField(\"name\", wfObjectRef.Name).Info(ctx, \"stopping\")\n\t\terr := util.TerminateWorkflow(ctx, woc.wfClient, wfObjectRef.Name)\n\t\tif err != nil {\n\t\t\tif apierrors.IsNotFound(err) {\n\t\t\t\twoc.log.WithField(\"name\", wfObjectRef.Name).Warn(ctx, \"workflow not found when trying to terminate outstanding workflows\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif alreadyShutdownErr, ok := errors.AsType[util.AlreadyShutdownError](err); ok {\n\t\t\t\twoc.log.Warn(ctx, alreadyShutdownErr.Error())\n\t\t\t\tcontinue\n\t\t\t}","sourceCodeStart":269,"sourceCodeEnd":305,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/cron/operator.go#L269-L305","documentation":"enforceRuntimePolicy validates spec.concurrencyPolicy on a CronWorkflow. Only AllowConcurrent, ForbidConcurrent, and ReplaceConcurrent are valid; any other string hits the switch's default and aborts this cron evaluation with this error.","triggerScenarios":"A CronWorkflow is submitted or updated with concurrencyPolicy set to something other than \"\", Allow, Forbid, or Replace — enforcement happens when the cron operator runs (run -> enforceRuntimePolicy).","commonSituations":"Typos like \"AllowConcurrent\" vs \"Allow\"; YAML written against Kubernetes CronJob semantics (\"Forbid\" works, but misspellings like \"allowconcurrent\" or \"forbidden\" do not); tooling generating invalid values.","solutions":["Set concurrencyPolicy to one of: Allow, Forbid, Replace (or omit it)","Run argo lint on the CronWorkflow to catch invalid enum values before submitting","Fix the field with kubectl edit cronworkflow <name> or update the manifest","Check CRD/schema version mismatch if a previously-valid value is now rejected"],"exampleFix":"// before\nspec:\n  concurrencyPolicy: AllowConcurrent\n// after\nspec:\n  concurrencyPolicy: Allow","handlingStrategy":"validation","validationCode":"# valid values: Allow | Forbid | Replace (or omit)\nkubectl get cronworkflow <name> -o jsonpath='{.spec.concurrencyPolicy}'","typeGuard":"var valid = map[string]bool{\"\": true, \"Allow\": true, \"Forbid\": true, \"Replace\": true}\nif !valid[policy] {\n    return fmt.Errorf(\"invalid ConcurrencyPolicy: %s\", policy)\n}","tryCatchPattern":"canProceed, err := enforceRuntimePolicy(ctx)\nif err != nil {\n    // fix spec.concurrencyPolicy in the CronWorkflow, then re-run\n    return canProceed, err\n}","preventionTips":["Only use Allow, Forbid, or Replace in cronworkflow specs","Run argo lint on CronWorkflow manifests in CI","Don't copy concurrencyPolicy semantics from k8s CronJobs blindly"],"tags":["cron","config-validation","enum"],"backgroundTag":"invalid-enum-value","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"}