phacility/phabricator · error · PhutilArgumentUsageException

Blueprint "%s" could not be loaded. Try a blueprint ID or PH

Error message

Blueprint "%s" could not be loaded. Try a blueprint ID or PHID.

What it means

A PhutilArgumentUsageException from `bin/drydock lease --blueprint <identifier>` when an identifier cannot be resolved by DrydockBlueprintQuery::withIdentifiers(). Acceptable identifiers are numeric blueprint IDs or blueprint PHIDs; anything else (name, class, callsign) fails here. It can also fire when the blueprint exists but is not visible to the management workflow's viewer.

Source

Thrown at src/applications/drydock/management/DrydockManagementLeaseWorkflow.php:286

    }
  }

  private function getBlueprintFilterMap(array $identifiers) {
    $viewer = $this->getViewer();

    $query = id(new DrydockBlueprintQuery())
      ->setViewer($viewer)
      ->withIdentifiers($identifiers);

    $blueprints = $query->execute();
    $blueprints = mpull($blueprints, null, 'getPHID');

    $map = $query->getIdentifierMap();

    $seen = array();
    foreach ($identifiers as $identifier) {
      if (!isset($map[$identifier])) {
        throw new PhutilArgumentUsageException(
          pht(
            'Blueprint "%s" could not be loaded. Try a blueprint ID or '.
            'PHID.',
            $identifier));
      }

      $blueprint = $map[$identifier];

      $blueprint_phid = $blueprint->getPHID();
      if (isset($seen[$blueprint_phid])) {
        throw new PhutilArgumentUsageException(
          pht(
            'Blueprint "%s" is specified more than once (as "%s" and "%s").',
            $blueprint->getBlueprintName(),
            $seen[$blueprint_phid],
            $identifier));
      }

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Open the Drydock Blueprints console and use the numeric ID from the URL (e.g. /drydock/blueprint/view/3/ → 3) or the PHID.
  2. If it should exist, verify the blueprint was not deleted or disabled-out of visibility and re-run.
  3. Pass each identifier exactly once and in full (see the duplicate check in error 556).

Example fix

# before
bin/drydock lease --type host --blueprint my-host-blueprint

# after
bin/drydock lease --type host --blueprint 3
# or
bin/drydock lease --type host --blueprint PHID-DRYB-xxxxxxxx
Defensive patterns

Strategy: validation

Validate before calling

$query = id(new DrydockBlueprintQuery())
  ->setViewer($viewer)
  ->withIdentifiers($identifiers);
$blueprints = $query->execute();
$map = $query->getIdentifierMap();
foreach ($identifiers as $identifier) {
  if (!isset($map[$identifier])) {
    throw new InvalidArgumentException(
      "Unresolvable blueprint identifier: {$identifier}");
  }
}

Prevention

When it happens

Trigger: `bin/drydock lease --type host --blueprint my-host-blueprint` (a name instead of ID/PHID), or `--blueprint 99` where blueprint 99 does not exist or is invisible.

Common situations: Assuming blueprints are addressable by name like repositories are by callsign; stale IDs after blueprints were deleted; copy-pasting the blueprint PHID with a typo or truncation.

Related errors


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