{"record":{"id":"7bc77a09a24fa1ae","repo":"larksuite/cli","slug":"input-relations-d-kind-s-has-invalid-param-coun","errorCode":null,"errorMessage":"Input.Relations[%d] kind %s has invalid param count %d","messagePattern":"Input\\.Relations\\[(.+?)\\] kind (.+?) has invalid param count (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shortcuts/common/typed_compile_contract.go","lineNumber":27,"sourceCode":"\t\"fmt\"\n\t\"strings\"\n)\n\nfunc compileRelations(definitions []typedRelation, fieldByName map[string]int) ([]compiledRelation, error) {\n\tresult := make([]compiledRelation, 0, len(definitions))\n\tseen := make(map[string]struct{})\n\tfor i, definition := range definitions {\n\t\tminimum := 2\n\t\texact := 0\n\t\tswitch definition.Kind {\n\t\tcase typedRelationExactlyOne, typedRelationAtLeastOne, typedRelationCoOccur, typedRelationConflicts:\n\t\tcase typedRelationRequires:\n\t\t\texact = 2\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"Input.Relations[%d].Kind %q is invalid\", i, definition.Kind)\n\t\t}\n\t\tif exact > 0 && len(definition.Params) != exact || exact == 0 && len(definition.Params) < minimum {\n\t\t\treturn nil, fmt.Errorf(\"Input.Relations[%d] kind %s has invalid param count %d\", i, definition.Kind, len(definition.Params))\n\t\t}\n\t\tif definition.Presence != typedPresenceExplicit && definition.Presence != typedPresenceNonZero {\n\t\t\treturn nil, fmt.Errorf(\"Input.Relations[%d].Presence %q is invalid\", i, definition.Presence)\n\t\t}\n\t\tif definition.Stage != typedStageSourcePreRun && definition.Stage != typedStageAfterPrepare {\n\t\t\treturn nil, fmt.Errorf(\"Input.Relations[%d].Stage %q is invalid\", i, definition.Stage)\n\t\t}\n\t\tcompiled := compiledRelation{kind: definition.Kind, presence: definition.Presence, stage: definition.Stage}\n\t\tlocal := make(map[string]struct{})\n\t\tfor _, name := range definition.Params {\n\t\t\tfield, ok := fieldByName[name]\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"Input.Relations[%d] references unknown param --%s\", i, name)\n\t\t\t}\n\t\t\tif _, duplicate := local[name]; duplicate {\n\t\t\t\treturn nil, fmt.Errorf(\"Input.Relations[%d] repeats param --%s\", i, name)\n\t\t\t}\n\t\t\tlocal[name] = struct{}{}","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/shortcuts/common/typed_compile_contract.go#L9-L45","documentation":"compileRelations enforces param-count rules per relation kind: exactly_one/at_least_one/co_occur/conflicts require at least 2 params, and requires requires exactly 2. A relation with too few (or, for requires, not exactly 2) params fails compilation with this error. It exists so runtime relation enforcement never sees under-specified rules.","triggerScenarios":"Declaring Relations with a single-param relation, e.g. {Kind: typedRelationRequires, Params: []string{\"a\"}} or a conflicts with one param.","commonSituations":"Building relation lists programmatically with filtered params that dropped entries; misunderstanding that 'requires' is a pair relation.","solutions":["Ensure each relation lists at least 2 distinct params (exactly 2 for requires)","Split or remove degenerate single-param relations; a one-param rule is meaningless, delete it","If params are computed at build time, assert the list length before appending the relation"],"exampleFix":"// before\n{Kind: typedRelationRequires, Params: []string{\"token\"}}\n// after\n{Kind: typedRelationRequires, Params: []string{\"token\", \"user_id\"}}","handlingStrategy":"validation","validationCode":"func relationParamCountOK(k typedRelationKind, n int) bool {\n\tif k == typedRelationRequires { return n == 2 }\n\treturn n >= 2\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Remember requires is strictly a 2-param relation","Guard programmatic relation builders against <2 params","Delete degenerate single-param relations instead of encoding them"],"tags":["go","validation","compile-time","relations"],"backgroundTag":"invalid-param-count","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"}