octobercms/october · error · SystemException
Unable to find global blueprint with ID "%s".
Error message
Unable to find global blueprint with ID "%s".
What it means
Thrown by getBlueprintDefinition() on global records (HasGlobalBlueprint trait) when blueprint_uuid is set but BlueprintIndexer::findGlobal($uuid) returns null — the registry knows no global blueprint with that UUID. This is the dangling-reference variant for globals: the data points at a blueprint the current environment does not have.
Source
Thrown at modules/tailor/models/globalrecord/HasGlobalBlueprint.php:81
}
/**
* getBlueprintDefinition
*/
public function getBlueprintDefinition(): GlobalBlueprint
{
if ($this->blueprintCache !== null) {
return $this->blueprintCache;
}
$uuid = $this->blueprint_uuid;
if (!$uuid) {
throw new SystemException('Missing global definition. Call GlobalRecord::inGlobal() to set one.');
}
$blueprint = BlueprintIndexer::instance()->findGlobal($uuid);
if (!$blueprint) {
throw new SystemException(sprintf('Unable to find global blueprint with ID "%s".', $uuid));
}
return $this->blueprintCache = $blueprint;
}
/**
* fetchBlueprintContent
*/
public function fetchBlueprintContent()
{
$content = $this->content;
$contentColumns = $this->getFieldsetColumnNames();
// Fetch content attributes
foreach ($contentColumns as $key) {
if (array_key_exists($key, $content)) {
$this->$key = $content[$key];
}View on GitHub (pinned to b608633a7e)
Solutions
- Run php artisan tailor:sync followed by php artisan cache:clear
- If the global was recreated, reassign the orphaned rows' blueprint_uuid to the new blueprint UUID
- Re-import or restore the tailoring file that defined the missing global blueprint
- As a last resort, remove orphaned global rows
Example fix
// Point orphaned global rows at the recreated blueprint
$blueprint = \Tailor\Classes\BlueprintIndexer::instance()->findGlobalByHandle('site_settings');
\Tailor\Models\GlobalRecord::where('blueprint_uuid', $oldUuid)
->update(['blueprint_uuid' => $blueprint->uuid]); Defensive patterns
Strategy: validation
Validate before calling
$blueprint = \Tailor\Classes\BlueprintIndexer::instance()->findGlobal($model->blueprint_uuid);
if (!$blueprint) {
// orphaned row: reattach to the current global blueprint or skip
} Type guard
function globalUuidResolves(?string $uuid): bool
{
return $uuid !== null
&& \Tailor\Classes\BlueprintIndexer::instance()->findGlobal($uuid) !== null;
} Prevention
- Edit globals in place instead of delete/recreate so UUIDs stay stable
- Keep blueprint definitions and record data versioned/deployed together
- Run tailor:sync after restoring any database backup
When it happens
Trigger: Global record rows persisting a UUID from a deleted/recreated global blueprint; database dumps restored without the corresponding blueprint content; blueprints not synced (tailor:sync never run) on the current environment.
Common situations: Recreating a global in Tailor after deleting it (new UUID minted, old rows orphaned); staging-to-production content pushes that include records but not blueprint definitions; cache holding a stale blueprint registry.
Related errors
- Unable to find section blueprint with ID "%s".
- Unable to find import/export blueprint with ID "%s".
- Global handle [{$handle}] not found
- Unable to find content fieldset definition with UUID of '{$t
- Section handle [{$handle}] not found
AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21).
Data as JSON: /api/errors/bec43dbd83a25154.
Report an issue: GitHub.