{"record":{"id":"793104cfa0d6517a","repo":"phacility/phabricator","slug":"the-project-image-s-specified-for-s-was","errorCode":null,"errorMessage":"The project image (\"%s\") specified for (\"%s\") was not found in the folder \"resources/builtin/projects/\".","messagePattern":"The project image \\(\"(.+?)\"\\) specified for \\(\"(.+?)\"\\) was not found in the folder \"resources/builtin/projects/\"\\.","errorType":"validation","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/applications/project/icon/PhabricatorProjectIconSet.php","lineNumber":277,"sourceCode":"            $key));\n      } else {\n        $keys[$key] = true;\n      }\n\n      $is_disabled = idx($value, 'disabled');\n\n      $image = idx($value, 'image');\n      if ($image !== null) {\n        $builtin = idx($value, 'image');\n        $builtin_map = id(new PhabricatorFilesOnDiskBuiltinFile())\n          ->getProjectBuiltinFiles();\n        $builtin_map = array_flip($builtin_map);\n\n        $root = dirname(phutil_get_library_root('phabricator'));\n        $image = $root.'/resources/builtin/projects/'.$builtin;\n\n        if (!array_key_exists($image, $builtin_map)) {\n            throw new Exception(\n              pht(\n                'The project image (\"%s\") specified for (\"%s\") '.\n                'was not found in the folder \"resources/builtin/projects/\".',\n                $builtin,\n                $key));\n        }\n      }\n\n      if (idx($value, 'default')) {\n        if ($default === null) {\n          if ($is_disabled) {\n            throw new Exception(\n              pht(\n                'The project icon marked as the default icon (\"%s\") must not '.\n                'be disabled.',\n                $key));\n          }\n          $default = $value;","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/project/icon/PhabricatorProjectIconSet.php#L259-L295","documentation":"An icon spec with an `image` attribute must reference a file shipped under resources/builtin/projects/ and enumerated by PhabricatorFilesOnDiskBuiltinFile::getProjectBuiltinFiles(). The validator builds the absolute path (library root + resources/builtin/projects/ + name) and checks it against the flipped builtin map; a miss throws. Arbitrary custom images cannot be used through config alone.","triggerScenarios":"\"image\": \"myicon.png\" where the file is not present in resources/builtin/projects/ or is not registered in the builtin file map.","commonSituations":"Trying to add custom project images purely via config, and forks that renamed or removed builtin image files.","solutions":["Drop the `image` key and style the icon with a Font Awesome name in `icon` instead.","Point `image` at one of the shipped builtin filenames in resources/builtin/projects/.","To ship a real custom image, add the file to resources/builtin/projects/ and register it in the builtin map (fork or extension work)."],"exampleFix":"// before\n{\"key\":\"custom\",\"name\":\"Custom\",\"icon\":\"fa-star\",\"image\":\"myicon.png\"}\n// after\n{\"key\":\"custom\",\"name\":\"Custom\",\"icon\":\"fa-star\"}","handlingStrategy":"validation","validationCode":"$root = dirname(phutil_get_library_root('phabricator'));\nforeach ($config as $entry) {\n  $image = idx($entry, 'image');\n  if ($image !== null &&\n      !file_exists($root.'/resources/builtin/projects/'.$image)) {\n    // drop the image key, or ship + register the file first\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prefer the `icon` (Font Awesome) attribute for custom icons; `image` only accepts shipped builtins.","If shipping a custom image, add it to resources/builtin/projects/ and register it in the builtin file map before referencing it in config."],"tags":["phabricator","configuration","project-icons","missing-asset","builtin-files"],"backgroundTag":"missing-asset-reference","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}