{"record":{"id":"04f8c6f7b52b8f91","repo":"JuliusBrussee/caveman","slug":"unsupported-catalog-shape","errorCode":null,"errorMessage":"unsupported catalog shape","messagePattern":"unsupported catalog shape","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"shrink/shrink.go","lineNumber":258,"sourceCode":"func extractTools(input []byte) ([]toolEntry, error) {\n\tvar top any\n\tif err := json.Unmarshal(input, &top); err != nil {\n\t\treturn nil, fmt.Errorf(\"not valid JSON: %w\", err)\n\t}\n\tvar rawList []any\n\tswitch t := top.(type) {\n\tcase map[string]any:\n\t\tif v, ok := t[\"tools\"].([]any); ok {\n\t\t\trawList = v\n\t\t} else if v, ok := t[\"functions\"].([]any); ok {\n\t\t\trawList = v\n\t\t} else {\n\t\t\trawList = []any{t} // a single tool object\n\t\t}\n\tcase []any:\n\t\trawList = t\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unsupported catalog shape\")\n\t}\n\n\tvar entries []toolEntry\n\tfor _, item := range rawList {\n\t\tobj, ok := item.(map[string]any)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\t// OpenAI nests under \"function\".\n\t\ttoolObj := obj\n\t\tif fn, ok := obj[\"function\"].(map[string]any); ok {\n\t\t\ttoolObj = fn\n\t\t}\n\t\tname, _ := toolObj[\"name\"].(string)\n\t\tif name == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\traw, _ := json.Marshal(obj)","sourceCodeStart":240,"sourceCodeEnd":276,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/shrink/shrink.go#L240-L276","documentation":"Error \"unsupported catalog shape\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at shrink/shrink.go:258 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a supported catalog shape."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}