{"record":{"id":"11caac2232dba869","repo":"larksuite/cli","slug":"metadata-authorization-identities-must-declare-at","errorCode":null,"errorMessage":"Metadata.Authorization.Identities must declare at least one identity","messagePattern":"Metadata\\.Authorization\\.Identities must declare at least one identity","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shortcuts/common/typed_compiler.go","lineNumber":118,"sourceCode":"\tif command != metadata.Command || strings.ContainsAny(command, \" \\t\\r\\n/\") {\n\t\treturn fmt.Errorf(\"Metadata.Command %q must be one trimmed command segment\", metadata.Command)\n\t}\n\tif !strings.HasPrefix(command, \"+\") {\n\t\treturn fmt.Errorf(\"Metadata.Command %q must start with '+'\", metadata.Command)\n\t}\n\tif command == \"+\" {\n\t\treturn fmt.Errorf(\"Metadata.Command must contain a name after '+'\")\n\t}\n\tif strings.TrimSpace(metadata.Description) == \"\" {\n\t\treturn fmt.Errorf(\"Metadata.Description is required\")\n\t}\n\tswitch metadata.Risk {\n\tcase typedRiskRead, typedRiskWrite, typedRiskHighRiskWrite:\n\tdefault:\n\t\treturn fmt.Errorf(\"Metadata.Risk %q is invalid\", metadata.Risk)\n\t}\n\tif len(metadata.Authorization.Identities) == 0 {\n\t\treturn fmt.Errorf(\"Metadata.Authorization.Identities must declare at least one identity\")\n\t}\n\tfor identity, auth := range metadata.Authorization.Identities {\n\t\tif identity != typedIdentityUser && identity != typedIdentityBot {\n\t\t\treturn fmt.Errorf(\"Metadata.Authorization identity %q is invalid\", identity)\n\t\t}\n\t\tif err := validateScopeList(auth.RequiredScopes, fmt.Sprintf(\"Authorization.%s.RequiredScopes\", identity)); err != nil {\n\t\t\treturn err\n\t\t}\n\t\trequiredScopes := make(map[string]struct{}, len(auth.RequiredScopes))\n\t\tfor _, scope := range auth.RequiredScopes {\n\t\t\trequiredScopes[scope] = struct{}{}\n\t\t}\n\t\tfor i, conditional := range auth.ConditionalScopes {\n\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 {","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/shortcuts/common/typed_compiler.go#L100-L136","documentation":"Compile-time guard in validateCommandMetadata: the authorization block declares no identities; every shortcut must declare at least one (user or bot).","triggerScenarios":"Thrown at shortcuts/common/typed_compiler.go:118 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Declare Metadata.Authorization.Identities with user and/or bot"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}