Sync upstream scoped provider refresh#54
Conversation
* fix: scope refresh-row disabling to the provider being refreshed Refreshing one provider greyed out — and single-flighted — the Refresh row for every provider, so the menu implied the others were refreshing when they were not. Replace the single global `manualRefreshTask` with a per-scope map (`.global` for the all-providers ⌘R/overview refresh, `.provider(p)` for a single provider). The disable gate now reflects only the target provider's own refresh (a global refresh still disables every row), and `startManualRefresh` guards per scope so different providers can refresh concurrently instead of one blocking the rest. `MenuCardRefreshMonitor` tracks in-flight providers as a set plus a global flag. Rewrites the refresh-row tests that encoded the old blanket behavior and adds coverage for scoped greying and concurrent per-provider refreshes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: address review — preserve frozen cards and exclude global/provider overlap - MenuCardRefreshMonitor: keep an already-refreshing provider's frozen card when a second provider's refresh re-supplies models (old-wins merge), so the first card no longer jumps mid-refresh — the artifact the freeze exists to prevent. - startManualRefresh: make a .global refresh mutually exclusive with any per-provider one (and vice versa); two different providers still refresh concurrently. - Merged-overview Refresh row now reflects any in-flight manual refresh, including a per-provider refresh's post-fetch status/token tail, instead of flickering. - Make the test-only manualRefreshTask / manualRefreshProvider accessors return a value only when unambiguous (global, or exactly one task), else nil; move them to +Actions. - Add tests: concurrent frozen-card retention, and overview-busy-through-tail + global refresh exclusion. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: apply frozen-card old-wins merge, global/provider exclusivity guard, scoped overview greying * fix: isolate provider refresh snapshots * test: use scoped refresh tasks --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
# Conflicts: # CHANGELOG.md
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Merged after full validation.\n\nFinal status:\n- Upstream range synced: 9ad35de..45b000c\n- Reviewed areas: scoped manual provider refresh state, status-menu reload paths, persistent menu shutdown/tracking, QuotaKit branding/release metadata, upstream cursor integrity\n- Local validation: git diff --check; swift build; focused status-menu refresh tests; PARSER_LINT_BASE=origin/main ./Scripts/lint.sh lint; ./Scripts/check_upstreams.sh\n- CI: run 28745247178 passed lint, Linux CLI x64/arm64, macOS shards 0-3; iOS skipped due no mobile impact\n- Merge commit: 3466b07\n- Post-merge upstream monitor: no new commits since 45b000c |
Summary
9ad35deb6a890cb2e44cdd4c395eff70c78999c8..45b000c135b06a69c982b2ed09df35563b2e2350.UPSTREAM_MONITOR_BASEto45b000c135b06a69c982b2ed09df35563b2e2350and preserves QuotaKit release ownership/versioning.Review Focus
ManualRefreshScope,manualRefreshTasks, persistent refresh row enablement, shutdown cancellation.Validation
git diff --checkswift buildswift test --filter 'StatusMenuPersistentRefreshTests|StatusMenuSwitcherRefreshTests|StatusMenuMergedOverviewRefreshTests|StatusMenuClosedPreparationTests'(56 tests passed)PARSER_LINT_BASE=origin/main ./Scripts/lint.sh lint./Scripts/check_upstreams.sh(0 commits since45b000c135b06a69c982b2ed09df35563b2e2350)