phacility/phabricator · error · Exception
No implementation is specified!
Error message
No implementation is specified!
What it means
HarbormasterBuildStepImplementation::requireImplementation($class) resolves a build step implementation by class name from the set discovered by getImplementations(). An empty or null class string means no implementation was ever recorded, which is always a configuration or programming defect, so it throws immediately rather than attempting lookup.
Source
Thrown at src/applications/harbormaster/step/HarbormasterBuildStepImplementation.php:38
public static function getImplementations() {
return id(new PhutilClassMapQuery())
->setAncestorClass(__CLASS__)
->execute();
}
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;
}View on GitHub (pinned to 5720a38cfe)
Solutions
- Set a valid implementation class on the step before calling requireImplementation (e.g. HarbormasterWaitForBuildStepImplementation)
- Inspect harbormaster_buildstep rows for empty className values and fix or delete them
- When generating steps in code, always pass the full class name constant from the plan definition
Example fix
// before
$impl = HarbormasterBuildStepImplementation::requireImplementation($step->getClassName()); // className is ''
// after
$step->setClassName('HarbormasterWaitForBuildStepImplementation')->save();
$impl = HarbormasterBuildStepImplementation::requireImplementation($step->getClassName()); Defensive patterns
Strategy: validation
Validate before calling
$class = $step->getClassName();
if ($class === null || $class === '') {
// refuse before requireImplementation; fix or drop the step row
} Prevention
- Always set the implementation class when creating build steps
- Audit imported build plans for empty className values before enabling them
When it happens
Trigger: Calling requireImplementation('') or requireImplementation(null); a HarbormasterBuildStep row whose className column is empty (corrupt import, bad migration, or a step created programmatically without a class).
Common situations: Creating build steps via code or Lisk directly without setting the class name; a database imported with blank className values; data truncated during an upgrade.
Related errors
- No such implementation "%s" exists!
- 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/00108f8ddb612fa8.
Report an issue: GitHub.