{"record":{"id":"99e87c495999bc7d","repo":"golang/go","slug":"unknown-condition-prefix-q-known-v","errorCode":null,"errorMessage":"unknown condition prefix %q; known: %v","messagePattern":"unknown condition prefix %q; known: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/internal/script/engine.go","lineNumber":521,"sourceCode":"\t\t\t// Quote the argument to a form that would be parsed as a single argument.\n\t\t\tb.WriteString(\"'\")\n\t\t\tb.WriteString(strings.ReplaceAll(arg, \"'\", \"''\"))\n\t\t\tb.WriteString(\"'\")\n\t\t} else {\n\t\t\tb.WriteString(arg)\n\t\t}\n\t}\n\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}","sourceCodeStart":503,"sourceCodeEnd":539,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/internal/script/engine.go#L503-L539","documentation":"Thrown by Engine.conditionsActive when a condition bracket contains a colon (e.g. [prefix:suffix]) but the prefix is not a key in e.Conds. The message appends the full list of registered condition names to help diagnose the typo or missing registration. This is distinct from ListConds' variant which omits the 'known:' list.","triggerScenarios":"Using [UNKNOWN:suffix] where UNKNOWN was never registered; referencing a toolchain-only condition (buildmode, GOEXPERIMENT, race) without having called scripttest.AddToolChainScriptConditions; typo like [GOOSX:linux].","commonSituations":"Forgetting to add toolchain conditions to the engine's Conds map; using a condition introduced in a newer Go version on an older runtime; copy-paste typo in the prefix.","solutions":["Read the 'known: [...]' list in the error and pick the correct prefix name.","If the condition is toolchain-specific (cgo, race, GOEXPERIMENT, buildmode, etc.), ensure scripttest.AddToolChainScriptConditions was called when building the engine.","Register the custom condition with e.Conds[name] before running the script."],"exampleFix":"// before — engine built without toolchain conditions\n[GOEXPERIMENT:fieldtrack] exec go build\n// after\nscripttest.AddToolChainScriptConditions(t, e.Conds, runtime.GOOS, runtime.GOARCH)\n[GOEXPERIMENT:fieldtrack] exec go build","handlingStrategy":"validation","validationCode":"import \"maps\"\n\nfunc condPrefixKnown(conds map[string]script.Cond, prefix string) bool {\n    _, ok := conds[prefix]\n    return ok\n}\n\n// Before running a script with generated condition tags:\nfor _, tag := range tags {\n    if prefix, _, ok := strings.Cut(tag, \":\"); ok && !condPrefixKnown(e.Conds, prefix) {\n        return fmt.Errorf(\"unregistered condition prefix %q; known: %v\", prefix, maps.Keys(e.Conds))\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Call scripttest.AddToolChainScriptConditions when using toolchain conditions.","Use the 'known:' list in the error message to fix typos.","Validate programmatically-generated tags against e.Conds keys before execution."],"tags":["go-script-test","conditions","go-toolchain"],"backgroundTag":null,"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}