{"record":{"id":"8fc6df91551c40a4","repo":"golang/go","slug":"condition-q-requires-a-suffix","errorCode":null,"errorMessage":"condition %q requires a suffix","messagePattern":"condition %q requires a suffix","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/internal/script/engine.go","lineNumber":532,"sourceCode":"func (e *Engine) conditionsActive(s *State, conds []condition) (bool, error) {\n\tfor _, cond := range conds {\n\t\tvar impl Cond\n\t\tprefix, suffix, ok := strings.Cut(cond.tag, \":\")\n\t\tif ok {\n\t\t\timpl = e.Conds[prefix]\n\t\t\tif impl == nil {\n\t\t\t\treturn false, fmt.Errorf(\"unknown condition prefix %q; known: %v\", prefix, slices.Collect(maps.Keys(e.Conds)))\n\t\t\t}\n\t\t\tif !impl.Usage().Prefix {\n\t\t\t\treturn false, fmt.Errorf(\"condition %q cannot be used with a suffix\", prefix)\n\t\t\t}\n\t\t} else {\n\t\t\timpl = e.Conds[cond.tag]\n\t\t\tif impl == nil {\n\t\t\t\treturn false, fmt.Errorf(\"unknown condition %q\", cond.tag)\n\t\t\t}\n\t\t\tif impl.Usage().Prefix {\n\t\t\t\treturn false, fmt.Errorf(\"condition %q requires a suffix\", cond.tag)\n\t\t\t}\n\t\t}\n\t\tactive, err := impl.Eval(s, suffix)\n\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"evaluating condition %q: %w\", cond.tag, err)\n\t\t}\n\t\tif active != cond.want {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\n\treturn true, nil\n}\n\nfunc (e *Engine) runCommand(s *State, cmd *command, impl Cmd) error {\n\tif impl == nil {\n\t\treturn cmdError(cmd, errors.New(\"unknown command\"))","sourceCodeStart":514,"sourceCodeEnd":550,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/internal/script/engine.go#L514-L550","documentation":"Thrown by Engine.conditionsActive when a condition registered as a prefix Cond (PrefixCondition or CachedCondition, which have Prefix==true) is used in a bracket without the required ':suffix' (engine.go:531-533). Prefix conditions need an argument to be meaningful, so the bare form is rejected before Eval.","triggerScenarios":"Writing [GOOS], [GOARCH], [GODEBUG], or [buildmode] without the colon and value, e.g. [GOARCH] cmd instead of [GOARCH:amd64] cmd.","commonSituations":"Forgetting the suffix on a prefix condition; assuming a condition is boolean when it is parameterized; truncating a condition during copy-paste.","solutions":["Add the required ':value' suffix, e.g. [GOOS:linux].","Run 'help' to see whether the condition is shown as [name:*] (prefix) or [name] (bool).","If you wanted an unconditional check, pick a bool condition instead."],"exampleFix":"// before\n[GOARCH] exec go build\n// after\n[GOARCH:amd64] exec go build","handlingStrategy":"validation","validationCode":"func requiresSuffix(conds map[string]script.Cond, tag string) bool {\n    c, ok := conds[tag]\n    return ok && c.Usage().Prefix\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prefix conditions (GOOS, GOARCH, GODEBUG, buildmode, GOEXPERIMENT) require a ':value'.","Use 'help' output: [name:*] marks a prefix condition."],"tags":["go-script-test","conditions","go-toolchain"],"backgroundTag":null,"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T12:31:55.035Z"}