I’m not quite clear of why this sounds complex.
You’re right that windowing now needs to be done at the coordinator server, i.e. the server which runs the SubGraph processing. But, that’s largely the change I see.
The filters processing would take in sorted uids, and return back intersections of the filter with the sorted Uids passed in task.Query. Once we have all the filter results, we run the necessary intersections or unions and generate a new sorted Uid list. This is when windowing is applied, and this goes to the children.
You could choose to store this filtered sorted UID list, if that helps in filtering out unneeded elements in post processing (ToJson or ToProto). But, window application shouldn’t reach the post processing stage.
P.S. I think the right term is pagination.