{"record":{"id":"ce445a4d2245d949","repo":"weaviate/weaviate","slug":"expected-source-map-to-have-a-usable-resolver-but","errorCode":null,"errorMessage":"expected source map to have a usable Resolver, but got %#v","messagePattern":"expected source map to have a usable Resolver, but got %#v","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"adapters/handlers/graphql/local/get/class_builder_fields.go","lineNumber":343,"sourceCode":"\t\tresult, err := r.resolveGet(p, className)\n\t\tif err != nil {\n\t\t\treturn result, enterrors.NewErrGraphQLUser(err, \"Get\", className)\n\t\t}\n\t\treturn result, nil\n\t}\n}\n\nfunc (r *resolver) resolveGet(p graphql.ResolveParams, className string) (interface{}, error) {\n\tprincipal := restCtx.GetPrincipalFromContext(p.Context)\n\n\tsource, ok := p.Source.(map[string]interface{})\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"expected graphql root to be a map, but was %T\", p.Source)\n\t}\n\n\tresolver, ok := source[\"Resolver\"].(Resolver)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"expected source map to have a usable Resolver, but got %#v\", source[\"Resolver\"])\n\t}\n\n\tvar tenant string\n\tif tk, ok := p.Args[\"tenant\"]; ok {\n\t\ttenant = tk.(string)\n\t}\n\n\tif err := r.authorizer.Authorize(p.Context, principal, authorization.READ, authorization.ShardsData(className, tenant)...); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpagination, err := filters.ExtractPaginationFromArgs(p.Args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcursor, err := filters.ExtractCursorFromArgs(p.Args)\n\tif err != nil {","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/adapters/handlers/graphql/local/get/class_builder_fields.go#L325-L361","documentation":"After confirming the Get root source is a map, resolveGet asserts source[\"Resolver\"] is the get.Resolver interface. A map without a usable Resolver entry (nil or wrong type) triggers this error. As with 858, it signals broken internal schema wiring rather than bad user input.","triggerScenarios":"The Get root source map was built without the \"Resolver\" key or stored a non-Resolver value — from hand-built test sources, renamed keys in a fork, or a refactor that re-typed the resolver.","commonSituations":"Forked schema assembly; test harnesses constructing the source map manually; refactors of get.Resolver that changed the interface and left stale values in the source map.","solutions":["Set source[\"Resolver\"] to a value implementing get.Resolver when building the Get root source","In tests, use the Resolver returned from the get schema builder instead of stubs of the wrong type","Grep your patches for changes to the Get root field registration and restore the Resolver entry","Run an official release where this wiring is unchanged"],"exampleFix":"// before\nsrc := map[string]interface{}{\"Resolver\": nil}\n// after\nsrc := map[string]interface{}{\"Resolver\": get.Resolver(realResolver)}","handlingStrategy":"type-guard","validationCode":"m, ok := s.(map[string]interface{})\nif !ok { return errors.New(\"not a map\") }\nif _, ok := m[\"Resolver\"].(Resolver); !ok {\n    return errors.New(\"Get source missing usable Resolver\")\n}","typeGuard":"func extractGetResolver(m map[string]interface{}) (Resolver, bool) {\n    r, ok := m[\"Resolver\"].(Resolver)\n    return r, ok\n}","tryCatchPattern":"resolver, ok := source[\"Resolver\"].(Resolver)\nif !ok {\n    return nil, fmt.Errorf(\"expected source map to have a usable Resolver, but got %#v\", source[\"Resolver\"])\n}","preventionTips":["Set the \"Resolver\" key to a get.Resolver value when building the source map","Use the real Resolver from the schema builder in tests, not ad-hoc stubs","Keep the key name as a shared constant","Add wiring regression tests for the Get root field"],"tags":["graphql","resolver","type-assertion","get","internal-wiring"],"backgroundTag":"graphql-resolver-source-type-mismatch","analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}