phacility/phabricator · error · Exception

No such implementation "%s" exists!

Error message

No such implementation "%s" exists!

What it means

HarbormasterBuildStepImplementation::requireImplementation($class) found no registered implementation matching the given class name. Implementations are concrete subclasses discovered by Phabricator's class discovery; an unknown name means the class does not exist, is abstract or not a subclass, or was never loaded in this process.

Source

Thrown at src/applications/harbormaster/step/HarbormasterBuildStepImplementation.php:43

  public static function getImplementation($class) {
    $base = idx(self::getImplementations(), $class);

    if ($base) {
      return (clone $base);
    }

    return null;
  }

  public static function requireImplementation($class) {
    if (!$class) {
      throw new Exception(pht('No implementation is specified!'));
    }

    $implementation = self::getImplementation($class);
    if (!$implementation) {
      throw new Exception(pht('No such implementation "%s" exists!', $class));
    }

    return $implementation;
  }

  /**
   * The name of the implementation.
   */
  abstract public function getName();

  public function getBuildStepGroupKey() {
    return HarbormasterOtherBuildStepGroup::GROUPKEY;
  }

  /**
   * The generic description of the implementation.
   */
  public function getGenericDescription() {

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Verify the class exists, is concrete, and extends HarbormasterBuildStepImplementation (or a descendant)
  2. Fix stale harbormaster_buildstep rows: update className to the renamed class or delete orphaned steps
  3. Clear Phabricator's class discovery cache after deploying or removing step classes

Example fix

// before
$impl = HarbormasterBuildStepImplementation::requireImplementation('MyCompany_OldStepName');
// after
$impl = HarbormasterBuildStepImplementation::requireImplementation('MyCompany_NewStepName');
Defensive patterns

Strategy: validation

Validate before calling

$impl = HarbormasterBuildStepImplementation::getImplementation($class);
if ($impl === null) {
  // class not registered; fix the step row or clear the class cache
}

Type guard

$impl = HarbormasterBuildStepImplementation::getImplementation($class);
$isValid = ($impl instanceof HarbormasterBuildStepImplementation);

Prevention

When it happens

Trigger: Calling requireImplementation('MyOldStep') after the class was renamed or deleted in a deploy; a typo in the class name; the class exists but is abstract or sits in a module excluded from discovery.

Common situations: Custom step implementations removed in a code update while harbormaster_buildstep rows still reference them; stale class caches after deploying new step classes; copying plans between instances that lack the custom step code.

Related errors


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