- 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)
- 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