Skip to content

fix(update): recognize manual-update launchd jobs#88764

Merged
steipete merged 4 commits into
openclaw:mainfrom
TurboTheTurtle:codex/88736-manual-update-launchd
May 31, 2026
Merged

fix(update): recognize manual-update launchd jobs#88764
steipete merged 4 commits into
openclaw:mainfrom
TurboTheTurtle:codex/88736-manual-update-launchd

Conversation

@TurboTheTurtle

@TurboTheTurtle TurboTheTurtle commented May 31, 2026

Copy link
Copy Markdown
Contributor

Summary

What problem does this PR solve?

  • Fixes a macOS updater cleanup gap where observed one-shot ai.openclaw.manual-update.* launchd jobs were not recognized as OpenClaw updater jobs.
  • Keeps matching narrow to ai.openclaw.update.* and ai.openclaw.manual-update.*, so gateway labels and unrelated ai.openclaw.* services are not swept.

Why does this matter now?

What is the intended outcome?

  • manual-update launchd jobs are detected, surfaced in status/doctor output, and accepted by the existing updater disable/remove helpers.

What is intentionally out of scope?

  • This does not change the hidden/older producer that created the submitted manual-update job; current source did not contain manual-update, run-openclaw-update, or launchctl submit.

What does success look like?

  • A listed ai.openclaw.manual-update.* job is treated like a stale updater job, while current gateway labels remain protected.

