{"record":{"id":"75f1c7133cf11d86","repo":"larksuite/cli","slug":"s-references-unknown-param-s","errorCode":null,"errorMessage":"%s references unknown param --%s","messagePattern":"(.+?) references unknown param --(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shortcuts/common/typed_compile_contract.go","lineNumber":73,"sourceCode":"\t}\n\treturn result, nil\n}\n\nfunc compileAuthorization(definition typedAuthorizationDefinition, fields []compiledInputField, fieldByName map[string]int) error {\n\tfor identity, authorization := range definition.Identities {\n\t\tfor i, conditional := range authorization.ConditionalScopes {\n\t\t\tpath := fmt.Sprintf(\"Authorization.%s.ConditionalScopes[%d]\", identity, i)\n\t\t\tif len(conditional.Params) > 0 && conditional.When == \"\" {\n\t\t\t\treturn fmt.Errorf(\"%s.Params requires agent-readable When text\", path)\n\t\t\t}\n\t\t\tseen := make(map[string]struct{}, len(conditional.Params))\n\t\t\tfor j, param := range conditional.Params {\n\t\t\t\tif param == \"\" || param != strings.TrimSpace(param) {\n\t\t\t\t\treturn fmt.Errorf(\"%s.Params[%d] must be a non-blank trimmed param\", path, j)\n\t\t\t\t}\n\t\t\t\tfieldIndex, ok := fieldByName[param]\n\t\t\t\tif !ok {\n\t\t\t\t\treturn fmt.Errorf(\"%s references unknown param --%s\", path, param)\n\t\t\t\t}\n\t\t\t\tif fields[fieldIndex].cli.Hidden {\n\t\t\t\t\treturn fmt.Errorf(\"%s references hidden param --%s; use a public canonical param\", path, param)\n\t\t\t\t}\n\t\t\t\tif _, duplicate := seen[param]; duplicate {\n\t\t\t\t\treturn fmt.Errorf(\"%s.Params contains duplicate param --%s\", path, param)\n\t\t\t\t}\n\t\t\t\tseen[param] = struct{}{}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc validateOutput(definition typedOutputDefinition, dataShape typedValueShape) error {\n\tswitch definition.Mode {\n\tcase typedOutputGeneric, typedOutputFixedJSON:\n\tdefault:","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/shortcuts/common/typed_compile_contract.go#L55-L91","documentation":"Thrown when a conditional scope in Authorization.<identity>.ConditionalScopes references a param name that is not among the compiled input fields. Like the Relations check, this guarantees scope conditions only mention flags the shortcut actually accepts.","triggerScenarios":"ConditionalScopes.Params lists a flag (e.g. \"--folder-token\") that the input definition does not declare.","commonSituations":"Renaming or removing an input field without updating the authorization block; copying conditional scopes from another shortcut with different params; typo in the param name.","solutions":["Correct the param name to match a declared input field","Add the missing field to the input definition if it is genuinely needed","Delete the stale param from ConditionalScopes.Params"],"exampleFix":"// before\nConditionalScopes: []ConditionalScope{{Params: []string{\"--file-token\"}, When: \"...\"}}\n// input declares --file_token\n// after\nConditionalScopes: []ConditionalScope{{Params: []string{\"--file_token\"}, When: \"...\"}}","handlingStrategy":"validation","validationCode":"for _, p := range cs.Params {\n  if _, ok := fieldNames[p]; !ok {\n    return fmt.Errorf(\"conditional scope references undeclared param %q\", p)\n  }\n}","typeGuard":null,"tryCatchPattern":"if err := common.CompileTypedDefinition(def); err != nil {\n  return fmt.Errorf(\"conditional scope unknown param: %w\", err)\n}","preventionTips":["Update ConditionalScopes.Params whenever input fields are renamed/removed","Derive scope params from a shared constants file with the input fields","Add a compile-all-definitions test"],"tags":["go","authorization","scopes","validation"],"backgroundTag":"shortcut-definition-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"}