phacility/phabricator · warning · Exception

You have not chosen any edits to apply.

Error message

You have not chosen any edits to apply.

What it means

The bulk edit request must carry an 'xactions' POST field containing a JSON array of raw edit transactions. When the field is absent or decodes to an empty array, no edits were chosen and the engine aborts before constructing the edit engine transactions.

Source

Thrown at src/applications/transactions/bulk/PhabricatorBulkEngine.php:416

    // Restrict the selection set to objects the user can actually edit.
    $objects = array_intersect_key($this->editableList, $this->targetList);

    if (!$objects) {
      throw new Exception(
        pht(
          'You have not selected any objects to edit.'));
    }

    $raw_xactions = $request->getStr('xactions');
    if ($raw_xactions) {
      $raw_xactions = phutil_json_decode($raw_xactions);
    } else {
      $raw_xactions = array();
    }

    if (!$raw_xactions) {
      throw new Exception(
        pht(
          'You have not chosen any edits to apply.'));
    }

    $edit_engine = id($this->newEditEngine())
      ->setViewer($viewer);

    $xactions = $edit_engine->newRawBulkTransactions($raw_xactions);

    $cancel_uri = $this->getCancelURI();
    $done_uri = $this->getDoneURI();

    $job = PhabricatorWorkerBulkJob::initializeNewJob(
      $viewer,
      new PhabricatorEditEngineBulkJobType(),
      array(
        'objectPHIDs' => mpull($objects, 'getPHID'),
        'xactions' => $xactions,

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Define at least one edit (a field plus an operation) in the dialog before submitting
  2. If scripting, ensure the xactions value is a non-empty JSON array of valid transaction descriptions
  3. Log the outgoing payload to confirm the client actually serialized the edits

Example fix

// before: submitting with no edits
$_POST['xactions'] = '[]';

// after: at least one concrete edit
$_POST['xactions'] = phutil_json_encode(array(
  array(
    'type' => 'title.set',
    'value' => 'Bulk-edited title',
  ),
));
Defensive patterns

Strategy: validation

Validate before calling

// Client-side: build and check the payload before submitting.
$xactions = array(/* user-defined edits */);
if (!$xactions) {
  // block submit: no edits chosen
}
$request->setStr('xactions', phutil_json_encode($xactions));

Prevention

When it happens

Trigger: Submitting the bulk edit dialog without defining any edits; a client sending an empty JSON array; automated posts omitting the field entirely.

Common situations: Users clicking through the workflow without adding an edit rule; scripts posting an empty xactions payload.

Related errors


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