{"record":{"id":"9a3836e776813d88","repo":"badges/shields","slug":"app-not-found-in-bucket-bucket","errorCode":null,"errorMessage":"${app} not found in bucket \"${bucket}\"","messagePattern":"(.+?) not found in bucket \"(.+?)\"","errorType":"exception","errorClass":"NotFound","httpStatus":null,"severity":"error","filePath":"services/scoop/scoop-base.js","lineNumber":71,"sourceCode":"        bucketUrl = `https://github.com/${user}/${repo}`\n      } catch (e) {\n        throw new NotFound({ prettyMessage: `bucket \"${bucket}\" not found` })\n      }\n    }\n    const {\n      groups: { user, repo },\n    } = gitHubRepoRegExp.exec(bucketUrl)\n    try {\n      return await fetchJsonFromRepo(this, {\n        schema,\n        user,\n        repo,\n        branch: 'master',\n        filename: `bucket/${app}.json`,\n      })\n    } catch (error) {\n      if (error instanceof NotFound) {\n        throw new NotFound({\n          prettyMessage: `${app} not found in bucket \"${bucket}\"`,\n        })\n      }\n      throw error\n    }\n  }\n}\n\nexport const description =\n  '[Scoop](https://scoop.sh/) is a command-line installer for Windows'\n","sourceCodeStart":53,"sourceCodeEnd":82,"githubUrl":"https://github.com/badges/shields/blob/766fd8bc89a90b8534dc573ab72dec30215ab1ec/services/scoop/scoop-base.js#L53-L82","documentation":"Thrown when the bucket itself resolved fine but the requested app manifest (bucket/<app>.json) could not be fetched from the bucket's GitHub repository — the underlying fetch returned NotFound, which is re-wrapped with this more specific message. It means the app name is not present in that bucket.","triggerScenarios":"Requesting a badge for an `app` whose `bucket/<app>.json` manifest does not exist in the specified bucket — app name typo, wrong case, app living in a different bucket (e.g. 'extras' vs 'main'), or the manifest being removed/renamed upstream.","commonSituations":"An app was moved between Scoop buckets; the app name in `scoop install <bucket>/<app>` differs from the manifest file name; the bucket repository uses a non-default branch or restructured its bucket/ directory so the fetch 404s.","solutions":["Confirm the app exists in the chosen bucket (check the bucket's bucket/ directory on GitHub for <app>.json)","Try the canonical bucket for that app (e.g. main vs extras)","Check the app name spelling/case exactly matches the manifest filename without the .json extension","If the bucket moved the manifest, update the badge URL to the new app name"],"exampleFix":"// before\nhttps://img.shields.io/scoop/v/googlechrome/Extras\n// after (correct manifest name in extras bucket)\nhttps://img.shields.io/scoop/v/googlechrome/ScoopInstaller/Extras","handlingStrategy":"validation","validationCode":"// Verify the app manifest exists in the bucket repo before requesting the badge\nasync function appInBucket(user, repo, app) {\n  const res = await fetch(`https://raw.githubusercontent.com/${user}/${repo}/master/bucket/${app}.json`, { method: 'HEAD' })\n  return res.ok\n}\nif (!(await appInBucket('ScoopInstaller', 'Extras', 'googlechrome'))) throw new Error('app not in bucket')","typeGuard":null,"tryCatchPattern":"try {\n  const badge = await fetchBadgeUrl(scoopBadgeUrl)\n} catch (e) {\n  if (/not found in bucket/.test(e.message)) {\n    console.warn('App manifest missing: check bucket/<app>.json exists in that bucket')\n  } else throw e\n}","preventionTips":["Confirm the manifest filename matches the app name (case-sensitive) before using the badge","Check which bucket actually hosts the app after Scoop app migrations","HEAD-check the raw GitHub manifest URL when generating badges dynamically","Note the service reads the master branch; buckets restructuring away from bucket/*.json will 404"],"tags":["scoop","not-found","badge","configuration"],"backgroundTag":"resource-not-found","analyzedSha":"766fd8bc89a90b8534dc573ab72dec30215ab1ec","analyzedAt":"2026-08-30T01:40:27.499Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}