moeru-ai/airi · warning · Error

No GitHub release found for update lane "${lane}"

Error message

No GitHub release found for update lane "${lane}"

What it means

Thrown when the releases.atom fallback succeeded and was parsed, but selectLatestTagForLane returned no matching tag for the requested update lane. Neither the JSON API nor the atom feed contained a release tag matching the lane filter (e.g. stable, beta).

Source

Thrown at apps/stage-tamagotchi/src/main/services/electron/auto-updater.ts:439

        throw new Error('Unexpected GitHub releases payload shape')

      const tag = selectLatestTagForLane(payload as GitHubReleaseRecord[], lane)
      if (tag)
        return tag
    }
    catch (error) {
      log.withError(error).warn('GitHub releases API lookup failed, trying releases.atom fallback')
    }

    const atomResponse = await fetch(GITHUB_RELEASES_ATOM_URL)
    if (!atomResponse.ok)
      throw new Error(`Failed to fetch GitHub releases atom (${atomResponse.status} ${atomResponse.statusText})`)

    const atom = await atomResponse.text()
    const releasesFromAtom = extractReleaseTagsFromAtom(atom).map(tag => ({ tag_name: tag }))
    const tag = selectLatestTagForLane(releasesFromAtom, lane)
    if (!tag)
      throw new Error(`No GitHub release found for update lane "${lane}"`)

    return tag
  }

  async function prepareGitHubGenericFeed() {
    if (activeFeedUrlOverride)
      return
    if (resolvedReleaseTag)
      return
    if (prepareFeedPromise) {
      await prepareFeedPromise
      return
    }

    prepareFeedPromise = (async () => {
      const preferredLane = getPreferredUpdateLane({ version: appVersion, storedLane: storedPreferredLane })
      const tag = await resolveGitHubReleaseTagForLane(preferredLane)
      resolvedReleaseTag = tag

View on GitHub (pinned to 27111382b4)

Solutions

  1. Switch the update lane/channel to one that has published releases (typically 'stable').
  2. Confirm the repo has GitHub releases published and that their tag names match selectLatestTagForLane's expected pattern.
  3. Update selectLatestTagForLane if the project's tag naming convention changed.
  4. If self-hosting, publish a release tagged for the target lane.
Defensive patterns

Strategy: validation

Validate before calling

import { selectLatestTagForLane } from './auto-updater'
// Before committing to a lane, verify at least one release matches:
const candidate = selectLatestTagForLane(allReleases, desiredLane)
if (!candidate) {
  // fall back to a lane known to have releases, or disable auto-update
}

Try / catch

try {
  await resolveGitHubReleaseTagForLane(lane)
} catch (e) {
  if (e instanceof Error && e.message.includes('No GitHub release found')) {
    // fall back to stable lane or disable update notifications
  } else throw e
}

Prevention

When it happens

Trigger: The configured update lane (channel) has no published releases — e.g. user selected a 'beta' lane but only stable tags exist; tag naming convention changed so the lane matcher no longer recognizes them; the repo has zero published GitHub releases.

Common situations: Misconfigured update channel in settings; lane filter regex/selectLatestTagForLane is out of sync with the project's tag naming convention; fresh fork with no releases; user on an exotic lane with no matching release.

Related errors


AI-assisted analysis of moeru-ai/airi@27111382b4 (2026-08-12). Data as JSON: /api/errors/83a3ed2b86a6dd7f. Report an issue: GitHub.