fix(update): recognize manual-update launchd jobs#88764
Conversation
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Codex review: needs maintainer review before merge. Reviewed May 31, 2026, 5:23 PM ET / 21:23 UTC. Summary PR surface: Source +61, Tests +251. Total +312 across 9 files. Reproducibility: yes. Current main only recognizes Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the narrow manual-update launchd cleanup after maintainer acceptance of the reserved-prefix tradeoff and required CI, then let the linked issue close through the merged PR. Do we have a high-confidence way to reproduce the issue? Yes. Current main only recognizes Is this the best way to solve the issue? Yes, with maintainer acceptance of the compatibility tradeoff. Recognizing the observed label class in the launchd helper is the narrow cleanup layer, and the latest head now routes installed service env through the known status and doctor scan callers. AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 5ee3e5d8c071. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +61, Tests +251. Total +312 across 9 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
6e5ff88 to
a39e6eb
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
a39e6eb to
00a4dcb
Compare
|
@clawsweeper re-review |
|
🦞👀 Command router queued. I will update this comment with the next step. Re-review progress:
|
00a4dcb to
7e1b56d
Compare
|
@clawsweeper re-review |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
5987277 to
15e1dad
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
15e1dad to
c0a0fca
Compare
|
Maintainer pass completed and this is land-ready at head What changed in the final maintainer refresh:
Local proof:
CI proof:
|
* Recognize manual update launchd jobs * fix(update): avoid stale launchd false positives * fix(update): filter stale doctor launchd checks * fix(update): narrow manual launchd updater labels --------- Co-authored-by: Peter Steinberger <[email protected]>
* Recognize manual update launchd jobs * fix(update): avoid stale launchd false positives * fix(update): filter stale doctor launchd checks * fix(update): narrow manual launchd updater labels --------- Co-authored-by: Peter Steinberger <[email protected]>
* Recognize manual update launchd jobs * fix(update): avoid stale launchd false positives * fix(update): filter stale doctor launchd checks * fix(update): narrow manual launchd updater labels --------- Co-authored-by: Peter Steinberger <[email protected]>
Summary
What problem does this PR solve?
ai.openclaw.manual-update.*launchd jobs were not recognized as OpenClaw updater jobs.ai.openclaw.update.*andai.openclaw.manual-update.*, so gateway labels and unrelatedai.openclaw.*services are not swept.Why does this matter now?
launchctl submit→ KeepAlive defaults true → infinite update loop that repeatedly stops the gateway #88736 reports a runaway launchd updater job repeatedly stopping the managed gateway after update.ai.openclaw.update.*, so the reportedmanual-updatejobs stayed invisible to the stale-job path.What is the intended outcome?
manual-updatelaunchd jobs are detected, surfaced in status/doctor output, and accepted by the existing updater disable/remove helpers.What is intentionally out of scope?
manual-updatejob; current source did not containmanual-update,run-openclaw-update, orlaunchctl submit.What does success look like?
ai.openclaw.manual-update.*job is treated like a stale updater job, while current gateway labels remain protected.What should reviewers focus on?
Linked context
Which issue does this close?
Closes #88736
Which issues, PRs, or discussions are related?
Related #87993
Was this requested by a maintainer or owner?
No maintainer request observed; this follows the ClawSweeper-reviewed source-repro issue.
Real behavior proof (required for external PRs)
ai.openclaw.manual-update.*launchd jobs were ignored by OpenClaw stale updater detection and cleanup helpers.codex/88736-manual-update-launchd, rebased onupstream/mainat92b9cd21ec.launchctl submit -l ai.openclaw.manual-update.proof-1780258272 -- /bin/sleep 300.node --import tsx:findStaleOpenClawUpdateLaunchdJobs()followed byremoveOpenClawUpdateLaunchdJob(label).launchctl list ai.openclaw.manual-update.proof-1780258272.node scripts/run-vitest.mjs src/daemon/launchd.test.ts src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts src/cli/daemon-cli/status.gather.test.ts src/cli/daemon-cli/status.print.test.ts src/cli/update-cli.test.ts test/scripts/plugin-prerelease-test-plan.test.tsandgit diff --check.ai.openclaw.manual-update.*launchd job was detected by patched OpenClaw stale updater scanning and removed by the patched OpenClaw cleanup helper;launchctlthen confirmed the job was gone.v2026.5.28recognized onlyai.openclaw.update.*, soai.openclaw.manual-update.*labels were filtered out before stale updater handling.Tests and validation
Which commands did you run?
node scripts/run-vitest.mjs src/daemon/launchd.test.ts src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts src/cli/daemon-cli/status.gather.test.ts src/cli/daemon-cli/status.print.test.ts src/cli/update-cli.test.tsgit diff --checkWhat regression coverage was added or updated?
src/daemon/launchd.test.tscovers manual-update list parsing, label recognition, current-job disable, explicit disable, and gateway-label protection.What failed before this fix, if known?
Manual-update labels were filtered out because
parseLaunchctlListOpenClawUpdateJobschecked onlyai.openclaw.update.*.If no test was added, why not?
Tests were added.
Risk checklist
Did user-visible behavior change? (
Yes/No)Yes.
Did config, environment, or migration behavior change? (
Yes/No)No.
Did security, auth, secrets, network, or tool execution behavior change? (
Yes/No)No.
What is the highest-risk area?
Over-matching a non-updater launchd label.
How is that risk mitigated?
The accepted prefixes are explicit and tested;
ai.openclaw.manual-updater.*and current gateway labels remain rejected/protected.Current review state
What is the next action?
Maintainer review and CI.
What is still waiting on author, maintainer, CI, or external proof?
CI and optional maintainer/live macOS launchd confirmation.
Which bot or reviewer comments were addressed?
Initial implementation for #88736.