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.

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)

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.