{"record":{"id":"0f5270ffcd73fd0b","repo":"phacility/phabricator","slug":"no-search-engines-match-s-available-engines-wh","errorCode":null,"errorMessage":"No search engines match \"%s\". Available engines which support data export are: %s.","messagePattern":"No search engines match \"(.+?)\"\\. Available engines which support data export are: (.+?)\\.","errorType":"console","errorClass":"PhutilArgumentUsageException","httpStatus":null,"severity":"error","filePath":"src/applications/transactions/bulk/management/PhabricatorBulkManagementExportWorkflow.php","lineNumber":195,"sourceCode":"      }\n\n      sort($class_list);\n      $class_list = implode(', ', $class_list);\n\n      $matches = array();\n      foreach ($engine_classes as $class_name => $engine_object) {\n        if (stripos($class_name, $class) !== false) {\n          if (strtolower($class_name) == strtolower($class)) {\n            $matches = array($class_name);\n            break;\n          } else {\n            $matches[] = $class_name;\n          }\n        }\n      }\n\n      if (!$matches) {\n        throw new PhutilArgumentUsageException(\n          pht(\n            'No search engines match \"%s\". Available engines which support '.\n            'data export are: %s.',\n            $class,\n            $class_list));\n      } else if (count($matches) > 1) {\n        throw new PhutilArgumentUsageException(\n          pht(\n            'Multiple search engines match \"%s\": %s.',\n            $class,\n            implode(', ', $matches)));\n      } else {\n        $class = head($matches);\n      }\n\n      $engine = newv($class, array())\n        ->setViewer($viewer);\n    } else {","sourceCodeStart":177,"sourceCodeEnd":213,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/transactions/bulk/management/PhabricatorBulkManagementExportWorkflow.php#L177-L213","documentation":"The --class argument is matched case-insensitively by substring (stripos) against all PhabricatorApplicationSearchEngine subclasses that support export. If no class name contains the given substring, this usage exception is thrown and its message lists the engines that do support data export. That list is the authoritative set of usable --class values.","triggerScenarios":"Passing --class with a typo or unrelated string; passing the name of an engine that exists but whose canExport() is false, so it never entered the candidate list (candidates come from PhutilClassMapQuery over the engine ancestor class).","commonSituations":"Assuming an application has export support when its engine never implemented it; engine class renames or new applications after a Phabricator upgrade breaking old scripts.","solutions":["Read the engine list from the error message and pass one of those exact class names.","Fix typos and casing: matching is a case-insensitive substring, so 'Maniphest' matches ManiphestTaskSearchEngine.","If your target application is missing from the list, its engine does not support export — export a different object type instead."],"exampleFix":"# before\nbin/bulk export --class ManiphestTypoEngine --query all --output -\n# after\nbin/bulk export --class ManiphestTaskSearchEngine --query all --output -","handlingStrategy":"validation","validationCode":"# discover export-capable engines once, then pin the exact class\nbin/bulk export --class __nonexistent__ --query all --output - 2>&1 | tr ',' '\\n'\n# (the usage error enumerates every engine that supports export)","typeGuard":null,"tryCatchPattern":"Catch PhutilArgumentUsageException in wrapper tooling, detect 'No search engines match' in the message, and fail fast with the engine list attached for the operator.","preventionTips":["Pin scripts to full engine class names, not substrings.","Re-run one manual export after each Phabricator upgrade to confirm engine classes still resolve."],"tags":["phabricator","cli","export","search-engine"],"backgroundTag":"class-not-found","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}