{"record":{"id":"8a3e49c83376b6cd","repo":"golang/go","slug":"unknown-condition-q","errorCode":null,"errorMessage":"unknown condition %q","messagePattern":"unknown condition %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/internal/script/engine.go","lineNumber":529,"sourceCode":"\treturn b.String()\n}\n\nfunc (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","sourceCodeStart":511,"sourceCodeEnd":547,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/internal/script/engine.go#L511-L547","documentation":"Thrown by Engine.conditionsActive when a condition bracket has no colon but the tag is not in e.Conds (engine.go:527-530). Unlike the prefix variant this message does not list known conditions. It means the bare condition name was never registered.","triggerScenarios":"Writing [unknowntag] cmd where unknowntag is not a key in e.Conds; using [CGO] (wrong case — conditions are case-sensitive) instead of [cgo]; referencing an unregistered custom condition.","commonSituations":"Case mismatch (CGO vs cgo); typo; condition not registered because AddToolChainScriptConditions or DefaultConds was not called; condition exists only in a different engine configuration.","solutions":["Check spelling and case against the registered condition names (conditions are case-sensitive).","Ensure DefaultConds() and any needed AddToolChainScriptConditions populate e.Conds.","Register the custom condition under the exact tag used in the bracket."],"exampleFix":"// before\n[CGO] exec go build\n// after\n[cgo] exec go build","handlingStrategy":"validation","validationCode":"func condKnown(conds map[string]script.Cond, tag string) bool {\n    _, ok := conds[tag]\n    return ok\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Condition names are case-sensitive — use the exact registered key.","Ensure DefaultConds() and AddToolChainScriptConditions populate the engine."],"tags":["go-script-test","conditions","go-toolchain"],"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T06:17:24.410Z"}