{"record":{"id":"1f559ce0aa3478bd","repo":"larksuite/cli","slug":"s-requirement-q-is-invalid","errorCode":null,"errorMessage":"%s.Requirement %q is invalid","messagePattern":"(.+?)\\.Requirement %q is invalid","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shortcuts/common/typed_compiler.go","lineNumber":150,"sourceCode":"\t\t\tpath := fmt.Sprintf(\"Authorization.%s.ConditionalScopes[%d]\", identity, i)\n\t\t\tif err := validateScopeList(conditional.Scopes, path); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif len(conditional.Scopes) == 0 {\n\t\t\t\treturn fmt.Errorf(\"%s.Scopes is empty\", path)\n\t\t\t}\n\t\t\tfor _, scope := range conditional.Scopes {\n\t\t\t\tif _, alwaysRequired := requiredScopes[scope]; alwaysRequired {\n\t\t\t\t\treturn fmt.Errorf(\"%s scope %q is already always required for identity %q\", path, scope, identity)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif conditional.When != strings.TrimSpace(conditional.When) {\n\t\t\t\treturn fmt.Errorf(\"%s.When must be trimmed\", path)\n\t\t\t}\n\t\t\tswitch conditional.Requirement {\n\t\t\tcase typedScopeRequired, typedScopeBestEffort:\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"%s.Requirement %q is invalid\", path, conditional.Requirement)\n\t\t\t}\n\t\t}\n\t}\n\tif len(metadata.Authorization.IdentityOrder) > 0 {\n\t\tif len(metadata.Authorization.IdentityOrder) != len(metadata.Authorization.Identities) {\n\t\t\treturn fmt.Errorf(\"Metadata.Authorization.IdentityOrder must contain each declared identity exactly once\")\n\t\t}\n\t\tseen := make(map[typedIdentity]struct{}, len(metadata.Authorization.IdentityOrder))\n\t\tfor _, identity := range metadata.Authorization.IdentityOrder {\n\t\t\tif _, ok := metadata.Authorization.Identities[identity]; !ok {\n\t\t\t\treturn fmt.Errorf(\"Metadata.Authorization.IdentityOrder contains undeclared identity %q\", identity)\n\t\t\t}\n\t\t\tif _, duplicate := seen[identity]; duplicate {\n\t\t\t\treturn fmt.Errorf(\"Metadata.Authorization.IdentityOrder contains duplicate identity %q\", identity)\n\t\t\t}\n\t\t\tseen[identity] = struct{}{}\n\t\t}\n\t}","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/shortcuts/common/typed_compiler.go#L132-L168","documentation":"The compiler only accepts two values for a ConditionalScopes entry's Requirement field: typedScopeRequired and typedScopeBestEffort. Any other string (including typos or casing variants) makes validateCommandMetadata reject the declaration.","triggerScenarios":"Setting ConditionalScopes[i].Requirement to something other than the two accepted constants, e.g. \"required\" (lowercase), \"optional\", or \"Required\".","commonSituations":"Typing the literal string instead of using the exported constant; refactoring that renamed constants; assuming an empty string works (note: normalization at typed_compiler.go:77 fills empty Requirement with typedScopeRequired, so this error means a non-empty wrong value was set).","solutions":["Replace the literal with the exported constant (e.g. common.TypedScopeRequired or common.TypedScopeBestEffort)","If a literal is required, copy the exact constant value including casing","Leave Requirement empty to get the default (required) via normalization"],"exampleFix":"// before\nRequirement: \"required\",\n// after\nRequirement: common.TypedScopeRequired,","handlingStrategy":"validation","validationCode":"req := c.Requirement\nif req != \"\" && req != common.TypedScopeRequired && req != common.TypedScopeBestEffort { return fmt.Errorf(\"invalid Requirement %q\", req) }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the exported constants instead of string literals","Rely on the empty-string default (required) rather than guessing values","Grep the codebase for existing Requirement usages when unsure of accepted values"],"tags":["go","validation","shortcut-compiler","authorization-scopes"],"backgroundTag":"schema-validation-failed","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"}