{"record":{"id":"dc6e423bac34ed89","repo":"phacility/phabricator","slug":"type-s-matches-no-indexable-objects-supported","errorCode":null,"errorMessage":"Type \"%s\" matches no indexable objects. Supported types are: %s.","messagePattern":"Type \"(.+?)\" matches no indexable objects\\. Supported types are: (.+?)\\.","errorType":"console","errorClass":"PhutilArgumentUsageException","httpStatus":null,"severity":"warning","filePath":"src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php","lineNumber":392,"sourceCode":"          continue;\n        }\n\n        $matches_map[$type][] = $object_class;\n        $object_matches[$object_class] = $object;\n      }\n    }\n\n    $all_types = array();\n    foreach ($objects as $object) {\n      $all_types[] = get_class($object);\n    }\n    sort($all_types);\n    $type_list = implode(', ', $all_types);\n\n    foreach ($type_map as $type => $normalized_type) {\n      $matches = idx($matches_map, $type);\n      if (!$matches) {\n        throw new PhutilArgumentUsageException(\n          pht(\n            'Type \"%s\" matches no indexable objects. '.\n            'Supported types are: %s.',\n            $type,\n            $type_list));\n      }\n\n      if (count($matches) > 1) {\n        throw new PhutilArgumentUsageException(\n          pht(\n            'Type \"%s\" matches multiple indexable objects. Use a more '.\n            'specific string. Matching objects are: %s.',\n            $type,\n            implode(', ', $matches)));\n      }\n    }\n\n    return $object_matches;","sourceCodeStart":374,"sourceCodeEnd":410,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php#L374-L410","documentation":"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.","triggerScenarios":"`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.","commonSituations":"Guessing type names instead of using documented ones; scripts ported from another install with custom applications; renamed classes after an upgrade or fork divergence.","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"],"exampleFix":"# before\nbin/search index --type ticket\n\n# after\nbin/search index --type ManiphestTask","handlingStrategy":"validation","validationCode":"$classes = id(new PhutilClassMapQuery())\n  ->setAncestorClass('PhabricatorIndexableInterface')\n  ->execute();\n$names = array_map('strtolower', array_map('get_class', $classes));\n$needle = strtolower($type);\n$matches = array_filter($names, function ($n) use ($needle) {\n  return strpos($n, $needle) !== false;\n});\nif (count($matches) === 0) {\n  // reject before invoking: no indexable class contains this string\n} elseif (count($matches) > 1) {\n  // reject: ambiguous, require a more specific string\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["cli","bin-search","usage-error","type-resolution"],"backgroundTag":"unknown-type-specifier","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}