phacility/phabricator · warning · PhutilArgumentUsageException
Type "%s" matches no indexable objects. Supported types are:
Error message
Type "%s" matches no indexable objects. Supported types are: %s.
What it means
Each --type value in `bin/search index` is matched case-insensitively as a substring against the class names of every PhabricatorIndexableInterface implementation. When a type string matches zero classes, this usage exception is thrown and its message enumerates every supported indexable class name, so you can copy an exact match from the list.
Source
Thrown at src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php:392
continue;
}
$matches_map[$type][] = $object_class;
$object_matches[$object_class] = $object;
}
}
$all_types = array();
foreach ($objects as $object) {
$all_types[] = get_class($object);
}
sort($all_types);
$type_list = implode(', ', $all_types);
foreach ($type_map as $type => $normalized_type) {
$matches = idx($matches_map, $type);
if (!$matches) {
throw new PhutilArgumentUsageException(
pht(
'Type "%s" matches no indexable objects. '.
'Supported types are: %s.',
$type,
$type_list));
}
if (count($matches) > 1) {
throw new PhutilArgumentUsageException(
pht(
'Type "%s" matches multiple indexable objects. Use a more '.
'specific string. Matching objects are: %s.',
$type,
implode(', ', $matches)));
}
}
return $object_matches;View on GitHub (pinned to 5720a38cfe)
Solutions
- Read the error message - it prints the full list of supported class names
- Use a substring of a real class name from that list, e.g. `--type ManiphestTask` or the documented short form `--type task`
- Avoid overly short strings - they may match multiple classes and hit the sibling ambiguity error
Example fix
# before bin/search index --type ticket # after bin/search index --type ManiphestTask
Defensive patterns
Strategy: validation
Validate before calling
$classes = id(new PhutilClassMapQuery())
->setAncestorClass('PhabricatorIndexableInterface')
->execute();
$names = array_map('strtolower', array_map('get_class', $classes));
$needle = strtolower($type);
$matches = array_filter($names, function ($n) use ($needle) {
return strpos($n, $needle) !== false;
});
if (count($matches) === 0) {
// reject before invoking: no indexable class contains this string
} elseif (count($matches) > 1) {
// reject: ambiguous, require a more specific string
} Prevention
- Use documented short forms ("task", "commit", "revision") or full class names
- Reuse the class list printed by this very error to pick valid strings
- Pin type strings in scripts and re-validate them after adding applications
When it happens
Trigger: `bin/search index --type ticket` (not a Phabricator class), a misspelled or invented type name, a type valid on a different install/fork but absent here.
Common situations: Guessing type names instead of using documented ones; scripts ported from another install with custom applications; renamed classes after an upgrade or fork divergence.
Related errors
- You can not use query constraint flags (like "--version", "-
- Provide a list of objects to index (like "D123"), or a set o
- '%s' is not the name of a known object.
- Type specification "%s" duplicates type specification "%s".
- Type "%s" matches multiple indexable objects. Use a more spe
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/dc6e423bac34ed89.
Report an issue: GitHub.