Commit Graph

25 Commits

Author SHA1 Message Date
Peter Steinberger 7c70571683 chore(lint): clear 172 lint:all baseline violations in five batches (#118098)
* chore(lint): clean Android-Linux app assets batch

* chore(lint): clean setup-launcher-plugin batch

* chore(lint): clean changelog-updater batch

* chore(lint): clean QA-runtime-helper batch

* chore(lint): clean script-tests batch

* fix(mxc): await sandbox spawn before bridge selection

* fix(test): make fake plutil metacharacter escaping survive the template hop
2026-08-02 14:08:09 -07:00
Jason (Json) ae27d79364 fix(updater): harden launchd replacement timing (#117030)
* fix(updater): harden launchd replacement timing

* fix(updater): recover failed launchd replacement
2026-07-31 16:02:00 -06:00
Peter Steinberger 21fba83254 fix: live updater no-op restarts healthy gateways (#117038)
* fix(updater): route managed health through overlay

* style: format live updater probe

* test: align live updater readiness types
2026-07-31 14:34:14 -07:00
Peter Steinberger d66b514a7e fix: allow slower gateway readiness after updates (#117032) 2026-07-31 13:38:06 -07:00
Peter Steinberger cb5070101e fix: bound live updater gateway probes (#110509) 2026-07-18 08:16:05 +01:00
Peter Steinberger 51fa35c94d test: fix three pid/signal races behind CI flakes (batch 3) (#109877)
A. check-extension-package-tsc-boundary "force-kills aborted async node
step process groups" (run 29568640449): two mechanisms behind the
expected-false-to-be-true at the child-alive assertion.
- Pid-file existence polls can observe writeFileSync's open-truncate
  0-byte window, parse NaN, and process.kill(NaN, 0) throws, so
  isProcessAlive reads false (the #109140 class, same as tsdown-build's
  b1e6c6883b). Added waitForPidFile (poll until content parses to a
  positive pid) and applied it to all three pid-read sites in the file.
- The fail-fast step exited on a 150ms fuse after the sibling's pid file
  appeared, racing the test's aliveness assertion: a worker descheduled
  >150ms observes the abort chain's SIGKILL first. The step now exits
  only after the test writes abort.ack, which happens strictly after the
  assertion (event-driven; the step's 5s timeout bounds a wedged run).
  Forced proof: injecting a 300ms stall between pid-file wait and the
  assertion reproduced the exact CI failure, and passed post-fix with
  the same stall in place.

B. telegram-user-crabbox-proof "stops Crabbox recording when the desktop
probe fails" (waitFor timeout on recorder.term): the fake recorder
published its pid file before installing its SIGTERM handler. The probe
throws as soon as the pid file exists and recordProbeVideo SIGTERMs the
recorder in its finally, so a recorder preempted between publish and
process.on dies to the default disposition and never writes
recorder.term. Handler now arms before the pid publish. Forced proof: a
100ms spin between publish and process.on reproduced the exact CI
failure deterministically; moving the spin after the reordered handler
passes. Applied the same handler-before-readiness ordering to the three
sibling fakes in the file, and made the gateway-grandchild pid read
parse-validated inside its poll (a NaN pid skipped both the dead-check
and the finally SIGKILL cleanup, leaking the grandchild).

C. openclaw-live-updater "treats an owner file creation race as a normal
overlap" (run 29569279237): prod bug in acquireMaintenanceLock. Only
ENOENT got the bounded creation-window retry; a reader hitting the
racing writer's open-truncate window read an empty owner.json, JSON.parse
threw SyntaxError, and the script escalated to invalid_lock instead of
overlap. Any owner read/parse failure now re-reads within the same
bounded budget before declaring the lock invalid. New regression test
freezes the window (pre-created empty owner.json, delayed writer):
fails with the exact CI error pre-fix, passes post-fix.

Proof: focused runs green; 10x per-file stress at
OPENCLAW_VITEST_MAX_WORKERS=6 green for all three files (30/30).
2026-07-17 11:01:38 +01:00
Peter Steinberger d6a6b132b3 test: speed live updater fixtures (#107892) 2026-07-14 18:31:00 -07:00
Peter Steinberger 130480871e perf(test): reuse live updater Git fixture (#106975) 2026-07-13 19:26:47 -07:00
Peter Steinberger f2e46f1d23 test: remove avoidable retry waits (#105737) 2026-07-12 16:35:17 -07:00
Peter Steinberger 5a5a28a348 test(updater): stabilize trusted snapshot fixtures (#105352) 2026-07-12 13:08:47 +01:00
Peter Steinberger f4659b7d4d fix(updater): scope restart log audits to managed checkout (#105030)
* fix(updater): scope restart log audits

* test(updater): declare log source argument

* fix(updater): preserve configured plugin logs

* fix(updater): normalize plugin log sources

* fix(updater): reuse managed plugin config

* fix(updater): resolve relative plugin roots

* fix(updater): handle unset gateway workdir

* fix(updater): audit effective plugin roots

* fix(updater): bind logs to managed runtime

* fix(updater): canonicalize log source roots
2026-07-12 11:21:00 +01:00
Peter Steinberger 68553bed84 fix: live updater survives launchd teardown and retargets wrapped gateways (#105022)
* fix(updater): tolerate launchd teardown and replace plist args safely

* test(updater): declare plist argument helper
2026-07-12 09:35:53 +01:00
Peter Steinberger 23d4e48172 fix: harden live updater snapshot recovery (#105007)
* fix(updater): harden snapshot recovery

* fix(updater): avoid snapshot code execution
2026-07-12 06:29:41 +01:00
Peter Steinberger 2263272a32 fix(updater): build snapshot control client safely (#104964) 2026-07-11 22:02:50 -07:00
Peter Steinberger f802a6f8bc fix: update managed macOS Gateways from runtime snapshots (#104946)
* fix(updater): migrate validated gateway snapshots

* test(updater): declare snapshot maintenance helpers
2026-07-11 21:20:08 -07:00
Peter Steinberger 3fe61030be fix: rebuild mac app for generated protocol changes (#104839) 2026-07-11 18:00:42 -07:00
Peter Steinberger 0fbd28476e fix: fence live updater maintenance (#104802) 2026-07-11 17:05:35 -07:00
Peter Steinberger 43c40a3b3e fix: recover delayed live Mac bundle restores (#104613) 2026-07-11 11:18:39 -07:00
Peter Steinberger 325679a335 fix: reuse built control UI for live Mac updates (#104482)
* fix: reuse built control UI for live Mac updates

* fix: pin live updater Mac build inputs
2026-07-11 06:36:42 -07:00
Peter Steinberger 5e8a534fad fix: retry live Gateway readiness proof (#104374)
* fix: retry live Gateway readiness proof

* style: format live updater readiness helper
2026-07-11 03:11:34 -07:00
Peter Steinberger c702719eda fix: preserve Mac bundle during live builds (#104376) 2026-07-11 03:06:50 -07:00
Peter Steinberger 14a056ac83 fix: stop Gateway without source rebuild (#104357) 2026-07-11 02:45:07 -07:00
Peter Steinberger 107b95e1ad fix: isolate Gateway from live builds (#104329) 2026-07-11 02:02:28 -07:00
Peter Steinberger 2ed2424618 feat: harden live gateway and mac restarts (#104314)
* feat: audit gateway logs after live restarts

* fix: keep mac app running during replacement build
2026-07-11 01:41:27 -07:00
Peter Steinberger 2ace363e98 feat: add live updater maintainer skill (#104202)
* feat: add live updater maintainer skill

* fix: restore updater dependencies before probes
2026-07-10 22:52:02 -07:00