{"record":{"id":"1cda3c0c46e993a9","repo":"aaif-goose/goose","slug":"update-available-but-no-download-url-found-for-pla","errorCode":null,"errorMessage":"Update Available but no download URL found for platform: ${platform}, arch: ${arch}","messagePattern":"Update Available but no download URL found for platform: (.+?), arch: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ui/desktop/src/utils/githubUpdater.ts","lineNumber":132,"sourceCode":"      } else {\n        // Linux - for future support\n        assetName = `${this.bundleName}-linux-${arch}.zip`;\n      }\n\n      log.info(`GitHubUpdater: Looking for asset named: ${assetName}`);\n      log.info(`GitHubUpdater: Available assets: ${release.assets.map((a) => a.name).join(', ')}`);\n\n      const asset = release.assets.find((a) => a.name.toLowerCase() === assetName.toLowerCase()); // keeping comparison to lowercase because Goose vs goose\n      if (asset) {\n        downloadUrl = asset.browser_download_url;\n        log.info(`GitHubUpdater: Found matching asset: ${asset.name} (${asset.size} bytes)`);\n        log.info(`GitHubUpdater: Download URL: ${downloadUrl}`);\n      } else {\n        log.warn(`GitHubUpdater: No matching asset found for ${assetName}`);\n      }\n\n      if (!downloadUrl) {\n        throw new Error(\n          `Update Available but no download URL found for platform: ${platform}, arch: ${arch}`\n        );\n      }\n\n      return {\n        updateAvailable: true,\n        latestVersion,\n        downloadUrl,\n        releaseUrl: release.html_url,\n      };\n    } catch (error) {\n      log.error('GitHubUpdater: Error checking for updates:', error);\n      log.error('GitHubUpdater: Error details:', {\n        message: errorMessage(error, 'Unknown error'),\n        stack: error instanceof Error ? error.stack : 'No stack',\n        name: error instanceof Error ? error.name : 'Unknown',\n        code:\n          error instanceof Error && 'code' in error","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/aaif-goose/goose/blob/3810898a7447ec3299be72e223d3570a7aabf0ab/ui/desktop/src/utils/githubUpdater.ts#L114-L150","documentation":"After finding a release, githubUpdater computes the expected asset name for the current platform/arch and looks for it (case-insensitively) among release.assets. If no asset matches, downloadUrl stays unset and this error throws with the platform and arch — the release exists but has nothing installable for this machine (e.g. Goose.zip vs Goose.dmg naming, or the platform simply isn't shipped).","triggerScenarios":"Running on linux/arm64 or freebsd where no @aaif/goose-binary asset is published; release published before multi-platform CI finished uploading; asset renamed (Goose.tar.gz vs goose-linux-arm64.tar.gz); case mismatches are handled, extension/format changes are not.","commonSituations":"Community members on unsupported architectures; checking for updates the moment a release tag is pushed but before all matrix jobs uploaded assets; release pipeline changing artifact names between versions.","solutions":["Check the release page: the logged 'Available assets' line lists what was actually uploaded — confirm your platform/arch is there","If assets were still uploading, retry after the release finishes publishing","Maintainers: ensure the release workflow uploads assets for the platform/arch in the error message","On genuinely unsupported platforms, disable the update check or use manual download"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before offering the update, confirm an asset matches this platform:\nconst assetName = `Goose-${process.platform}-${process.arch}.zip`; // adapt to naming scheme\nif (!release.assets.some(a => a.name.toLowerCase() === assetName.toLowerCase())) {\n  skipUpdate('no asset for this platform');\n}","typeGuard":"const releaseHasAssetFor = (release: GitHubRelease, name: string): boolean =>\n  release.assets.some(a => a.name.toLowerCase() === name.toLowerCase());","tryCatchPattern":"try {\n  const info = await checkForUpdatesViaGithub();\n} catch (e) {\n  if (String(e).includes('no download URL found for platform')) {\n    // platform unsupported in this release: suppress update UI, log platform/arch\n  } else throw e;\n}","preventionTips":["Publish releases only after all platform CI jobs upload their assets","Keep asset naming stable across releases (the matcher is exact modulo case)","Suppress the update flow on known-unsupported platform/arch combos"],"tags":["github-api","release-assets","platform-support","auto-update"],"backgroundTag":null,"analyzedSha":"3810898a7447ec3299be72e223d3570a7aabf0ab","analyzedAt":"2026-08-16T10:14:26.282Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}