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

  1. Read the error message - it prints the full list of supported class names
  2. Use a substring of a real class name from that list, e.g. `--type ManiphestTask` or the documented short form `--type task`
  3. 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

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


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/dc6e423bac34ed89. Report an issue: GitHub.