phacility/phabricator · error · Exception

Unrecognized verb: %s

Error message

Unrecognized verb: %s

What it means

PhabricatorConfigIgnoreController renders the confirmation dialog for setup-issue actions and accepts only the verbs 'ignore' and 'unignore' decoded from the request. Any other verb value falls through to a hard Exception ('Unrecognized verb: %s'), producing an error page instead of a dialog.

Source

Thrown at src/applications/config/controller/issue/PhabricatorConfigIgnoreController.php:32

      $this->manageApplication($issue);
      return id(new AphrontRedirectResponse())->setURI($issue_uri);
    }

    if ($verb == 'ignore') {
      $title = pht('Really ignore this setup issue?');
      $submit_title = pht('Ignore');
      $body = pht(
        "You can ignore an issue if you don't want to fix it, or plan to ".
        "fix it later. Ignored issues won't appear on every page but will ".
        "still be shown in the list of open issues.");
    } else if ($verb == 'unignore') {
      $title = pht('Unignore this setup issue?');
      $submit_title = pht('Unignore');
      $body = pht(
        'This issue will no longer be suppressed, and will return to its '.
        'rightful place as a global setup warning.');
    } else {
      throw new Exception(pht('Unrecognized verb: %s', $verb));
    }

    return $this->newDialog()
      ->setTitle($title)
      ->appendChild($body)
      ->addSubmitButton($submit_title)
      ->addCancelButton($issue_uri);

  }

  public function manageApplication($issue) {
    $key = 'config.ignore-issues';
    $config_entry = PhabricatorConfigEntry::loadConfigEntry($key);
    $list = $config_entry->getValue();

    if (isset($list[$issue])) {
      unset($list[$issue]);
    } else {

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Use only 'ignore' or 'unignore' as the verb segment: /config/issue/<issue-key>/ignore/.
  2. Reach the dialog from the setup issue's own page (/config/issue/) so links are generated correctly.
  3. If a custom integration links here, generate the URL from a whitelist of the two known verbs.

Example fix

# before
/config/issue/db_LEGACY_UTF84/ignored/
# after
/config/issue/db_LEGACY_UTF84/ignore/
Defensive patterns

Strategy: validation

Validate before calling

// When generating links to setup-issue management, whitelist the verb.
$verb = idx($request->getURIData('verb'));
if (!in_array($verb, array('ignore', 'unignore'), true)) {
  return new Aphront400Response();
}
$uri = '/config/issue/'.$issue_key.'/'.$verb.'/';

Prevention

When it happens

Trigger: Hand-editing the URL /config/issue/<issue-key>/<verb>/ with a typo or arbitrary word; custom dashboard links or extensions constructing this URL with a wrong verb; stale bookmarks after a verb rename.

Common situations: Almost exclusively reached by manual URL editing or buggy custom navigation, since the UI only generates 'ignore'/'unignore' links from the setup-issue page.

Related errors


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