mergeIntoCache() previously extended cachedStart/End even when sync errors occurred — so isCached() returned true on the next call and the failed calendar was silently left empty (especially bad on first launch or after forceReload when there's nothing to preserve). Now the cached range is only extended on a fully clean fetch. When keepKeysInRange is non-empty (sync errors present), we leave cachedStart/End unchanged, forcing isCached() to return false and triggering an automatic retry on the next loadEvents call. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 KiB
29 KiB