ciregenz
496bea736d
[eric] win: match the legacy NSIS uninstall entry by DisplayName -like 'OpenSwarm*' (NSIS appends the version, exact match found nothing)
2026-05-30 03:03:49 -07:00
ciregenz
c6cdb982fa
[eric] release: bump squirrel to 1.1.71 (first squirrel release version / migration target)
2026-05-30 01:17:10 -07:00
ciregenz
78eedf18c4
[eric] win: squirrel firstrun silently removes the legacy NSIS install (NSIS->Squirrel migration cleanup, deferred to quit, best-effort)
2026-05-30 01:17:10 -07:00
ciregenz
abf2daf0da
[eric] win: fold proven squirrel autoUpdater fixes into squirrel (non-throwing check, event-signature normalization, already-running guard)
2026-05-30 01:06:11 -07:00
ciregenz
e7dde47869
[eric] ci: point the squirrel build workflow at the renamed squirrel branch
2026-05-29 22:22:43 -07:00
ciregenz
be8d6fd081
[eric] win: switch product to squirrel target + wire built-in autoUpdater on the RELEASES feed
2026-05-29 22:22:43 -07:00
ciregenz
4c6326a566
[eric] security: pin 9router to loopback so it stops lan-exposing api keys + tripping the firewall prompt
2026-05-29 22:17:26 -07:00
ciregenz
028984cb67
[eric] build: precompile python bytecode with unchecked-hash so installs stop recompiling every launch
2026-05-29 22:17:26 -07:00
ciregenz
ac31593eda
[eric] win: handle Squirrel install events so the app makes its Start Menu/Desktop shortcut
2026-05-29 19:41:03 -07:00
ciregenz
e209c48f59
[eric] build: pass squirrelWindows.iconUrl in -Squirrel override (eb26 requires it)
2026-05-29 19:08:45 -07:00
ciregenz
7e8a5fa440
[eric] build: fix -Squirrel arg passing (array expansion not @ splat) so the target override reaches electron-builder
2026-05-29 19:02:00 -07:00
ciregenz
81cabb5390
[eric] ci: push-triggered Squirrel installer build for personal install-and-feel testing
2026-05-29 18:55:24 -07:00
ciregenz
06dde355a5
[eric] build: pin electron-builder-squirrel-windows so the -Squirrel target is build-safe
2026-05-29 18:55:24 -07:00
ciregenz
0d0bae0ba8
[eric] build: set explicit dmg.size (5g) so dmgbuild stops under-allocating the disk image
2026-05-29 16:14:58 -07:00
ciregenz
e7991f138b
[eric] ci: run signtool verify /pa unconditionally when authenticode status isnt Valid
2026-05-29 15:53:10 -07:00
ciregenz
af24590b5f
[eric] ci: verify-signature accepts Azure Trusted Signing via signtool /pa cross-check
2026-05-29 15:37:59 -07:00
ciregenz
f7741de556
[eric] ci: bypass dogfood release-gate for v1.1.70 windows build
v1.1.70
2026-05-29 13:09:02 -07:00
ciregenz
96f647c851
[eric] ci: fix invalid flow-mapping env in release workflows (0-job parse failure)
2026-05-29 13:05:00 -07:00
ciregenz
90bd4e2372
[eric] release: bump version to 1.1.70
2026-05-29 12:56:10 -07:00
Eric
88ff712c2e
[eric] ci: drop the dogfood cron, run only on build-affecting pushes + dispatch
...
- the every-2-hours cron spent a full packaged-app build 12x/day just to tick;
remove it and rely on the existing path-gated push trigger plus dispatch
- release-readiness now accrues its consecutive-clean streak from push/dispatch
runs rather than the clock; fire workflow_dispatch a few times before a
release if the streak is short
2026-05-29 12:18:47 -07:00
Eric
2b4d90edaa
[eric] ci: parallelize + cache the e2e gate to cut push wall-clock under ~10 min
...
- 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)
2026-05-28 23:55:32 -07:00
Eric
99f1e56497
[eric] installer: skip Defender prewarm on silent installs to fix the install hang
...
- 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
2026-05-28 23:39:41 -07:00
Eric
ef0c9bd5ee
[eric] e2e: fix latent serial-masked failures (modes + theme matrix)
...
- modes test: replace expect.fail() (not a Playwright API, threw TypeError)
with annotate+skip when a clean profile has no edit-or-create entry point
- theme x toggle matrix: clicking Dark/Light updates the settings draft, so
Save before asserting localStorage flips; conditional Save handles the
already-that-mode case
- both were hidden until the dashboard-precondition fix unblocked the serial
chain past them; full suite passes locally now
2026-05-28 23:14:02 -07:00
Eric
77ad8333c9
[eric] ci: stop host-leakage flagging the generic CI runner account
...
- 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
2026-05-28 23:14:02 -07:00
Eric
d6e6f9e9e0
[eric] ci: drop macOS legs and gate the packaged-app build on artifact paths
...
- 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
2026-05-28 23:14:01 -07:00
Eric
e0ebd23a5a
[eric] e2e: create a dashboard before the toolbar/canvas specs so a clean CI profile does not fail - combinatorial Add-note and deep-coverage Dashboard-canvas both clicked surfaces that only mount once a dashboard is active, which a freshly-wiped CI profile lacks
2026-05-28 22:29:20 -07:00
Eric
894d1a7a95
[eric] gitignore: ignore the repo-root test-results/ playwright drops when run from the root
2026-05-28 21:51:49 -07:00
Eric
9aaf503b03
[eric] e2e: expose the redux store deterministically via webPreferences.additionalArguments, fix visibility capture (read the chromium trace from tracingComplete, resolve click targets to the control, drop the dead contextBridge ipc wrap), harden onboarding/settings/combinatorial specs and add multi-window-stress
2026-05-28 21:41:01 -07:00
Eric
41031a7790
[eric] backend: load_settings never bricks boot on a corrupt or version-drifted settings.json - preserve unparseable files aside and drop only the invalid fields instead of raising, plus a migration test suite
2026-05-28 21:41:01 -07:00
Eric
f1a3ec2598
[eric] electron: fix the electron 42 windows build - electronLanguages en to en-US so the renderer gets a non-empty --lang (electron 42 renamed en.pak to en-US.pak; empty locale crashed blink LCIDFromLocaleInternal with 0xC0000005), bump electron-builder 25.1.8 to 26.8.1 + migrate win.sign to signtoolOptions, after-pack hook restores the 9router node_modules eb26 drops from extraResources so the subscription service stops hanging, and verify-locale-paks + verify-router-deps gate both in verify-all
2026-05-28 21:41:01 -07:00
Eric
0d90a469aa
[eric] e2e: onboarding-completion gains OPENSWARM_E2E_REAL_UI=1 mode that drives each step's actual primary user action via the DOM - settings open + Models tab, customization to Actions/Skills, dashboard New Agent + Browser webview mount, Add App picker - so animation-timing and AC-runtime bugs surface rather than only slice state corruption, with agent-touching send-message gated on ANTHROPIC_API_KEY/etc being wired
2026-05-28 09:38:43 -07:00
Eric
c55f802731
[eric] e2e: settings-pairwise gains OPENSWARM_E2E_THROUGH_BACKEND=1 mode that issues the real PUT /api/settings round-trip using the renderer auth token and dispatches the response, exercising the backend pydantic validation, write-lock, and slice-shape contract instead of bypassing them with a local fulfilled-action dispatch
2026-05-28 09:38:35 -07:00
Eric
6353bbddda
[eric] electron+e2e: close the init-script race - main reads OPENSWARM_E2E env on startup and appends an --openswarm-e2e chromium switch, preload reads the switch BEFORE any page script parses and contextBridge-exposes __OPENSWARM_E2E__=true so the production store-on-window gate fires deterministically rather than racing addInitScript against bundle parse
2026-05-28 09:38:29 -07:00
Eric
d8c4aeb137
[eric] e2e+ci: addInitScript in launchApp setting __OPENSWARM_E2E__=true before bundle.js parses so the production-build store-on-window gate fires for specs that drive Redux directly, plus chain selftest-pairwise into verify-all and the e2e workflow so the covering-array math is validated on every CI push
2026-05-28 09:35:27 -07:00
Eric
b0d7d8209c
[eric] e2e: add onboarding-completion spec that drives every step via markStepCompleted/unmarkStepCompleted across three orderings (sequential 1-8, skip pattern 1-2-4-3-5-7-6-8, full unmark+re-mark idempotency) plus same-id idempotency and roadmap-counter agreement, regressing the AC animation leak class historically caused by re-firing completed-step transitions
2026-05-28 09:35:21 -07:00
Eric
510d2bdd42
[eric] e2e: add settings-pairwise spec that applies each generated row via the settings/update/fulfilled action, asserts every switch persisted + theme localStorage took + zero renderer crash + zero unexpected console errors, with OPENSWARM_E2E_EXHAUSTIVE=1 switching to the full sixty-four-row cartesian
2026-05-28 09:35:15 -07:00
Eric
27b31c80f1
[eric] ci: add selftest-pairwise that vendors the pairwise generator and asserts every-pair-covered, deterministic, bounded, and isCovering correctly fails on incomplete row sets, catching a future regression that drops the all-pairs guarantee before any e2e spec runs
2026-05-28 09:35:15 -07:00
Eric
8bcc18c99c
[eric] e2e: add helpers/pairwise with an IPO-style covering-array generator that seeds each row from an uncovered pair (fixing the greedy tie-break bug a pure-greedy hits) plus cartesian for opt-in exhaustive mode, returning eight rows that cover all sixty pairs of the six binary settings instead of the full sixty-four
2026-05-28 09:35:07 -07:00
Eric
643f159205
[eric] ci: change dogfood cron from every-six-hours to every-two-hours so twelve consecutive clean runs accrue in twenty-four hours instead of three days while keeping cost at roughly one third of an every-thirty-minutes cadence
2026-05-28 09:24:01 -07:00
Eric
d6dd58bc65
[eric] ci: add dogfood.yml scheduled every six hours across windows-latest+macos-13+macos-14 that builds, runs verify-dogfood, uploads the per-leg manifest, then aggregates into preflight-tunings.json; gate both release-windows and release-macos on a release-gate job that downloads the latest tunings via gh run download and runs verify-release-readiness so a v* tag halts before signing if the dogfood loop has not validated twelve consecutive clean runs per platform
2026-05-28 09:17:21 -07:00
Eric
b0b3bff91d
[eric] ci: add dogfood-aggregator that walks the rolling manifest, computes per-platform per-check warn/fail rates, emits preflight-tunings.json with a demote list when a check exceeds 2x the false-positive tolerance, and writes a release-readiness block the v* gate reads; preflight.js loadTunings/applyTunings honors the demote list at runtime so a chronically-noisy check gets silently downgraded to warn on subsequent boots
2026-05-28 09:17:15 -07:00
Eric
db6419fe7e
[eric] ci: add verify-dogfood that launches the packaged app, parses the [preflight2] line, INDEPENDENTLY verifies boot evidence (provenance==HEAD, perf marks ordered, health 200, no renderer-gone), and fails red when verdict and reality disagree, recording every run to dogfood-manifest.jsonl for the aggregator
2026-05-28 09:17:07 -07:00
Eric
d5491ff15e
[eric] ci: add verify-packaging-parity that pulls every $STAGING_DIR/<x> from build-app.sh and every Join-Path $Staging '<x>' from build-app-win.ps1 then asserts both stage the same set of dirs and that every extraResources from in electron/package.json is staged by both, with webapp-template-node-modules as the one documented mac-only exception
2026-05-28 02:49:22 -07:00
Eric
c7a195198a
[eric] ci: extend selftest-gate with cross-gate preflight mutation tests so a regression that turns withTimeout into fail-on-hang or readCache into stale-version-passes makes the boot-pipeline gate selftest also go red
2026-05-28 02:49:16 -07:00
Eric
7fb57cea5e
[eric] electron: defer the preflight cache-write until both preflight finished AND backend-http-ready fired so a kill in the window between cannot leave a verdict=ok token that masks a real boot break on the next launch, plus honor settings.preflight_enabled and a deterministic installation_id-bucket cohort gate
2026-05-28 02:49:11 -07:00
Eric
e8fd9ceb5a
[eric] backend: add preflight_enabled (default true) and preflight_rollout_pct (default 100) to AppSettings so the runtime preflight can be killed per-install via the existing settings sync or staged 5/25/100 by the cloud cohort gate without a release
2026-05-28 02:49:06 -07:00
Eric
6fc7e23bbe
[eric] ci: chain the four new preflight verifiers (selftest, rigs, race, matrix) at the head of verify-all and add hostile-env legs to e2e.yml so network=blocked + appdata=readonly + lang=de-DE all run on every push
2026-05-28 02:13:21 -07:00
Eric
1396372c8f
[eric] electron: wire the preflight module into main next to logPreflight, honor OPENSWARM_DISABLE_PREFLIGHT=1 kill switch, fire async so it overlaps with backend spawn instead of adding to boot, emit a [preflight2] verdict line and fold the result into the boot beacon payload
2026-05-28 02:13:14 -07:00
Eric
3faacf761c
[eric] ci: add verify-preflight Layer 5 matrix verifier that reads OPENSWARM_TEST_NETWORK/_APPDATA/_LANG and asserts the verdict matches the expected envelope per scenario, catching the false-positive class where network=blocked produces fail instead of warn
2026-05-28 02:13:09 -07:00
Eric
051ddf5cd7
[eric] ci: add verify-preflight-race Layer 4 that runs twenty parallel preflights asserting no cache contention, then writes a version-keyed token + corrupts it + asserts the next read returns null so mid-boot kill cannot poison a future boots cached verdict
2026-05-28 02:13:09 -07:00