phacility/phabricator · error · Exception
Unsupported bulk edit type "%s".
Error message
Unsupported bulk edit type "%s".
What it means
Bulk edit (used by the 'edit multiple selected objects' / bulk job machinery) validates each submitted transaction's 'type' against the map of edit types the engine derives from its fields (getBulkEditTypesFromFields). A type key not present in that map throws this exception before any object is touched.
Source
Thrown at src/applications/transactions/editengine/PhabricatorEditEngine.php:2663
$object = $this->newEditableObject();
$fields = $this->buildEditFields($object);
$edit_types = $this->getBulkEditTypesFromFields($fields);
$template = $object->getApplicationTransactionTemplate();
$raw_xactions = array();
foreach ($xactions as $key => $xaction) {
PhutilTypeSpec::checkMap(
$xaction,
array(
'type' => 'string',
'value' => 'optional wild',
));
$type = $xaction['type'];
if (!isset($edit_types[$type])) {
throw new Exception(
pht(
'Unsupported bulk edit type "%s".',
$type));
}
$edit_type = $edit_types[$type];
// Replace the edit type with the underlying transaction type. Usually
// these are 1:1 and the transaction type just has more internal noise,
// but it's possible that this isn't the case.
$xaction['type'] = $edit_type->getTransactionType();
$value = $xaction['value'];
$value = $edit_type->getTransactionValueFromBulkEdit($value);
$xaction['value'] = $value;
$xaction_objects = $edit_type->generateTransactions(
clone $template,View on GitHub (pinned to 5720a38cfe)
Solutions
- Use exactly the type keys the bulk edit UI for that form offers (what you configure in the bulk dialog is by construction valid)
- If scripting, enumerate valid types from the engine's edit types (e.g. the types listed by the corresponding *.edit method metadata) and intersect with your payload before submission
- For custom fields, confirm the field class implements bulk edit support and its key matches what you send
- Prefer the 1:1 transaction type name over ad-hoc aliases when building bulk transactions
Example fix
// before
$xactions = array(
array('type' => 'project', 'value' => array('PHID-PROJ-xyz')),
);
// Exception: Unsupported bulk edit type "project".
// after: use the field's actual bulk edit type key
$xactions = array(
array('type' => 'projects', 'value' => array('PHID-PROJ-xyz')),
); Defensive patterns
Strategy: validation
Validate before calling
// Restrict bulk payloads to types the form actually offers:
foreach ($xactions as $i => $xaction) {
if (!isset($edit_types[$xaction['type']])) {
unset($xactions[$i]); // or fail loudly
}
}
// Populate $edit_types from the bulk edit UI choices or the engine's
// advertised edit types for the same form. Type guard
function isSupportedBulkType($type, array $edit_types) {
return is_string($type) && isset($edit_types[$type]);
} Try / catch
try {
$engine->applyBulkTransactions($objects, $xactions);
} catch (Exception $ex) {
if (strpos($ex->getMessage(), 'Unsupported bulk edit type') !== false) {
// the named type is not bulk-editable for this form; drop it and resubmit
} else {
throw $ex;
}
} Prevention
- Build bulk payloads from the same type list the bulk edit UI presents
- Do not assume Conduit transaction type names are bulk-editable verbatim
- For custom fields, verify bulk support exists before exposing them to bulk jobs
When it happens
Trigger: Submitting a bulk job payload (e.g. via bulk editor or a script driving it) with type "project", "assign", or a custom field key that no field advertises for bulk editing; using a Conduit transaction type name that the corresponding field does not expose as a bulk edit type.
Common situations: Reusing Conduit 'transactions' type names in bulk payloads; fields whose bulk support is disabled; custom fields registered without a bulk edit type; version changes renaming edit type keys.
Related errors
- Trying to construct a dataset of type "%s", but this type is
- Attempting to build function "%s" from dictionary, but that
- This object ("%s") has more than %s transactions in its most
- No object exists with ID "%s".
- Transaction with key "%s" has invalid type "%s". This type i
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/015d69537aafa1ca.
Report an issue: GitHub.