YANG QIA c28f719540 fix(studio): cut request amplification and per-row queries on the task pages (#10929)
* perf(projects): read the issue hierarchy in a fixed number of queries

Tell which issues wait in two queries, match exact filters in memory, hydrate rows with the caller's readable ids,
announce project, parent and executor changes as list moves, and refresh projects only for announcements naming no
issues.

* perf(studio): assemble task groups once per request

Read the hierarchy, waits and follows once and hydrate every row in one read outside a transaction, cache the summary
per viewer for five seconds, read the children of several parents and single rows in one request each, and count
unread follow-ups with one grouped query.

* perf(studio): refresh the task lists once per burst for the whole app

One subscription gathers announcements for 1.5 seconds, reads only the named rows unless the lists' membership moved,
never cancels a read under way and reads nothing while hidden. Task group keys leave the projects plugin's prefix, the
summary and what the viewer follows refresh only for changes that can move them, and the table reads expanded
children in one request.

* perf(studio): stop rereading the issue pane on every revision

Progress, pull requests, marks and the comment-run limit are keyed by the issue alone and refreshed by their
announcements, and the issue page polls its runs quickly only after the viewer commented, handed the issue to an agent
or asked for work.

* perf(agents): list the agent queue in a fixed number of queries

Queued rows carry the claim rules' quick explanation and the exact reason is read when a row is unfolded, the newest
activity of held runs takes two reads, and the queue and issue work marks refresh from coalesced announcements with a
slower fallback poll.
2026-10-15 23:09:32 +08:00
2026-08-17 09:01:50 +08:00
Languages
TypeScript 99.1%
JavaScript 0.8%