@@ -406,6 +406,30 @@ IN-APP caveat (couldn't run real leasing app — needs secrets/DB): measured pro
406406 leasing venv (it still has the editable branch, now redundant — and the monkeypatch would
407407 otherwise wrap the branch), run from the worktree, confirm with PROFILE=1.
408408
409+ ## ipywidgets cache monkeypatch: in-app validated + fallback fixed (2026-06-15)
410+
411+ Leasing agent validated the monkeypatch in the real app (stock ipywidgets 8.1.8 + worktree):
412+ - get_state per call 254->148us (-42%); total/load 98.5->52.7ms (-46%); yappi construction path
413+ (Widget.open->get_state) 0.665->0.369s (-45%). Three independent measures agree ~ -42 to -46%.
414+ - 35/35 offline byte-identical tests pass; page renders + interacts correctly; zero verify exceptions.
415+ - Render-cycle CPU only -13% (vs branch -28%) but that was a measurement-substrate issue: staging
416+ auto-routed to a live call, so the clean construction-dominated home dashboard wasn't reachable;
417+ the get_state numbers are the trustworthy ones.
418+ - ONE fallback: VuetifyTemplate (the get_state-heavy @component_vue widget type) — explained the
419+ -42% vs branch -55% gap.
420+
421+ FALLBACK ROOT-CAUSED + FIXED (commit a7f84c42a): not a byte mismatch — the guard's probe ` cls() `
422+ can't default-construct VuetifyTemplate (its ` template ` trait is required), so it raised and the
423+ class got disabled. Rewrote the guard to verify on the FIRST REAL INSTANCE instead of a probe:
424+ works regardless of required ctor args, keeps sub-widget model ids identical, exercises the
425+ unmaterialized fast paths. Confirmed a VuetifyTemplate subclass now verifies; 35/35 still pass.
426+ Expect the in-app win to move from -42% toward -55% now that the heavy widgets are included
427+ -> needs a re-measure by the leasing agent on a construction-dominated page.
428+
429+ Deployment state: leasing .venv is now on STOCK ipywidgets 8.1.8 (editable perf fork swapped out
430+ by the agent — correct state for the monkeypatch). Worktree solara_app.py back to committed
431+ (install unconditional). Verdict: monkeypatch replaces the editable ipywidgets fork, default-on.
432+
409433## Stash (possible bugs / questionable behavior found along the way)
410434
411435- pandas 3.0 re-render on equal DataFrame (see above) — env pin papering over it for now.
0 commit comments