Unclear The finding does not say which lookups use allowStale or what the new reserved-name special case does.
What
A 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.
- 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 andCLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILUREkeeps the old clone. Both cases used to return nothing. - The marketplace load result now carries a
keptStaleCloneflag for the second case. The catalog-publish path always sets it to false. - When
keptStaleCloneis set,lastUpdatedis not moved to now, the post-load step is skipped, and the plugin list is not reloaded. For the official marketplace, onlyinstallLocationis updated, and only if that path changed. Re-adding such a marketplace keeps its previouslastUpdatedtime. - 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.
- Marketplace and plugin lookups take a new reason argument:
install,update,loadorother. - The plugin catalog cache reader gains an
allowStaleoption that skips the "Plugin catalog cache is stale (>24 h old)" rejection. Before, a stale cache was always rejected. - A reserved-name check has a new special case, and two placeholder functions that only return nothing in this build were added.
Why
The "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.
Something disagreesSomething we can check disagrees with this entry, or the writer said they could not settle it.
The writer flagged doubt
The finding does not say which lookups use `allowStale` or what the new reserved-name special case does.