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
- Verify the class exists, is concrete, and extends HarbormasterBuildStepImplementation (or a descendant)
- Fix stale harbormaster_buildstep rows: update className to the renamed class or delete orphaned steps
- 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
- Prefer getImplementation() plus a null check over requireImplementation() in code that can recover
- When renaming or deleting step classes, migrate or remove dependent harbormaster_buildstep rows in the same change
- Clear class discovery caches after deploying step implementation changes
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
- No implementation is specified!
- Build step "%s" has step group key "%s", but no step group w
- No such variable '%s'!
- This object does not support builds with Buildkite.
- Object ("%s") does not implement interface "%s". Only object
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/93bf985ad2e49425.
Report an issue: GitHub.