phacility/phabricator · error · Exception

This rule was created with a newer version of Herald. You ca

Error message

This rule was created with a newer version of Herald. You can not view or edit it in this older version. Upgrade your software.

What it means

Thrown by HeraldRuleController when a rule's stored config version (HeraldRule::getConfigVersion()) is greater than the version this install knows (the default on a fresh HeraldRule). Herald bumps the rule config version when the storage format for conditions/actions changes; a rule written by a NEWER Phabricator cannot be safely interpreted by an OLDER one, so viewing or editing is blocked outright.

Source

Thrown at src/applications/herald/controller/HeraldRuleController.php:108

        if (!$adapter->canTriggerOnObject($object)) {
          throw new Exception(
            pht('Object is of wrong type for adapter!'));
        }
      }

      $cancel_uri = $this->getApplicationURI();
    }

    if ($rule->isGlobalRule()) {
      $this->requireApplicationCapability(
        HeraldManageGlobalRulesCapability::CAPABILITY);
    }

    $adapter = HeraldAdapter::getAdapterForContentType($rule->getContentType());

    $local_version = id(new HeraldRule())->getConfigVersion();
    if ($rule->getConfigVersion() > $local_version) {
      throw new Exception(
        pht(
          'This rule was created with a newer version of Herald. You can not '.
          'view or edit it in this older version. Upgrade your software.'));
    }

    // Upgrade rule version to our version, since we might add newly-defined
    // conditions, etc.
    $rule->setConfigVersion($local_version);

    $rule_conditions = $rule->loadConditions();
    $rule_actions = $rule->loadActions();

    $rule->attachConditions($rule_conditions);
    $rule->attachActions($rule_actions);

    $e_name = true;
    $errors = array();
    if ($request->isFormPost() && $request->getStr('save')) {

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Upgrade Phabricator (and phutil/libphutil) to a version at least as new as the one that wrote the rule, then reload.
  2. If you restored a dump from a newer version, upgrade that environment rather than hand-editing config_version.
  3. Ensure ALL web/daemon hosts point at code of the same version when sharing a database (mixed-version frontends cause intermittent occurrences).
  4. As a last resort on a scratch copy, set the rule's config_version back to the local default — but only on data you are willing to corrupt, since conditions/actions may decode incorrectly.

Example fix

// before — mixed-version cluster
web-1: phabricator 2021.x  (newer, wrote rule, config_version = 27)
web-2: phabricator 2020.x  (older, local version  = 26)  -> throws

// after
# upgrade every host to the same (newest) release
git -C phabricator pull origin stable && git -C arcanist pull origin stable
# on all web/daemon hosts, then reload the rule
Defensive patterns

Strategy: validation

Validate before calling

// Gate rules by config version before opening them for edit/view
$local_version = id(new HeraldRule())->getConfigVersion();
if ($rule->getConfigVersion() > $local_version) {
  // show 'upgrade required' notice; do NOT proceed to loadConditions()
}

Type guard

function ruleIsViewableInThisInstall(HeraldRule $rule) {
  return $rule->getConfigVersion() <= id(new HeraldRule())->getConfigVersion();
}

Try / catch

try {
  // handling a rule view/edit request
} catch (Exception $ex) {
  if (strpos($ex->getMessage(), 'newer version of Herald') !== false) {
    // render an upgrade-required page instead of a stack trace
  }
}

Prevention

When it happens

Trigger: Opening /herald/view/ or /herald/edit/ for a rule whose config_version column is higher than the current install's HeraldRule default. Happens after downgrading Phabricator, restoring a database dump from a newer version onto older code, running a replica pair with mixed versions, or after restoring backups across version boundaries.

Common situations: Downgrade or partial upgrade: web frontends on different Phabricator versions sharing one database. Restoring a production DB dump into an older development environment. This is a guard against data corruption, not a rule-content bug — the fix is at the install level, not the rule level.

Related errors


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