- the is_running() fast-fail fix (v1.3.91) verified cold backend-http-ready
23.5s -> 3.86s and warm 5.0s -> 3.32s on the signed build, no 9Router regression
- strip the [perf] bg entry logs from mcp/skill/settings/service/9router now that
the stall is diagnosed; keep Apps.py per-lifespan timing but only print a
lifespan over 50ms plus the total (cheap regression tripwire)
- document the root cause + fix + before/after in docs/perf/winv2/README.md
- audited all 16 lifespans + the service client in source: every body is trivial
(yield / makedirs / early-return migrate / fire-and-forget svc.sync)
- the no-op debug() shipped and verified live but cold stayed 21.5s, so the
DEBUGLETON scan was not the cold driver; residual ~16s is cold first-run paging
- next cold build with the new [perf] markers pins it or confirms distributed I/O
- cold 21.4s WITH exclusion vs 22.5s without; items 1+3 also no change
- two defender-targeting fixes both ~0 -> residual cold is disk I/O + interpreter init + squirrel first-run, not AV
- recommend removing the exclusion (weakened AV for no gain); bank the wins (cold 54-138->22s, warm 9-10->5s)
- python-env 13554->9285 files (31% fewer) but cold stayed 22.4s vs 22.5s
- cold is native-binary-bound (claude.exe 242MB + .pyd/.dll), not file-count; zip/pyc only touch pure-python
- real cold lever is item 5 (defender exclusion) or trimming native deps; warm 5s already under goal
- download 371.5MB @ 27.1MB/s, authenticode valid; install 6.3s
- cold 22.6s, warm 5.0s, asar 2.1MB, skills live total=17 -- all on the signed 1.3.86 build
- pre-extracting ~30k files into resources blew the windows build past 50min (squirrel lzma on tiny files) + bloated the installer
- revert step 4b to a single node_modules.<digest>.tar.gz (mirrors mac); runtime extracts to warm cache in the background at startup (off the create path)
- runtime _bundled_extracted_modules() stays as a harmless fallback (returns None -> tar path)
- inventory: 607MB asar was ~605MB duplication (python-env 408MB + build-staging 197MB)
- both already ship unpacked in resources/; runtime reads resources/, never the asar
- add build.files exclusion -> asar ~607MB -> ~2MB; kills the 639MB cold-read on first launch
- add inspect_asar.js inventory tool; validate asar size + boot on a packaged exe
- standalone, dry-run by default, NOT wired into the release build (build-gated)
- strips 3352 .py (26.9MB) from site-packages to sourceless .pyc; mechanism proven on bundled 3.13
- scope: site-packages only (keeps backend source for the debugger); validate on a packaged exe