different-ai/openwork · error

Den returned an invalid desktop release inventory.

Error message

Den returned an invalid desktop release inventory.

What it means

After resolving the installed version, the stable-channel manual update check calls resolveFreshStableDesktopUpdate. A null return means Den's desktop release inventory could not be resolved into a usable selection (not merely 'no update' — that would be a valid selection object). The code treats null as an invalid inventory and throws so the UI doesn't silently claim 'up to date' on bad data.

Solutions

  1. Retry the update check; transient Den/config fetch failures resolve on retry.
  2. Verify network connectivity and that the Den/desktop-config endpoint is healthy.
  3. Check refreshDesktopConfig: ensure it is wired and the cloud config contains valid desktop release entries.
  4. Inspect the Den release inventory payload for schema changes breaking resolveFreshStableDesktopUpdate.

Example fix

// before
if (!selection) {
  throw new Error("Den returned an invalid desktop release inventory.");
}
// after
if (!selection) {
  const config = await refreshDesktopConfig();
  console.warn("desktop release inventory invalid; config keys:", Object.keys(config ?? {}));
  throw new Error("Den returned an invalid desktop release inventory.");
}
Defensive patterns

Strategy: retry

Validate before calling

const config = await refreshDesktopConfig();
if (!config || !Array.isArray(config.desktopReleases) || config.desktopReleases.length === 0) {
  // skip check; Den inventory not ready
}

Try / catch

try {
  await checkForUpdates({ manual: true });
} catch (err) {
  if (err.message.includes("invalid desktop release inventory")) scheduleUpdateRetry(30_000);
  else throw err;
}

Prevention

When it happens

Trigger: Manual update check when resolveFreshStableDesktopUpdate returns null: refreshDesktopConfig fails, Den returns malformed/empty desktop release data, or the config fetch is unavailable at that moment.

Common situations: Den server unreachable or returning errors; release channel config not yet synced; malformed desktop-config response after a Den-side change; first launch before cloud config has been fetched.

Related errors


AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01). Data as JSON: /api/errors/c5ebeed80970d564. Report an issue: GitHub.

Appendix: source

Thrown at apps/app/src/react-app/domains/settings/state/electron-updater-state.ts:402

        onReleaseChannelChange(activeReleaseChannel);
        await bridge.setChannel?.(activeReleaseChannel);
        if (!isCurrentRequest()) return;
      }
      if (manual && activeReleaseChannel === "stable") {
        const channelState = await bridge.getChannel?.();
        if (!isCurrentRequest()) return;
        const currentVersion = channelState?.currentVersion ?? appVersion;
        if (!currentVersion) {
          throw new Error("Could not determine the installed OpenWork version.");
        }

        const selection = await resolveFreshStableDesktopUpdate({
          currentVersion,
          refreshDesktopConfig,
        });
        if (!isCurrentRequest()) return;
        if (!selection) {
          throw new Error("Den returned an invalid desktop release inventory.");
        }
        if (selection.kind === "blocked") {
          setUpdateStatus({
            state: "blocked",
            lastCheckedAt: Date.now(),
            version: selection.latestPublishedVersion,
            message: t("settings.update_blocked_org", undefined, {
              version: selection.latestPublishedVersion,
            }),
          });
          return;
        }
        if (selection.kind === "current") {
          setUpdateStatus({
            state: "idle",
            lastCheckedAt: Date.now(),
            version: selection.latestPublishedVersion,
          });

View on GitHub (pinned to 2b7df46e8a)