weaviate/weaviate · error
expected source map to have a usable Resolver, but got %#v
Error message
expected source map to have a usable Resolver, but got %#v
What it means
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.
Source
Thrown at adapters/handlers/graphql/local/get/class_builder_fields.go:343
result, err := r.resolveGet(p, className)
if err != nil {
return result, enterrors.NewErrGraphQLUser(err, "Get", className)
}
return result, nil
}
}
func (r *resolver) resolveGet(p graphql.ResolveParams, className string) (interface{}, error) {
principal := restCtx.GetPrincipalFromContext(p.Context)
source, ok := p.Source.(map[string]interface{})
if !ok {
return nil, fmt.Errorf("expected graphql root to be a map, but was %T", p.Source)
}
resolver, ok := source["Resolver"].(Resolver)
if !ok {
return nil, fmt.Errorf("expected source map to have a usable Resolver, but got %#v", source["Resolver"])
}
var tenant string
if tk, ok := p.Args["tenant"]; ok {
tenant = tk.(string)
}
if err := r.authorizer.Authorize(p.Context, principal, authorization.READ, authorization.ShardsData(className, tenant)...); err != nil {
return nil, err
}
pagination, err := filters.ExtractPaginationFromArgs(p.Args)
if err != nil {
return nil, err
}
cursor, err := filters.ExtractCursorFromArgs(p.Args)
if err != nil {View on GitHub (pinned to 75aa4b6d11)
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
Example fix
// before
src := map[string]interface{}{"Resolver": nil}
// after
src := map[string]interface{}{"Resolver": get.Resolver(realResolver)} Defensive patterns
Strategy: type-guard
Validate before calling
m, ok := s.(map[string]interface{})
if !ok { return errors.New("not a map") }
if _, ok := m["Resolver"].(Resolver); !ok {
return errors.New("Get source missing usable Resolver")
} Type guard
func extractGetResolver(m map[string]interface{}) (Resolver, bool) {
r, ok := m["Resolver"].(Resolver)
return r, ok
} Try / catch
resolver, ok := source["Resolver"].(Resolver)
if !ok {
return nil, fmt.Errorf("expected source map to have a usable Resolver, but got %#v", source["Resolver"])
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- expected graphql root to be a map, but was %T
- expected source to be a map, but was %T
- expected source to contain a usable Resolver, but was %#v
- expected a *models.GeoCoordinates, but got: %T
- expected a *models.PhoneNumber, but got: %T
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/ce445a4d2245d949.
Report an issue: GitHub.