{"record":{"id":"22bbaa79fac502f5","repo":"BoundaryML/baml","slug":"unexpected-stream-state","errorCode":null,"errorMessage":"unexpected stream state","messagePattern":"unexpected stream state","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"engine/language_client_go/baml_go/serde/decode.go","lineNumber":324,"sourceCode":"\tif !ok {\n\t\tpanic(\"error decoding value, checked type not found: \" + valueChecked.Name.String())\n\t}\n\tcheckedValue := reflect.New(goType)\n\tcheckedValue.Elem().FieldByName(\"Value\").Set(decodedValue)\n\tcheckedValue.Elem().FieldByName(\"Checks\").Set(reflect.ValueOf(checks))\n\treturn checkedValue.Elem(), goType\n}\n\nfunc decodeStreamStateType(state cffi.CFFIStreamState) shared.StreamStateType {\n\tswitch state {\n\tcase cffi.CFFIStreamState_PENDING:\n\t\treturn shared.StreamStatePending\n\tcase cffi.CFFIStreamState_STARTED:\n\t\treturn shared.StreamStateIncomplete\n\tcase cffi.CFFIStreamState_DONE:\n\t\treturn shared.StreamStateComplete\n\tdefault:\n\t\tpanic(\"unexpected stream state\")\n\t}\n}\n\nfunc convertFieldTypeToGoType(fieldType *cffi.CFFIFieldTypeHolder, typeMap TypeMap) reflect.Type {\n\tif fieldType == nil {\n\t\tpanic(\"error decoding value\")\n\t}\n\n\ttype_ := fieldType.Type\n\n\tif _, ok := type_.(*cffi.CFFIFieldTypeHolder_StringType); ok {\n\t\treturn reflect.TypeOf(\"\")\n\t}\n\n\tif _, ok := type_.(*cffi.CFFIFieldTypeHolder_BoolType); ok {\n\t\treturn reflect.TypeOf(false)\n\t}\n","sourceCodeStart":306,"sourceCodeEnd":342,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_go/baml_go/serde/decode.go#L306-L342","documentation":"decodeStreamStateType converts a CFFIStreamState enum to the shared StreamState type; any state value outside PENDING/STARTED/DONE triggers this panic. It means the native runtime produced a stream state the Go serde does not recognize.","triggerScenarios":"decodeStreamingStateValue receives a CFFIStreamState from a streaming response whose numeric value is unknown to the compiled Go bindings — classic sign of a newer/older runtime speaking to an older compiled enum.","commonSituations":"Upgrading the BAML CLI/runtime without rebuilding Go bindings, or a native library returning an uninitialized enum value.","solutions":["Upgrade the baml Go bindings and regenerate the client to match the installed runtime version","Rebuild your Go binary after upgrading so enum mappings are current","Pin the BAML runtime version your client was generated against","Report the raw state value to BAML maintainers if versions already match"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if state < 0 || state > cffi.CFFIStreamState_DONE { return shared.StreamStatePending }","typeGuard":"func knownStreamState(s cffi.CFFIStreamState) bool {\n  switch s { case cffi.CFFIStreamState_PENDING, cffi.CFFIStreamState_STARTED, cffi.CFFIStreamState_DONE: return true }\n  return false\n}","tryCatchPattern":"defer func() { if r := recover(); r != nil { log.Printf(\"unknown stream state; treating as incomplete\") } }()","preventionTips":["Upgrade and rebuild Go bindings whenever the BAML runtime changes","Pin runtime versions in CI to avoid mixed-version responses","Handle streaming results defensively (partial states are possible)"],"tags":["go","panic","streaming","enum"],"backgroundTag":"invalid-enum-value","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}