{"record":{"id":"2775a32e6f3a3d63","repo":"larksuite/cli","slug":"normalize-alias-s-cannot-declare-conflict","errorCode":null,"errorMessage":"normalize alias --%s cannot declare Conflict","messagePattern":"normalize alias --(.+?) cannot declare Conflict","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shortcuts/common/typed_compile_args.go","lineNumber":356,"sourceCode":"\tdefault:\n\t\treturn fmt.Errorf(\"unknown CLI encoding %q\", field.cli.Encoding)\n\t}\n\tseenAliases := make(map[string]struct{})\n\tfor i, alias := range field.cli.Aliases {\n\t\tif !aliasNamePattern.MatchString(alias.Name) {\n\t\t\treturn fmt.Errorf(\"alias[%d] name %q is invalid\", i, alias.Name)\n\t\t}\n\t\tif alias.Name == field.name {\n\t\t\treturn fmt.Errorf(\"alias[%d] duplicates canonical flag --%s\", i, field.name)\n\t\t}\n\t\tif _, duplicate := seenAliases[alias.Name]; duplicate {\n\t\t\treturn fmt.Errorf(\"duplicate alias --%s\", alias.Name)\n\t\t}\n\t\tseenAliases[alias.Name] = struct{}{}\n\t\tswitch alias.Mode {\n\t\tcase typedAliasNormalize:\n\t\t\tif alias.Conflict != \"\" {\n\t\t\t\treturn fmt.Errorf(\"normalize alias --%s cannot declare Conflict\", alias.Name)\n\t\t\t}\n\t\t\tif alias.Deprecated {\n\t\t\t\treturn fmt.Errorf(\"deprecated alias --%s must use independent mode so Cobra can emit its warning\", alias.Name)\n\t\t\t}\n\t\tcase typedAliasIndependent:\n\t\t\tswitch alias.Conflict {\n\t\t\tcase typedAliasCanonicalWins, typedAliasErrorIfBoth:\n\t\t\tcase typedAliasTrimmedEqualOrError:\n\t\t\t\tif indirectKind(field.valueType) != reflect.String {\n\t\t\t\t\treturn fmt.Errorf(\"trimmed_equal_or_error alias --%s requires string input\", alias.Name)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"independent alias --%s must declare a supported Conflict\", alias.Name)\n\t\t\t}\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"alias --%s has invalid Mode %q\", alias.Name, alias.Mode)\n\t\t}\n\t}","sourceCodeStart":338,"sourceCodeEnd":374,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/shortcuts/common/typed_compile_args.go#L338-L374","documentation":"Aliases in `normalize` mode rewrite the value into the canonical flag and therefore cannot also declare a Conflict policy (canonical_wins, error_if_both, trimmed_equal_or_error); conflict semantics only apply to `independent` aliases. Declaring both is contradictory and rejected.","triggerScenarios":"cli tag declares an alias with normalize mode plus a conflict clause, e.g. alias=xxx,mode=normalize,conflict=error_if_both; validateInputCLI's typedAliasNormalize branch sees alias.Conflict != \"\".","commonSituations":"Copying a full alias tag string (including conflict=...) from an independent alias and only changing the mode; misunderstanding that normalize aliases always merge into the canonical flag so conflict is moot.","solutions":["Remove the conflict=... token from the normalize alias tag.","If conflict semantics are required, switch the alias mode to independent and pick a supported Conflict value.","Keep normalize aliases minimal: name and optional deprecation-free usage only (deprecated also requires independent mode)."],"exampleFix":"// before\ncli:\"alias=old-name,mode=normalize,conflict=error_if_both\"\n// after\ncli:\"alias=old-name,mode=normalize\"","handlingStrategy":"validation","validationCode":"func validAliasMode(mode, conflict string) error {\n\tif mode == \"normalize\" && conflict != \"\" {\n\t\treturn fmt.Errorf(\"normalize aliases cannot declare conflict\")\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Conflict policies belong to independent-mode aliases only.","When copying alias tags between modes, strip conflict=... tokens.","Remember deprecated aliases also require independent mode, so normalize aliases must stay non-deprecated."],"tags":["cli","alias","conflict","authoring-time"],"backgroundTag":"invalid-cli-tag-encoding","analyzedSha":"7fd6ef3c07182257ce776cdc5a614e122d5bd4b3","analyzedAt":"2026-09-04T21:17:44.649Z","contentChangedAt":"2026-09-04T21:17:44.649Z","schemaVersion":2},"datasetVersion":"2026-09-12T02:17:10.037Z"}