Phase 7b: page render plans — per-page boundary optimizer
Add page-render-plan to deps.sx: given page source + env + IO names, computes a dict mapping each needed component to "server" or "client", with server/client lists and IO dep collection. 5 new spec tests. Integration: - PageDef.render_plan field caches the plan at registration - compute_page_render_plans() called from auto_mount_pages() - Client page registry includes :render-plan per page - Affinity demo page shows per-page render plans Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -881,9 +881,10 @@ async def _streaming_demo_data():
|
||||
|
||||
|
||||
def _affinity_demo_data() -> dict:
|
||||
"""Return affinity analysis for the demo components."""
|
||||
"""Return affinity analysis for the demo components + page render plans."""
|
||||
from shared.sx.jinja_bridge import get_component_env
|
||||
from shared.sx.types import Component
|
||||
from shared.sx.pages import get_all_pages
|
||||
|
||||
env = get_component_env()
|
||||
demo_names = [
|
||||
@@ -904,4 +905,20 @@ def _affinity_demo_data() -> dict:
|
||||
"io-refs": sorted(val.io_refs),
|
||||
"is-pure": val.is_pure,
|
||||
})
|
||||
return {"components": components}
|
||||
|
||||
# Collect render plans from all sx service pages
|
||||
page_plans = []
|
||||
for page_def in get_all_pages("sx").values():
|
||||
plan = page_def.render_plan
|
||||
if plan:
|
||||
page_plans.append({
|
||||
"name": page_def.name,
|
||||
"path": page_def.path,
|
||||
"server-count": len(plan.get("server", [])),
|
||||
"client-count": len(plan.get("client", [])),
|
||||
"server": plan.get("server", []),
|
||||
"client": plan.get("client", []),
|
||||
"io-deps": plan.get("io-deps", []),
|
||||
})
|
||||
|
||||
return {"components": components, "page-plans": page_plans}
|
||||
|
||||
Reference in New Issue
Block a user