phacility/phabricator · warning · PhutilArgumentUsageException

No such buildable " "!

Error message

No such buildable "%s"!

What it means

Thrown by 'bin/harbormaster update' when the single supplied object name does not resolve through PhabricatorObjectQuery. Name resolution covers monograms (like B123) and PHIDs; a miss means no object in this Phabricator instance matches the name, so the update cannot proceed.

Solutions

  1. Verify the monogram in the web UI or via harbormaster.buildable.search
  2. If using a PHID, confirm it starts with PHID-HMBB- and belongs to this instance
  3. If the buildable is created asynchronously, retry after it exists

Example fix

# before
$ bin/harbormaster update B9999
# after
$ bin/harbormaster update B123
Defensive patterns

Strategy: validation

Validate before calling

$buildable = id(new PhabricatorObjectQuery())
  ->setViewer($viewer)
  ->withNames(array($name))
  ->executeOne();
if (!$buildable) {
  // the name does not resolve; fix it before running update
}

Prevention

When it happens

Trigger: Running 'bin/harbormaster update B9999' where no buildable 9999 exists; a typo in the monogram; a PHID belonging to another instance.

Common situations: Pointing the command at the wrong environment/instance; a race where automation runs before the buildable is created; transcription errors in runbooks.

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


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

Appendix: source

Thrown at src/applications/harbormaster/management/HarbormasterManagementUpdateWorkflow.php:54

  public function execute(PhutilArgumentParser $args) {
    $viewer = $this->getViewer();

    $force_update = $args->getArg('force');

    $names = $args->getArg('buildable');
    if (count($names) != 1) {
      throw new PhutilArgumentUsageException(
        pht('Specify exactly one buildable, by object name.'));
    }

    $buildable = id(new PhabricatorObjectQuery())
      ->setViewer($viewer)
      ->withNames($names)
      ->executeOne();

    if (!$buildable) {
      throw new PhutilArgumentUsageException(
        pht('No such buildable "%s"!', head($names)));
    }

    if (!($buildable instanceof HarbormasterBuildable)) {
      throw new PhutilArgumentUsageException(
        pht('Object "%s" is not a Harbormaster Buildable!', head($names)));
    }

    // Reload the buildable directly to get builds.
    $buildable = id(new HarbormasterBuildableQuery())
      ->setViewer($viewer)
      ->withIDs(array($buildable->getID()))
      ->needBuilds(true)
      ->executeOne();

    $builds = $buildable->getBuilds();
    $builds = mpull($builds, null, 'getID');

View on GitHub (pinned to 5720a38cfe)