{"record":{"id":"472a777346e8a5fc","repo":"Jguer/yay","slug":"expected-boolean-got-s","errorCode":null,"errorMessage":"expected boolean, got %s","messagePattern":"expected boolean, got (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/settings/lua/lua.go","lineNumber":170,"sourceCode":"\t\t}\n\t}\n\n\treturn index\n}\n\nfunc assign(field reflect.Value, val lua.LValue) error {\n\tswitch field.Kind() {\n\tcase reflect.String:\n\t\ts, ok := val.(lua.LString)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"expected string, got %s\", val.Type())\n\t\t}\n\n\t\tfield.SetString(string(s))\n\tcase reflect.Bool:\n\t\tb, ok := val.(lua.LBool)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"expected boolean, got %s\", val.Type())\n\t\t}\n\n\t\tfield.SetBool(bool(b))\n\tcase reflect.Int, reflect.Int64:\n\t\tn, ok := val.(lua.LNumber)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"expected number, got %s\", val.Type())\n\t\t}\n\n\t\tfield.SetInt(int64(n))\n\tcase reflect.Slice:\n\t\treturn assignStructSlice(field, val)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported field kind %s\", field.Kind())\n\t}\n\n\treturn nil\n}","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/Jguer/yay/blob/328f4b4939fb35f38c2f7c7ce3b8638a839bafa5/pkg/settings/lua/lua.go#L152-L188","documentation":"assign maps a Lua value onto a reflect.Bool struct field and requires an LBool. Other Lua types cannot be interpreted as a Go bool, so it returns an error naming the actual Lua type. The wrapping layer prefixes it with yay.opt.<key>.","triggerScenarios":"An init.lua option bound to a Go bool field is set to a string or number, e.g. yay.opt.rebuild = \"yes\" or yay.opt.rebuild = 1.","commonSituations":"Using strings 'true'/'yes' for booleans (a YAML/JSON habit); using 0/1 numeric flags; Lua expression evaluating to nil instead of a boolean.","solutions":["Use Lua's real booleans in init.lua: true or false, unquoted","If you need conditional logic, compute the boolean in Lua: yay.opt.rebuild = (os.getenv(\"CI\") ~= nil)","Confirm the Go field is bool; if the setting is genuinely tri-state/string, change the struct field type"],"exampleFix":"// before (init.lua)\nyay.opt.rebuild = \"yes\"\n// after\nyay.opt.rebuild = true","handlingStrategy":"validation","validationCode":"-- init.lua\nassert(type(yay.opt.rebuild) == \"boolean\", \"yay.opt.rebuild must be true or false\")","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"expected boolean\") {\n    fixBoolOptionInInitLua()\n}","preventionTips":["Use unquoted true/false only","Do not use \"yes\"/\"no\" or 1/0 for Go bool fields","Compute booleans with expressions like (x ~= nil)"],"tags":["lua","type-mismatch","configuration"],"backgroundTag":"type-mismatch","analyzedSha":"328f4b4939fb35f38c2f7c7ce3b8638a839bafa5","analyzedAt":"2026-09-07T16:45:12.608Z","contentChangedAt":"2026-09-07T16:45:12.608Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}