gohugoio/hugo · error
failed to match %s %q: %w
Error message
failed to match %s %q: %w
What it means
After successfully compiling a glob/range filter, calling matcher.IndexMatch(filter) returned an error (vectorstores.go:810-812). The filter object is valid but applying it against the configured dimension's index failed — e.g. resolving a named index that does not exist, or an inconsistent dimension configuration.
Source
Thrown at hugolib/sitesmatrix/vectorstores.go:812
if what == "languages" {
for i := range matcher.ForEachIndex() {
result.Set(i)
}
} else {
result.Set(matcher.IndexDefault())
}
}
return result, nil
}
filter, err := predicate.NewIndexStringPredicateFromGlobsAndRanges(values, matcher.ResolveIndex, hglob.GetGlobDot)
if err != nil {
return nil, fmt.Errorf("failed to create filter for %s: %w", what, err)
}
iter, err := matcher.IndexMatch(filter)
if err != nil {
return nil, fmt.Errorf("failed to match %s %q: %w", what, values, err)
}
for i := range iter {
if result == nil {
result = hmaps.NewOrderedIntSet()
}
result.Set(i)
}
return result, nil
}
l, err1 := applyFilter("languages", cfg.Globs.Languages, b.cfg.ConfiguredLanguages)
v, err2 := applyFilter("versions", cfg.Globs.Versions, b.cfg.ConfiguredVersions)
r, err3 := applyFilter("roles", cfg.Globs.Roles, b.cfg.ConfiguredRoles)
if err := cmp.Or(err1, err2, err3); err != nil {
panic(fmt.Errorf("failed to apply filters: %w", err))
}View on GitHub (pinned to 52c9bd7908)
Solutions
- Compare the filter values against the actually configured languages/versions/roles and remove or correct mismatches.
- Ensure the dimension configuration (ConfiguredLanguages/Versions/Roles) is fully loaded before applying filters.
- If the filter comes from URL/config input, restrict it to known dimension members.
Example fix
// before
cfg.Globs.Languages = []string{"pt-br"} // not configured
// after
cfg.Globs.Languages = []string{"pt"} // configured language Defensive patterns
Strategy: validation
Validate before calling
// Ensure filter values reference only configured dimension members.
func filterMatchesConfigured(values []string, configured []string) error {
set := map[string]bool{}
for _, c := range configured { set[c] = true }
for _, v := range values {
if !set[v] {
return fmt.Errorf("filter value %q is not a configured dimension member", v)
}
}
return nil
} Prevention
- Cross-check filter values against configured languages/versions/roles.
- Load dimension configuration before applying filters.
- Reject unknown dimension members from external/config input.
When it happens
Trigger: A glob filter that references a language/version/role name that cannot be resolved by matcher.ResolveIndex during matching, or an internal index mismatch in the configured dimension. The %q value shows the patterns; %s the dimension.
Common situations: Filtering by a language code (e.g. "pt-br") that is not configured in languages; a version glob matching a name removed from the versions config; role filter against an undefined role.
Related errors
- failed to create filter for %s: %w
- failed to apply filters: %w
- must provide cache Dir
- config not set
- Unable to locate config file or config directory. Perhaps yo
AI-assisted analysis of gohugoio/hugo@52c9bd7908 (2026-08-09).
Data as JSON: /api/errors/f706eac8f4c06b35.
Report an issue: GitHub.