{"record":{"id":"611b8ebdb59b34a7","repo":"nextlevelbuilder/ui-ux-pro-max-skill","slug":"failed-to-fetch-latest-release-response-status","errorCode":null,"errorMessage":"Failed to fetch latest release: ${response.status} ${response.statusText}","messagePattern":"Failed to fetch latest release: (.+?) (.+?)","errorType":"http","errorClass":"GitHubDownloadError","httpStatus":null,"severity":"error","filePath":"cli/src/utils/github.ts","lineNumber":88,"sourceCode":"\n  return response.json();\n}\n\nexport async function getLatestRelease(token?: string): Promise<Release> {\n  const url = `${API_BASE}/repos/${REPO_OWNER}/${REPO_NAME}/releases/latest`;\n\n  const response = await fetch(url, {\n    headers: {\n      'Accept': 'application/vnd.github.v3+json',\n      'User-Agent': USER_AGENT,\n      ...getAuthHeaders(token),\n    },\n  });\n\n  checkRateLimit(response);\n\n  if (!response.ok) {\n    throw new GitHubDownloadError(`Failed to fetch latest release: ${response.status} ${response.statusText}`);\n  }\n\n  return response.json();\n}\n\nexport async function downloadRelease(url: string, dest: string, token?: string): Promise<void> {\n  const response = await fetch(url, {\n    headers: {\n      'User-Agent': USER_AGENT,\n      'Accept': 'application/octet-stream',\n      ...getAuthHeaders(token),\n    },\n  });\n\n  checkRateLimit(response);\n\n  if (!response.ok) {\n    throw new GitHubDownloadError(`Failed to download: ${response.status} ${response.statusText}`);","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/a38d04c3d5c298c851dbe5e6ee1965ee3de42cb5/cli/src/utils/github.ts#L70-L106","documentation":"Same guard pattern as fetchReleases() but for GET /repos/{owner}/{repo}/releases/latest — the call `uipro init` makes first. Any non-2xx, non-rate-limited response becomes GitHubDownloadError('Failed to fetch latest release: <status> <reason>'). Notably GitHub returns 404 for this endpoint when the repository has no published (non-draft, non-prerelease) release yet.","triggerScenarios":"Freshly forked or bootstrapped repo where no release has been marked 'latest' (404); a repository where all releases are drafts or marked prerelease; 401 from an invalid token; 5xx during a GitHub outage.","commonSituations":"Running the CLI against a fork that never published a release; release accidentally left in draft/prerelease so /releases/latest 404s; invalid or expired token in the environment.","solutions":["Open the repo's Releases page and confirm a stable, published release exists (drafts and prereleases don't count for /latest).","If 401, clear or rotate the stale UI_PRO_MAX_GITHUB_TOKEN/GITHUB_TOKEN.","Publish or promote a release to stable, or fall back to fetchReleases() and pick the first entry when /latest 404s.","Check githubstatus.com for 5xx causes and retry."],"exampleFix":"// before\nconst release = await getLatestRelease(token);\n// after: fall back to the releases list when /latest 404s\nlet release;\ntry {\n  release = await getLatestRelease(token);\n} catch (e) {\n  if (e instanceof GitHubDownloadError && e.message.includes('404')) {\n    const [first] = await fetchReleases(token);\n    if (!first) throw new Error('No releases published yet');\n    release = first;\n  } else throw e;\n}","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"import { getLatestRelease, fetchReleases, GitHubDownloadError } from './utils/github';\n\nasync function latestOrFirst(token?: string) {\n  try {\n    return await getLatestRelease(token);\n  } catch (e) {\n    if (e instanceof GitHubDownloadError && e.message.includes('404')) {\n      const [first] = await fetchReleases(token);\n      if (!first) throw new Error('Repository has no published releases');\n      return first;\n    }\n    throw e;\n  }\n}","preventionTips":["On forks, publish a stable release before exercising install flows.","Treat /releases/latest 404 as 'no stable release yet', not as a hard failure.","Verify tokens with a simple curl before batch runs."],"tags":["github-api","http-status","releases","network"],"backgroundTag":null,"analyzedSha":"a38d04c3d5c298c851dbe5e6ee1965ee3de42cb5","analyzedAt":"2026-08-14T18:51:02.321Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}