phacility/phabricator · warning · PhutilArgumentUsageException

The specified buildable does not have a build with ID "%s".

Error message

The specified buildable does not have a build with ID "%s".

What it means

Thrown by 'bin/harbormaster update' when --build restricts the update to one build of the buildable. The workflow reloads the buildable with needBuilds(true) and keys its builds by ID; if the requested build ID is not among that buildable's builds, the selection is empty and this usage exception is raised.

Source

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

      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');

    $build_id = $args->getArg('build');
    if ($build_id) {
      $builds = array_select_keys($builds, array($build_id));
      if (!$builds) {
        throw new PhutilArgumentUsageException(
          pht(
            'The specified buildable does not have a build with ID "%s".',
            $build_id));
      }
    }

    $console = PhutilConsole::getConsole();

    if (!$args->getArg('background')) {
      PhabricatorWorker::setRunAllTasksInProcess(true);
    }

    foreach ($builds as $build) {
      $console->writeOut(
        "%s\n",
        pht(
          'Updating build %d of buildable %s...',
          $build->getID(),

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Open the buildable page and copy a build ID that is actually listed under it
  2. Drop --build to update all builds of the buildable
  3. Verify the pairing with harbormaster.build.search filtered by buildablePHID

Example fix

# before
$ bin/harbormaster update B123 --build 77   # build 77 is on another buildable
# after
$ bin/harbormaster update B123 --build 42   # build 42 belongs to B123
Defensive patterns

Strategy: validation

Validate before calling

$buildable = id(new HarbormasterBuildableQuery())
  ->setViewer($viewer)
  ->withIDs(array($buildable_id))
  ->needBuilds(true)
  ->executeOne();
$builds = mpull($buildable->getBuilds(), null, 'getID');
if (!isset($builds[$build_id])) {
  // this buildable has no such build; fix the pairing before update
}

Prevention

When it happens

Trigger: Running 'bin/harbormaster update B123 --build 77' where build 77 belongs to a different buildable (build IDs are global, but must belong to the named buildable); the build was deleted or the buildable has no builds at all.

Common situations: Copying a build ID from a different build page; automation pairing a buildable name with a stale build ID after re-runs.

Related errors


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