{"version":"2.1.281","anchor":"stored-marketplace-metadata-no-longer-counts-a-stale-clone-f","canonical_anchor":"stored-marketplace-metadata-no-longer-counts-a-stale-clone-f","heading":"Plugin marketplaces no longer report a failed refresh as fresh, and can fall back to a stale cache","tier":"notice","area":"Plugins","url":"https:\/\/changelogs.core-directive.com\/v\/2.1.281\/e\/stored-marketplace-metadata-no-longer-counts-a-stale-clone-f","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.281","markdown":"### Plugin marketplaces no longer report a failed refresh as fresh, and can fall back to a stale cache\n\nWhen a marketplace refresh falls back to the old copy, its last-updated time stays put, and stale catalog caches can now be used\n\n**What**\n\nA plugin marketplace is a catalog of plugins that Claude Code keeps as a local git copy (a clone) and refreshes from time to time. This release changes what happens when a refresh cannot reach the remote.\n\n- The git marketplace refresh now returns `{ kind: \"current\" }` when the clone is already up to date. It returns `{ kind: \"kept-stale\" }` when the remote is unreachable and `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` keeps the old clone. Both cases used to return nothing.\n\n- The marketplace load result now carries a `keptStaleClone` flag for the second case. The catalog-publish path always sets it to false.\n\n- When `keptStaleClone` is set, `lastUpdated` is not moved to now, the post-load step is skipped, and the plugin list is not reloaded. For the official marketplace, only `installLocation` is updated, and only if that path changed. Re-adding such a marketplace keeps its previous `lastUpdated` time.\n\n- The event for a failed cloud fetch that falls back to git is now also recorded when the result was a stale clone. The refresh also records whether it was triggered in the background or by an update.\n\n- Marketplace and plugin lookups take a new reason argument: `install`, `update`, `load` or `other`.\n\n- The plugin catalog cache reader gains an `allowStale` option that skips the \"Plugin catalog cache is stale (>24 h old)\" rejection. Before, a stale cache was always rejected.\n\n- A reserved-name check has a new special case, and two placeholder functions that only return nothing in this build were added.\n\n**Why**\n\nThe \"last updated\" time for a marketplace now reflects its last successful refresh, so it no longer looks up to date after a git refresh that actually failed. Plugins can also keep working from an older cached catalog when the network is unavailable.\n\n- Area: Plugins\n- Names: `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE`\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 1\/5"}