{"record":{"id":"e2387235add125c2","repo":"remix-run/remix","slug":"could-not-resolve-allowed-package-packagename","errorCode":null,"errorMessage":"Could not resolve allowed package \"${packageName}\".","messagePattern":"Could not resolve allowed package \"(.+?)\"\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"warning","filePath":"packages/assets/src/lib/access.ts","lineNumber":202,"sourceCode":"}): Map<string, string> {\n  let allowPackageRootPaths = new Map<string, string>()\n  let allowQueue: PackageRootQueueItem[] = []\n  let seenAllowedPackageRoots = new Set<string>()\n  let searchRoots = normalizePackageSearchRoots(options.searchRoots)\n\n  for (let packageName of options.allowPackageNames) {\n    let foundPackage = false\n\n    for (let searchRoot of searchRoots) {\n      let packageJsonPath = findPackageJsonPath(packageName, searchRoot)\n      if (packageJsonPath === null) continue\n\n      foundPackage = true\n      allowQueue.push({ packageJsonPath, packageName })\n    }\n\n    if (!foundPackage) {\n      throw new TypeError(`Could not resolve allowed package \"${packageName}\".`)\n    }\n  }\n\n  while (allowQueue.length > 0) {\n    let { packageJsonPath, packageName } = allowQueue.shift()!\n    let packageRootPath = normalizeFilePath(path.dirname(packageJsonPath))\n    if (seenAllowedPackageRoots.has(packageRootPath)) continue\n    seenAllowedPackageRoots.add(packageRootPath)\n\n    let packageJson = readPackageJson(packageJsonPath)\n    allowPackageRootPaths.set(packageRootPath, packageName)\n\n    for (let dependencyName of Object.keys(packageJson.dependencies ?? {})) {\n      validatePackageName(\n        dependencyName,\n        `Dependency \"${dependencyName}\" from ${packageJsonPath} must be a package name.`,\n      )\n      let dependencyPackageJsonPath = findPackageJsonPath(dependencyName, packageRootPath)","sourceCodeStart":184,"sourceCodeEnd":220,"githubUrl":"https://github.com/remix-run/remix/blob/9696913134be3a4423513d2775f7b31d6917c049/packages/assets/src/lib/access.ts#L184-L220","documentation":"`remix help <topic>` couldn't match the topic to any known command's help text (including the special `version` case), so `getCommandHelpText` gives up and reports the full unmatched argv. Almost always a typo'd, renamed, or nonexistent command name.","triggerScenarios":"Running `remix help <unknown>` (e.g. `remix help migrat`, `remix help generate`) where the topic matches no registered command help and isn't `version` with zero rest args.","commonSituations":"Typos; habits from other frameworks' CLIs; docs referencing removed or renamed commands after an upgrade.","solutions":["Run bare `remix help` to list available commands and topics","Fix the topic spelling","Check the installed version's docs — the command may have been renamed"],"exampleFix":"# before\nremix help migrat\n# after\nremix help migrate","handlingStrategy":"type-guard","validationCode":"const knownTopics = await listCommands();\nif (!knownTopics.includes(topic)) {\n  console.error(`Unknown topic. Available: ${knownTopics.join(', ')}`);\n  process.exit(1);\n}","typeGuard":"function isKnownHelpTopic(topic: string, known: readonly string[]): boolean {\n  return known.includes(topic);\n}","tryCatchPattern":"Catch RMX_UNKNOWN_HELP_TOPIC and fall back to printing general help instead of failing the wrapper script.","preventionTips":["Run bare `remix help` to list topics","Keep docs in sync with the installed CLI version"],"tags":["cli","help","unknown-command"],"backgroundTag":"unknown-cli-command","analyzedSha":"9696913134be3a4423513d2775f7b31d6917c049","analyzedAt":"2026-08-27T19:55:01.024Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}