@@ -269,6 +269,27 @@ state/count remains the big client lever.
269269The queue-drain (a2906a3d) and spinner fix (ecbf6384) are unambiguous keeps. The remaining client-side lever is reducing per-widget
270270instantiation cost (vue/widget-manager), and reducing widget count.
271271
272+ ## In-app validation + handoff closure (leasing app agent, 2026-06-12 evening)
273+
274+ The grotto leasing app agent profiled the real home-page load (yappi, PROFILE=1 boot hooks —
275+ endpoint-started yappi misses the pooled render thread):
276+ - ipywidgets perf-widget-construction branch validated IN-APP: get_state 0.383s -> 0.171s (-55%),
277+ whole render cycle -28% CPU, wire bytes identical. (Their initial "38% Instance.__ get__ " profile
278+ ran stock PyPI ipywidgets — the leasing venv had editable reacton/solara but not ipywidgets.)
279+ This is the strongest case yet for upstreaming the branch.
280+ - close_widget_debug 5.5% turned out to be yappi cumulative incl. the real Layout.close;
281+ self time ~ 0.05%. Not a target.
282+ - AGREED NEXT WIDGETTI PROJECT: template payload caching. With get_state fixed, Vue template
283+ registration is the largest single remaining widget-construction item (~ 13% of cycle + ~ 480KB
284+ byte-identical wire payload per page load). Tier 1: per-process cache of serialized template
285+ state. Tier 2: content-hash + HTTP-cacheable endpoint (kills wire bytes + client parse; touches
286+ ipyvue + solara + widget manager).
287+ - Biggest app-side staging win (not widgetti): 60s JWT expiry disabling the Redis auth fast path
288+ (0.4-1.2s per page load).
289+
290+ Env note: the leasing .venv now carries editable reacton, solara, and ipywidgets — plain
291+ ` uv run ` (without --no-sync) will silently clobber them.
292+
272293## Stash (possible bugs / questionable behavior found along the way)
273294
274295- pandas 3.0 re-render on equal DataFrame (see above) — env pin papering over it for now.
0 commit comments