What should reviewers focus on?

  • Whether the new label recognition is narrow enough and whether the status/doctor tests cover the user-visible cleanup path.

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)

  • Behavior or issue addressed: ai.openclaw.manual-update.* launchd jobs were ignored by OpenClaw stale updater detection and cleanup helpers.
  • Real environment tested: Local macOS development checkout on branch codex/88736-manual-update-launchd, rebased on upstream/main at 92b9cd21ec.
  • Exact steps or command run after this patch:
    • Created a safe user launchd proof job: launchctl submit -l ai.openclaw.manual-update.proof-1780258272 -- /bin/sleep 300.
    • Ran patched OpenClaw helpers through node --import tsx: findStaleOpenClawUpdateLaunchdJobs() followed by removeOpenClawUpdateLaunchdJob(label).
    • Verified cleanup with launchctl list ai.openclaw.manual-update.proof-1780258272.
    • Re-ran focused regression checks: 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.ts and git diff --check.
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output):
proof label: ai.openclaw.manual-update.proof-1780258272
launchctl list created job:
{
        "LimitLoadToSessionType" = "Aqua";
        "Label" = "ai.openclaw.manual-update.proof-1780258272";
        "OnDemand" = false;
        "LastExitStatus" = 0;
        "PID" = 88444;
        "Program" = "/bin/sleep";
        "ProgramArguments" = (
patched OpenClaw detection/removal:
{
  "detected": true,
  "matched": {
    "label": "ai.openclaw.manual-update.proof-1780258272",
    "pid": 88444,
    "lastExitStatus": 0
  }
}
{
  "removed": true
}
launchctl list after removal:
Could not find service "ai.openclaw.manual-update.proof-1780258272" in domain for port
  • Observed result after fix: a real macOS ai.openclaw.manual-update.* launchd job was detected by patched OpenClaw stale updater scanning and removed by the patched OpenClaw cleanup helper; launchctl then confirmed the job was gone.
  • What was not tested: I did not reproduce the original older producer that created the runaway manual-update job; current source no longer contains that producer.
  • Proof limitations or environment constraints: This proves compatibility cleanup/disarm behavior for the observed label class using a safe local sleep job rather than recreating the original runaway updater.
  • Before evidence (optional but encouraged): current main and v2026.5.28 recognized only ai.openclaw.update.*, so ai.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.ts

git diff --check

What regression coverage was added or updated?

  • src/daemon/launchd.test.ts covers manual-update list parsing, label recognition, current-job disable, explicit disable, and gateway-label protection.
  • status and doctor tests cover user-visible stale updater warnings containing manual-update labels.

What failed before this fix, if known?

Manual-update labels were filtered out because parseLaunchctlListOpenClawUpdateJobs checked only ai.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.

@openclaw-barnacle openclaw-barnacle Bot added gateway Gateway runtime cli CLI command changes commands Command implementations size: S proof: supplied External PR includes structured after-fix real behavior proof. labels May 31, 2026
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed May 31, 2026, 5:23 PM ET / 21:23 UTC.

Summary
The PR expands macOS updater launchd job recognition to include ai.openclaw.manual-update.*, filters out current gateway labels using installed service env, and updates status/doctor regression tests.

PR surface: Source +61, Tests +251. Total +312 across 9 files.

Reproducibility: yes. Current main only recognizes ai.openclaw.update.*, while the linked report and PR proof use ai.openclaw.manual-update.*; the PR body also includes live macOS launchctl output showing after-fix detection and removal.

Review metrics: 1 noteworthy metric.

  • Updater launchd label prefixes: 1 added. Adding ai.openclaw.manual-update.* expands which macOS launchd jobs status, doctor, and cleanup helpers may treat as updater-owned.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Let required CI/mergeability finish and have a maintainer explicitly accept the manual-update prefix reservation before merge.

Risk before merge

  • [P1] The new ai.openclaw.manual-update.* prefix is compatibility-sensitive because an existing custom/profile gateway LaunchAgent label in that namespace could be classified as updater-owned if the installed service env cannot be read; the PR mitigates the known status and doctor paths with env-aware filtering.
  • [P1] The older producer of the reported manual-update launchd job is not present in current source, so this is a cleanup/disarm path for observed jobs rather than proof that the historical producer cannot recur.

Maintainer options:

  1. Accept the narrow prefix reservation (recommended)
    Maintain ai.openclaw.manual-update.* as updater-owned and rely on installed-service-env filtering plus regression tests to protect live gateway labels.
  2. Require extra macOS confirmation
    Before merge, ask for an additional maintainer or CI/macOS proof that status and doctor exclude a colliding live gateway label while reporting a separate stale updater job.
  3. Pause for producer investigation
    Pause this PR if maintainers want the historical manual-update job producer found and removed before adding compatibility cleanup for its labels.

Next step before merge

  • No automated repair is indicated; the remaining work is maintainer/CI handling for a compatibility-sensitive PR that now has no blocking code finding.

Security
Cleared: The patch changes macOS launchd classification/env plumbing and focused tests, with no concrete security or supply-chain concern found.

Review details

Best 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 ai.openclaw.update.*, while the linked report and PR proof use ai.openclaw.manual-update.*; the PR body also includes live macOS launchctl output showing after-fix detection and removal.

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 changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied live macOS launchctl output showing a real submitted ai.openclaw.manual-update.* proof job detected by patched helpers, removed, and then absent from launchctl list.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes copied live macOS launchctl output showing a real submitted ai.openclaw.manual-update.* proof job detected by patched helpers, removed, and then absent from launchctl list.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: ⏳ waiting on author: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P1: The PR targets a macOS update loop that can repeatedly stop the managed gateway and disrupt real channel or agent workflows.
  • merge-risk: 🚨 compatibility: The accepted launchd label namespace expands to ai.openclaw.manual-update.*, which can overlap with existing custom/profile gateway labels unless env-aware filtering works.
  • merge-risk: 🚨 availability: A false stale-job warning can direct users to remove a live gateway LaunchAgent, making the gateway unavailable.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes copied live macOS launchctl output showing a real submitted ai.openclaw.manual-update.* proof job detected by patched helpers, removed, and then absent from launchctl list.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied live macOS launchctl output showing a real submitted ai.openclaw.manual-update.* proof job detected by patched helpers, removed, and then absent from launchctl list.
Evidence reviewed

PR surface:

Source +61, Tests +251. Total +312 across 9 files.

View PR surface stats
Area Files Added Removed Net
Source 4 74 13 +61
Tests 5 256 5 +251
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 9 330 18 +312

What I checked:

  • Repository policy read: Root AGENTS.md was read fully and applied; no scoped AGENTS.md owns the touched src/daemon, src/commands, src/cli/daemon-cli, or src/flows paths. (AGENTS.md:1, 5ee3e5d8c071)
  • Current main lacks manual-update recognition: Current main only accepts ai.openclaw.update. in normalizeOpenClawUpdateLaunchdLabel, so the central requested behavior is not already implemented on main. (src/daemon/launchd.ts:49, 5ee3e5d8c071)
  • Current stale updater scan skips manual-update labels: Current main's launchctl list parser checks the single update prefix before recording stale updater jobs, so ai.openclaw.manual-update.* entries stay invisible to status/doctor cleanup on main. (src/daemon/launchd.ts:304, 5ee3e5d8c071)
  • PR head adds the observed label class narrowly: The PR diff replaces the single prefix with ai.openclaw.update. plus ai.openclaw.manual-update., and reuses the same normalizer for parsing/removal/disable paths. (src/daemon/launchd.ts:49, 15e1dad64d1e)
  • PR head protects live gateway labels in known scan callers: The PR makes findStaleOpenClawUpdateLaunchdJobs filter through isCurrentGatewayLaunchdLabel(job.label, env) and passes/resolves installed service env from status, structured doctor warnings, and the direct doctor health contribution. (src/flows/doctor-health-contributions.ts:540, 15e1dad64d1e)
  • Linked issue and supplied proof support the bug boundary: The linked issue reports ai.openclaw.manual-update.<epoch> launchd jobs repeatedly stopping the gateway after update, and the PR body supplies macOS launchctl output showing a safe manual-update proof job detected and removed after the patch. (15e1dad64d1e)

Likely related people:

  • steipete: Current blame for the updater launchd detection, stale-job doctor warning, and update-command disarm hook points to Peter Steinberger, and the live PR is assigned to steipete. (role: recent area contributor and assigned reviewer; confidence: high; commits: fa2b2ffab46f, e93216080aa1; files: src/daemon/launchd.ts, src/commands/doctor-platform-notes.ts, src/cli/update-cli/update-command.ts)
  • hclsys: Recent macOS update restart-helper history credits @hclsys for hardening launchctl update behavior, which is adjacent to this launchd updater cleanup path. (role: adjacent contributor; confidence: medium; commits: 4a870300ddc5, 089e038dfeb9; files: src/cli/update-cli/restart-helper.ts, src/cli/update-cli/restart-helper.test.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. labels May 31, 2026
@TurboTheTurtle
TurboTheTurtle force-pushed the codex/88736-manual-update-launchd branch from 6e5ff88 to a39e6eb Compare May 31, 2026 20:09
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@TurboTheTurtle
TurboTheTurtle force-pushed the codex/88736-manual-update-launchd branch from a39e6eb to 00a4dcb Compare May 31, 2026 20:14
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels May 31, 2026
@TurboTheTurtle
TurboTheTurtle force-pushed the codex/88736-manual-update-launchd branch from 00a4dcb to 7e1b56d Compare May 31, 2026 20:36
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@TurboTheTurtle
TurboTheTurtle force-pushed the codex/88736-manual-update-launchd branch from 5987277 to 15e1dad Compare May 31, 2026 21:16
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels May 31, 2026
@steipete
steipete force-pushed the codex/88736-manual-update-launchd branch from 15e1dad to c0a0fca Compare May 31, 2026 21:36
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@steipete

Copy link
Copy Markdown
Contributor

Maintainer pass completed and this is land-ready at head c0a0fca3457bf8d0ca38768e958f3ae42e2e22e2.

What changed in the final maintainer refresh:

  • Rebased onto current main and kept the PR branch on top of the latest gateway/doctor changes.
  • Recognize generated manual-update launchd labels such as ai.openclaw.manual-update.<pid> as stale updater jobs.
  • Keep current gateway LaunchAgents out of stale updater cleanup by using the installed gateway service env in status and doctor platform checks.
  • Narrowed manual-update matching so custom/profile gateway labels like ai.openclaw.manual-update.gateway are not disabled as updater jobs.

Local proof:

  • 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
  • git diff --check
  • node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/commands/doctor-platform-notes.ts src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts src/daemon/launchd.ts src/daemon/launchd.test.ts src/cli/daemon-cli/status.gather.ts src/cli/daemon-cli/status.gather.test.ts src/cli/daemon-cli/status.print.test.ts
  • pnpm tsgo:prod
  • pnpm tsgo:core:test
  • Branch autoreview: clean, no accepted/actionable findings.

CI proof:

  • GitHub Actions CI run 26725158938: green.

@steipete
steipete merged commit 49e5091 into openclaw:main May 31, 2026
161 checks passed
@TurboTheTurtle
TurboTheTurtle deleted the codex/88736-manual-update-launchd branch May 31, 2026 21:47
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 1, 2026
* 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]>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* 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]>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* 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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes commands Command implementations gateway Gateway runtime merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P1 High-priority user-facing bug, regression, or broken workflow. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Updater submits manual-update job via launchctl submit → KeepAlive defaults true → infinite update loop that repeatedly stops the gateway

2 participants