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 = tagView on GitHub (pinned to 27111382b4)
Solutions
- Switch the update lane/channel to one that has published releases (typically 'stable').
- Confirm the repo has GitHub releases published and that their tag names match selectLatestTagForLane's expected pattern.
- Update selectLatestTagForLane if the project's tag naming convention changed.
- 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
- Default users to the 'stable' lane which always has releases.
- Keep selectLatestTagForLane in sync with the project tag convention.
- Surface a clear 'no update available for this channel' message instead of an error.
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
- Failed to fetch GitHub releases atom (${atomResponse.status}
- Invalid remote debug port: ${env.APP_REMOTE_DEBUG_PORT}
- No reachable private LAN address is available for the curren
- Failed to apply server channel configuration
- GODOT4 points to a missing Godot executable.\nConfigured pat
AI-assisted analysis of moeru-ai/airi@27111382b4 (2026-08-12).
Data as JSON: /api/errors/83a3ed2b86a6dd7f.
Report an issue: GitHub.