phacility/phabricator · warning · PhutilArgumentUsageException

No such buildable "%s"!

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.

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)

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.

Related errors


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