- zip-stdlib + pyc-only gave no cold improvement (cold is native-binary-scan-bound)
- keep build lean; scripts stay as drafts; cold lever is the opt-in defender exclusion (item 5)
- 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)
- 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
- standalone, dry-run by default, NOT wired into the release build (build-gated)
- collapses ~910 loose stdlib files into python313.zip (cpython auto-adds it to sys.path)
- validate on a packaged exe before enabling; see docs/perf/winv2
- step 4b builds node_modules natively and robocopies it into resources (digest-tagged)
- runtime junctions straight at it; kills the ~14s first-app extract; non-fatal on failure
- split the single windows e2e job into parallel jobs: gate (pure-node
selftests, no build), verify (build + verify-all), playwright (build +
renderer suite). verify and playwright run concurrently so wall-clock is
max(verify, playwright), not their sum
- build the UNPACKED app on the gate path (electron-builder --dir via a new
-DirOnly switch in build-app-win.ps1), skipping the ~2min NSIS LZMA
compression. verify-all drives win-unpacked\OpenSwarm.exe; afterPack +
locale paks still run in the pack phase, and verify-update-feed skips
cleanly when no installer feed is present
- cache the heavy build inputs (bundled Python env, uv, MCP bundles) + npm
across runs, keyed on their source manifests; the build script already skips
any input already on disk, so warm builds are fast
- move the destructive installer cycle to its own job gated off routine pushes
(runs on PR-to-main / dispatch; release-windows.yml covers v* tags)
- apply the same caching to dogfood (shares cache keys, so the two warm each other)
- the customInstall macro runs `OpenSwarm.exe --prewarm` via nsExec::Exec,
which is synchronous with no upper time bound. On a clean box the silent
install launches the freshly-extracted, not-yet-signed binaries, provoking a
cold Windows Defender scan that stalls for minutes - this hung the CI
installer-verification step (no output for ~3m, then cancelled)
- both CI verification and production auto-updates run the installer with /S,
so this same stall could hang a real user's auto-update
- gate the prewarm behind ${If} ${Silent} ... ${Else}: interactive first-time
installs (where the cold-start win lands) still prewarm; silent installs skip
it and finish promptly
- verify-installer: keep the blocking spawnSync (it must wait for the registry
uninstall entry the gate checks) but add a 300s timeout so any future
synchronous stall fails the gate in minutes instead of hanging the job
- skip the bare /Users/runner and /home/runner homes and the literal
"runner" username: they collide with third-party embedded paths and the
english word "runner" everywhere, burying real leaks in noise
- the precise /Users/runner/work + D:\a\openswarm work-dir patterns still
catch a genuine leak from those accounts
- e2e + dogfood matrices are now windows-latest only: GitHub's scarce mac
runners left the macos legs perpetually queued/starved and they surfaced
mac-only failures untriageable from the Windows dev box, so the whole
matrix read red
- remove the now-dead macOS build steps; re-add macos-14/macos-13 (matrix
edit + workflow_dispatch) when a Mac maintainer can own them
- gate the expensive build on artifact-affecting paths only (electron,
frontend, backend, e2e, build+ci scripts) plus PRs to main + dispatch;
cheap hermetic gates still run on every push
- verify-release-readiness defaults to --require win32 so the removed darwin
leg does not block every v* tag forever