{"record":{"id":"7ca29c9ba4d5b5f7","repo":"grafana/k6","slug":"invalid-reflect-value-v-it-needs-to-be-boole","errorCode":null,"errorMessage":"invalid reflect value: '%#v', it needs to be boolean","messagePattern":"invalid reflect value: '%#v', it needs to be boolean","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/grpc/params.go","lineNumber":175,"sourceCode":"\n\t\tswitch k {\n\t\tcase \"plaintext\":\n\t\t\tvar ok bool\n\t\t\tresult.IsPlaintext, ok = v.(bool)\n\t\t\tif !ok {\n\t\t\t\treturn result, fmt.Errorf(\"invalid plaintext value: '%#v', it needs to be boolean\", v)\n\t\t\t}\n\t\tcase \"timeout\":\n\t\t\tvar err error\n\t\t\tresult.Timeout, err = types.GetDurationValue(v)\n\t\t\tif err != nil {\n\t\t\t\treturn result, fmt.Errorf(\"invalid timeout value: %w\", err)\n\t\t\t}\n\t\tcase \"reflect\":\n\t\t\tvar ok bool\n\t\t\tresult.UseReflectionProtocol, ok = v.(bool)\n\t\t\tif !ok {\n\t\t\t\treturn result, fmt.Errorf(\"invalid reflect value: '%#v', it needs to be boolean\", v)\n\t\t\t}\n\t\tcase \"reflectMetadata\":\n\t\t\tmd, err := newMetadata(params.Get(k))\n\t\t\tif err != nil {\n\t\t\t\treturn result, fmt.Errorf(\"invalid reflectMetadata param: %w\", err)\n\t\t\t}\n\n\t\t\tresult.ReflectionMetadata = md\n\t\tcase \"maxReceiveSize\":\n\t\t\tvar ok bool\n\t\t\tresult.MaxReceiveSize, ok = v.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn result, fmt.Errorf(\"invalid maxReceiveSize value: '%#v', it needs to be an integer\", v)\n\t\t\t}\n\t\t\tif result.MaxReceiveSize < 0 {\n\t\t\t\treturn result, fmt.Errorf(\"invalid maxReceiveSize value: '%#v, it needs to be a positive integer\", v)\n\t\t\t}\n\t\tcase \"maxSendSize\":","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/grpc/params.go#L157-L193","documentation":"The reflect option in client.connect(addr, { reflect: true }) enables fetching proto definitions via gRPC server reflection and must be a JS boolean (params.go:173). Strings like 'true', 1, or other types throw 'invalid reflect value'.","triggerScenarios":"connect(addr, { reflect: __ENV.REFLECT }); { reflect: 1 }; { reflect: 'yes' }.","commonSituations":"Env-driven feature toggles; config systems that serialize booleans as strings or integers.","solutions":["Use true/false literals","Coerce env values: __ENV.REFLECT === 'true'","Fix config parsing to produce booleans"],"exampleFix":"// before\nclient.connect(addr, { reflect: __ENV.REFLECT });\n\n// after\nclient.connect(addr, { reflect: __ENV.REFLECT === 'true' });","handlingStrategy":"validation","validationCode":"if (connectParams.reflect !== undefined && typeof connectParams.reflect !== 'boolean') {\n  throw new Error(`reflect must be boolean, got ${typeof connectParams.reflect}`);\n}\nclient.connect(addr, connectParams);","typeGuard":"function toBool(v) {\n  if (typeof v === 'boolean') return v;\n  if (typeof v === 'string') return v === 'true';\n  throw new Error(`expected boolean, got ${typeof v}`);\n}","tryCatchPattern":null,"preventionTips":["Coerce env strings with === 'true' before passing","Treat reflectMetadata as a companion field: it is only meaningful with reflect: true","Keep feature toggles as booleans in config sources"],"tags":["grpc","connect","reflection","type-error"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}