The problem is that the qual pushdown stuff all happens in set_subquery_pathlist() before we call subquery_planner() for the subquery. We don't yet have a PlannerInfo made for the subquery when we call check_and_push_window_quals(). We don't really have any other means to communicate to subquery_planner() what the run conditions are for the given Query object. Plus, we *do* really need to know what the runConditions are before we call subquery_planner() so that those conditions can be properly tagged onto WindowAggPaths. I don't really think it would be right to pluck those from the PlannerInfo when we later call create_plan(). That wouldn't leave us any opportunity to do any costing related stuff with run conditions if we decide to do that later.
The remove_unused_subquery_outputs() also happens before we call subquery_planner() for the subquery. Cann't we just store the attnos used in window quals that are pushed down to runConditions in the PlannerInfo of the upper query?
Ah, your point is to move runConditions also out of WindowClause and store them in PlannerInfo, right? That's indeed not an easy job.