You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1.4.140-rc.0 (dev build from main; A and B also reproduce on release 1.4.137)
Details
Details
Umbrella for a cluster of related Tasks problems, most visible on a fork (origin = fork, upstream = canonical repo). Filing together because they compound each other in the same surface; individually scoped fixes can reference this issue.
Repro: fork with both remotes, no explicit source pick → Tasks → PRs tab
Actual: "No matching GitHub work" with the Upstream pill highlighted. The PR list/count query targets the fork (--repo <fork>), which almost never has its own PRs — fork-contribution PRs live upstream. The issue side resolves upstream-first, so the highlighted pill (which reflects the issue heuristic) contradicts where PR data actually comes from.
Repro: Tasks → PRs (Issues shows it too) → toggle Upstream/Origin back and forth without pressing the refresh button
Observed on both 1.4.137 and current main: after the first toggle the list can keep rows from the previous source while the pager shrinks to the new source's count; after toggling again the list can go empty and stay empty. The manual refresh button always recovers, so the forced-refresh path works — only the preference-flip path misbehaves, and it degrades further with each toggle.
No partial failure warnings appear in the dev console while this happens.
One confirmed contributing factor: count queries always run with gh api --cache 120s and have no cache-bypass on source flips, so pagination totals lag the selected source by up to two minutes.
E. Checks/merge badges flicker on forced refreshes — PR rows' checks/merge badges hydrate lazily per row and are lost when a refresh replaces rows with fresh list objects (which carry no such metadata), blanking the badges until the lazy reload. A reconcile-based attempt didn't hold — hydrated fields make the old rows' status signature differ from fresh rows, so reconciliation still replaces them; a fix needs to carry hydrated fields across row replacement. Found while working on B.
F. The source selector chip unmounts during a side's first fetch — the selector renders from the cache entry's sources metadata (per Route task PR queries by upstream source #5176's "render nothing until metadata arrives" rule), so it briefly disappears while a side loads and remounts on response. Persisting the raw origin/upstream candidates per repo (or falling back to any cached entry's sources) would keep it mounted. Found while working on B.
G. Pagination totals blink on source flips — the count is an independent fire-and-forget query with no renderer cache (totalItemCount is nulled at dispatch, so the pager runs degraded until the count lands), and count queries always use gh api --cache 120s with no bypass. A per-side count cache mirroring fix(tasks): source flips serve each side's own work-item cache instead of stale shared entries #8738's key scheme would fix it. Found while working on B.
Plan:
A, B — I'm working on these. A's fix is ready and goes up as a small PR referencing this issue right away (related, not closing — this issue tracks the whole set). B is under investigation; a scoped fix PR will follow once the root cause is pinned.
Operating system
macOS
Orca version
1.4.140-rc.0 (dev build from main; A and B also reproduce on release 1.4.137)
Details
Details
Umbrella for a cluster of related Tasks problems, most visible on a fork (
origin= fork,upstream= canonical repo). Filing together because they compound each other in the same surface; individually scoped fixes can reference this issue.A.
autoroutes the PRs tab to origin — empty by default on forks (fix up: fix(tasks): resolve PR work items upstream-first under 'auto' like issues #8727)--repo <fork>), which almost never has its own PRs — fork-contribution PRs live upstream. The issue side resolves upstream-first, so the highlighted pill (which reflects the issue heuristic) contradicts where PR data actually comes from.autoside was consciously deferred there.B. Toggling Upstream/Origin without a manual refresh shows stale or empty lists (fix up: fix(tasks): source flips serve each side's own work-item cache instead of stale shared entries #8738, draft stacked on fix(tasks): resolve PR work items upstream-first under 'auto' like issues #8727)
main: after the first toggle the list can keep rows from the previous source while the pager shrinks to the new source's count; after toggling again the list can go empty and stay empty. The manual refresh button always recovers, so the forced-refresh path works — only the preference-flip path misbehaves, and it degrades further with each toggle.partial failurewarnings appear in the dev console while this happens.gh api --cache 120sand have no cache-bypass on source flips, so pagination totals lag the selected source by up to two minutes.C. PR detail fails on forks — already tracked in [Bug]: PR details fail to load for fork repositories — getOwnerRepo only checks origin #7331 with fix in review (Load PR details in forked repositories #7513); listed for completeness since it lands on the same surface (detail lookups re-resolve by number against origin and ignore the selection).
D. Far page jumps are very slow — cursor-chained pagination fetches pages serially, so jumping to page ~20 takes tens of seconds. Related: the merge notes on fix(github): pin work-item list ordering to updated-desc so cursor pagination reaches every page #8658 flag cursor/buffer persistence across calls as a follow-up, and fix(issues): replace cursor-based pagination with page-number Search API #8680 proposes page-number pagination.
E. Checks/merge badges flicker on forced refreshes — PR rows' checks/merge badges hydrate lazily per row and are lost when a refresh replaces rows with fresh list objects (which carry no such metadata), blanking the badges until the lazy reload. A reconcile-based attempt didn't hold — hydrated fields make the old rows' status signature differ from fresh rows, so reconciliation still replaces them; a fix needs to carry hydrated fields across row replacement. Found while working on B.
F. The source selector chip unmounts during a side's first fetch — the selector renders from the cache entry's
sourcesmetadata (per Route task PR queries by upstream source #5176's "render nothing until metadata arrives" rule), so it briefly disappears while a side loads and remounts on response. Persisting the raw origin/upstream candidates per repo (or falling back to any cached entry's sources) would keep it mounted. Found while working on B.G. Pagination totals blink on source flips — the count is an independent fire-and-forget query with no renderer cache (
totalItemCountis nulled at dispatch, so the pager runs degraded until the count lands), and count queries always usegh api --cache 120swith no bypass. A per-side count cache mirroring fix(tasks): source flips serve each side's own work-item cache instead of stale shared entries #8738's key scheme would fix it. Found while working on B.Plan: