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
- Open the buildable page and copy a build ID that is actually listed under it
- Drop --build to update all builds of the buildable
- 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
- Pair --build IDs only with buildables that list them on their page
- In automation, resolve builds via harbormaster.build.search filtered by buildablePHID
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
- Unable to load build log "%s".
- No such buildable "%s"!
- Unable to load build target "%s".
- No public key exists with ID "%s".
- Service "%s" does not exist or could not be loaded!
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/1909cf2e82aadee7.
Report an issue: GitHub.