Skip to content

fix: gracefully escalate process supervisor cancellations#85865

Merged
steipete merged 4 commits into
openclaw:mainfrom
IWhatsskill:fix/process-supervisor-graceful-timeout-66399
May 24, 2026
Merged

fix: gracefully escalate process supervisor cancellations#85865
steipete merged 4 commits into
openclaw:mainfrom
IWhatsskill:fix/process-supervisor-graceful-timeout-66399

Conversation

@IWhatsskill

@IWhatsskill IWhatsskill commented May 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: timeout/cancel paths need a graceful cleanup window, but the first draft sent SIGTERM only to the direct child and could leave descendants running.
  • Solution: pass a 5s grace window through the supervisor adapter API and make child/PTY SIGTERM cancellation use the same process-tree/group path as hard cancellation.
  • What changed: supervisor cancellation now calls adapter.kill("SIGTERM", { graceMs: 5000 }); child and PTY adapters route SIGTERM through killProcessTree; tests cover tree-aware SIGTERM and no-detach safeguards.
  • What did NOT change (scope boundary): no new token/network/config behavior, no change to timeout reason semantics, and no claim that this PR changes production agent-provider behavior outside process cancellation.

Motivation

Timeouts can happen while tool subprocesses are writing session state, cleaning temp files, or closing resources. This PR gives subprocesses a bounded graceful shutdown window while preserving the existing process-tree stop guarantee for descendants.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: process supervisor timeout cancellation now gives real child processes and descendants a bounded SIGTERM cleanup window while preserving tree-aware SIGKILL fallback.
  • Real environment tested: fresh throwaway Linux checkout on a test server, Node.js v22.22.2, dependencies installed with corepack pnpm install --frozen-lockfile. The descendant regression was run against old PR head e7ed7242ceb18783de1559d6dd700c973d2b726c, then after applying the tree-aware patch that produced head 720a57df0358976503d2ec501fb68e32d8ecb910.
  • Exact steps or command run after this patch:
git checkout -f e7ed7242ceb18783de1559d6dd700c973d2b726c
node --import tsx ../PR-2026-05-24-process-supervisor-66399-proof.mjs

git apply ../openclaw-66399-tree-aware-incremental.patch
node --import tsx ../PR-2026-05-24-process-supervisor-66399-proof.mjs
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output):
{
  "proof": "process-supervisor-graceful-cancel-66399",
  "cleanupCase": {
    "name": "cleanup",
    "exitReason": "overall-timeout",
    "exitCode": 0,
    "exitSignal": null,
    "timedOut": true,
    "stdout": [
      "child_ready=true",
      "child_observed_sigterm=true",
      "child_finished_async_cleanup=true"
    ],
    "markerWritten": true
  },
  "fallbackCase": {
    "name": "fallback",
    "exitReason": "overall-timeout",
    "exitCode": null,
    "exitSignal": "SIGKILL",
    "timedOut": true,
    "stdout": [
      "child_ready=true",
      "child_observed_sigterm=true",
      "child_ignores_sigterm=true"
    ],
    "markerWritten": false
  },
  "descendantCase": {
    "name": "descendant",
    "exitReason": "overall-timeout",
    "exitCode": 0,
    "exitSignal": null,
    "timedOut": true,
    "stdout": [
      "parent_ready=true",
      "descendant_pid=43906"
    ],
    "parentMarkerWritten": true,
    "descendantMarkerWritten": true,
    "descendantPid": 43906,
    "descendantAliveAfterWait": false
  }
}
  • Observed result after fix: the cleanup child observed SIGTERM and completed async cleanup; the SIGTERM-ignoring child was force-killed by SIGKILL; the parent-exits/descendant case now signals the descendant, writes the descendant marker, and leaves no live descendant after wait.
  • What was not tested: Windows live runtime and production external agent integrations were not exercised. This PR does not add separate pipe-close behavior beyond preserving the existing adapter wait/fallback behavior.
  • Before evidence (optional but encouraged): the previous PR head reproduced ClawSweeper's descendant concern with the same proof runner:
{
  "proof": "process-supervisor-graceful-cancel-66399",
  "descendantCase": {
    "name": "descendant",
    "exitReason": "overall-timeout",
    "exitCode": 0,
    "exitSignal": null,
    "timedOut": true,
    "stdout": [
      "parent_ready=true",
      "descendant_pid=43701"
    ],
    "parentMarkerWritten": true,
    "descendantMarkerWritten": false,
    "descendantPid": 43701,
    "descendantAliveAfterWait": true
  }
}

Root Cause (if applicable)

  • Root cause: the first draft changed the supervisor to request adapter.kill("SIGTERM"), but the child adapter treated non-SIGKILL signals as direct child-only signals instead of using the process-tree path.
  • Missing detection / guardrail: tests covered direct-child cleanup and SIGKILL escalation, but did not cover a parent that exits on SIGTERM while its descendant would otherwise keep running.
  • Contributing context (if known): the existing hard-kill path already had detached/no-detach safeguards; graceful cancellation needed to preserve that same boundary.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: src/process/supervisor/supervisor.test.ts, src/process/supervisor/adapters/child.test.ts, src/process/supervisor/adapters/pty.test.ts
  • Scenario the test should lock in: cancellation sends tree-aware SIGTERM with the same grace window, does not SIGKILL if the run settles, and still preserves no-detach safeguards so the gateway process group is not signaled.
  • Why this is the smallest reliable guardrail: the supervisor owns grace timing, while child/PTY adapters own process-tree signal semantics.
  • Existing test that already covers this (if any): kill-tree.test.ts already covers the underlying process-group/direct-pid behavior; this PR adds adapter-level coverage for SIGTERM using that path.
  • If no new test is added, why not: N/A

User-visible / Behavior Changes

Timed-out or cancelled exec/tool subprocesses now get a bounded 5s tree-aware SIGTERM cleanup window before SIGKILL. Processes or descendants that ignore SIGTERM are still force-killed by the existing process-tree path.

Diagram (if applicable)

Before first draft:
[timeout/cancel] -> [supervisor requests SIGKILL tree path]

First draft bug:
[timeout/cancel] -> [direct child SIGTERM] -> [parent exits] -> [descendant can survive]

After:
[timeout/cancel] -> [tree-aware SIGTERM with 5s grace]
                 -> [cleanup-capable tree exits]
                 -> [if still running after grace] -> [tree-aware SIGKILL]

Security Impact (required)

  • New permissions/capabilities? (Yes/No): No
  • Secrets/tokens handling changed? (Yes/No): No
  • New/changed network calls? (Yes/No): No
  • Command/tool execution surface changed? (Yes/No): Yes
  • Data access scope changed? (Yes/No): No
  • If any Yes, explain risk + mitigation: cancellation behavior changed in the command execution boundary. The mitigation is that SIGTERM now uses the existing process-tree kill helper and preserves detached:false safeguards before the bounded SIGKILL fallback.

Repro + Verification

Environment

  • OS: Linux throwaway test server checkout
  • Runtime/container: Node.js v22.22.2, pnpm via corepack
  • Model/provider: N/A
  • Integration/channel (if any): process supervisor child mode and PTY adapter unit coverage
  • Relevant config (redacted): no private tokens or external services used

Steps

  1. Run the proof script on old PR head e7ed7242ceb18783de1559d6dd700c973d2b726c to reproduce direct-child-only SIGTERM leaving a descendant alive.
  2. Apply the tree-aware adapter patch.
  3. Rerun the proof script and confirm the descendant receives SIGTERM and is no longer alive after wait.
  4. Run focused supervisor/adapter/runtime tests, formatting, lint, and typechecks.

Expected

  • Cleanup-capable direct child receives SIGTERM and exits cleanly before SIGKILL.
  • SIGTERM-ignoring direct child is later force-killed by SIGKILL.
  • Parent-exits/descendant case sends SIGTERM to the descendant and leaves no surviving descendant after wait.

Actual

  • Matches expected after this patch.

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Additional verification run on the same throwaway checkout after applying the patch:

node scripts/run-vitest.mjs src/process/supervisor/supervisor.test.ts src/process/supervisor/adapters/child.test.ts src/process/supervisor/adapters/pty.test.ts src/process/kill-tree.test.ts
Test Files 4 passed (4)
Tests 42 passed (42)

node scripts/run-vitest.mjs src/agents/bash-tools.exec-runtime.test.ts src/agents/bash-tools.exec-runtime.pty-fallback.test.ts src/agents/cli-runner.reliability.test.ts src/agents/bash-tools.process.supervisor.test.ts
Test Files 8 passed (8)
Tests 140 passed (140)

corepack pnpm exec oxfmt --check --threads=1 src/process/supervisor/types.ts src/process/supervisor/supervisor.ts src/process/supervisor/supervisor.test.ts src/process/supervisor/adapters/child.ts src/process/supervisor/adapters/child.test.ts src/process/supervisor/adapters/pty.ts src/process/supervisor/adapters/pty.test.ts
All matched files use the correct format.

git diff --check
passed

node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/process/supervisor/supervisor.ts src/process/supervisor/supervisor.test.ts src/process/supervisor/adapters/child.ts src/process/supervisor/adapters/child.test.ts
Found 0 warnings and 0 errors.

node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
passed

node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-test.tsbuildinfo
passed

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios: live timeout behavior before and after patch with real child processes; graceful SIGTERM cleanup; SIGTERM-ignore fallback to SIGKILL; parent-exits/descendant-survives regression red and green; focused supervisor/adapter tests; exec runtime tests; formatting; targeted lint; core typechecks.
  • Edge cases checked: cancellation passes the same grace value into tree-aware adapter cancellation; child adapter preserves detached:false behavior when spawn falls back to no-detach; PTY SIGTERM uses the process-tree path.
  • What you did not verify: Windows live runtime and production external agent integrations.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

No inline review threads exist. The top-level ClawSweeper finding about process-tree cancellation is addressed by the latest commit.

Compatibility / Migration

  • Backward compatible? (Yes/No): Yes
  • Config/env changes? (Yes/No): No
  • Migration needed? (Yes/No): No
  • If yes, exact upgrade steps: N/A

Risks and Mitigations

  • Risk: cancellation may keep process-tree cleanup work active for up to 5s before force kill.
    • Mitigation: fixed grace timer is passed to the tree-aware helper and SIGKILL fallback remains bounded.
  • Risk: detached:false runtimes must not group-kill the gateway process group.
    • Mitigation: child adapter keeps passing { detached: false } when spawn falls back to no-detach or service-managed mode disables detachment.

@openclaw-barnacle openclaw-barnacle Bot added size: S proof: supplied External PR includes structured after-fix real behavior proof. labels May 23, 2026
@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Latest ClawSweeper review: 2026-05-24 01:07 UTC / May 23, 2026, 9:07 PM ET.

Workflow note: Future ClawSweeper reviews update this same comment in place.

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.

PR Surface
Source +34, Tests +88. Total +122 across 8 files.

View PR surface stats
Area Files Added Removed Net
Source 5 42 8 +34
Tests 3 101 13 +88
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 8 143 21 +122

Summary
The branch adds a 5s supervisor cancellation grace window, threads optional graceMs through child and PTY adapters so SIGTERM uses killProcessTree, adds regression tests, and includes a tiny Signal monitor lint cleanup.

Reproducibility: yes. by source and supplied live proof, though I did not rerun it in this read-only review. Current main still hard-cancels through the supervisor path, and the PR body shows before/after Linux output for cleanup, fallback, and descendant behavior.

PR rating
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Summary: Strong real-process proof and a focused patch make this a good merge candidate after maintainer risk acceptance.

Rank-up moves:

  • none
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.

Real behavior proof
Sufficient (live_output): The PR body includes copied Linux live output before and after the patch showing graceful cleanup, SIGKILL fallback, and descendant cleanup after the tree-aware fix.

Risk before merge

  • Canceled command/process trees may now continue running for up to 5 seconds before hard termination, so maintainers should explicitly accept that command-execution boundary change.
  • The supplied live proof is Linux-focused; Windows runtime behavior and production external agent integrations were not exercised.
  • The broader drain-timeout and pipe-close watchdog ideas remain in Process supervisor: graceful signal escalation and drain timeout for exec tool #66399 and should not be considered solved by this PR.

Maintainer options:

  1. Proceed With Bounded Cancellation (recommended)
    Accept the 5s tree-aware grace window as the intended process-boundary tradeoff once the focused checks pass.
  2. Require Broader Runtime Proof
    Ask for Windows or packaged-agent runtime proof before merge if maintainers need confidence beyond the supplied Linux live output.
  3. Hold For Process-Owner Design
    Pause this PR if maintainers want drain-timeout or pipe-close behavior settled before changing timeout cancellation semantics.

Next step before merge
No automated repair is needed; the remaining action is maintainer review and explicit acceptance of the process-boundary and availability tradeoff.

Security
Cleared: No concrete security or supply-chain regression found; the diff adds no dependency, secret, network, workflow, or package-resolution change and keeps process termination on the existing tree-kill helper.

Review details

Best possible solution:

Land the narrow tree-aware SIGTERM grace fix after maintainer review and checks, while leaving the broader drain-timeout and pipe-close follow-up in the linked issue.

Do we have a high-confidence way to reproduce the issue?

Yes by source and supplied live proof, though I did not rerun it in this read-only review. Current main still hard-cancels through the supervisor path, and the PR body shows before/after Linux output for cleanup, fallback, and descendant behavior.

Is this the best way to solve the issue?

Yes. Threading a bounded grace option through the existing supervisor adapter contract is the narrow maintainable fix; the broader drain-timeout and pipe-close ideas should stay in the linked follow-up issue.

Label justifications:

  • P1: Process supervisor cancellation affects exec/tool subprocess cleanup and can affect active agent workflows during timeout or abort paths.
  • merge-risk: 🚨 security-boundary: The PR changes how long canceled command-execution processes may continue before force kill, which is part of the local command execution boundary.
  • merge-risk: 🚨 availability: The new grace window can keep process trees active for up to 5 seconds before hard termination and may affect shutdown, timeout, or restart latency.
  • rating: 🐚 platinum hermit: Current PR rating is 🐚 platinum hermit because proof is 🦞 diamond lobster, patch quality is 🐚 platinum hermit, and Strong real-process proof and a focused patch make this a good merge candidate after maintainer risk acceptance.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes copied Linux live output before and after the patch showing graceful cleanup, SIGKILL fallback, and descendant cleanup after the tree-aware fix.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied Linux live output before and after the patch showing graceful cleanup, SIGKILL fallback, and descendant cleanup after the tree-aware fix.

What I checked:

Likely related people:

  • steipete: Current main blame and file history show Peter Steinberger introduced the present process supervisor, child/PTY adapter, and kill-tree implementation in commit a705a9c9; the PR also mentions this code path as the affected boundary. (role: recent area contributor; confidence: high; commits: a705a9c911bc; files: src/process/supervisor/supervisor.ts, src/process/supervisor/adapters/child.ts, src/process/supervisor/adapters/pty.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against acf265d4d51d.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 23, 2026
@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Clockwork Signal Puff

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: stacks clean commits.
Image traits: location branch lighthouse; accessory shell-shaped keyboard; palette pearl, teal, and neon green; mood watchful; pose sitting proudly on a smooth stone; shell frosted glass shell; lighting gentle morning glow; background subtle branch markers.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Clockwork Signal Puff in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 23, 2026
@IWhatsskill

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 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 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 24, 2026
@IWhatsskill

Copy link
Copy Markdown
Contributor Author

@clawsweeper hatch

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper PR egg hatch requested.

I queued a comment sync for this PR. If the egg is hatchable, ClawSweeper will generate the image once and update the existing review comment.
Action: PR egg hatch queued (workflow sweep.yml, event repository_dispatch).
The ASCII egg stays as the fallback.

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper could not hatch this PR egg yet.

Reason: there is no current durable ClawSweeper review record for this PR, so there is no PR egg state record to update.
Ask for @clawsweeper re-review first, then retry @clawsweeper hatch after the ClawSweeper review comment appears.

@steipete
steipete force-pushed the fix/process-supervisor-graceful-timeout-66399 branch from c90757c to 8470ec5 Compare May 24, 2026 02:30
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 24, 2026
@steipete

Copy link
Copy Markdown
Contributor

Verification for 8470ec54edbb2126cf77e5d7f2414a247b7762f5:

Behavior addressed: process supervisor cancellation now owns the bounded SIGTERM cleanup window, then escalates to SIGKILL; child and PTY adapters send exact tree-aware signals without duplicating grace timers.
Real environment tested: local macOS checkout plus GitHub Actions Linux/Windows CI.
Exact steps or command run after this patch:

  • node scripts/run-vitest.mjs src/process/kill-tree.test.ts src/process/supervisor/supervisor.test.ts src/process/supervisor/adapters/child.test.ts src/process/supervisor/adapters/pty.test.ts
  • node scripts/run-vitest.mjs src/agents/bash-tools.exec-runtime.test.ts src/agents/bash-tools.exec-runtime.pty-fallback.test.ts src/agents/cli-runner.reliability.test.ts src/agents/bash-tools.process.supervisor.test.ts
  • git diff --check
  • pnpm exec oxfmt --check --threads=1 CHANGELOG.md src/process/kill-tree.ts src/process/kill-tree.test.ts src/process/supervisor/types.ts src/process/supervisor/supervisor.ts src/process/supervisor/supervisor.test.ts src/process/supervisor/adapters/child.ts src/process/supervisor/adapters/child.test.ts src/process/supervisor/adapters/pty.ts src/process/supervisor/adapters/pty.test.ts
  • node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/process/kill-tree.ts src/process/kill-tree.test.ts src/process/supervisor/supervisor.ts src/process/supervisor/supervisor.test.ts src/process/supervisor/adapters/child.ts src/process/supervisor/adapters/child.test.ts src/process/supervisor/adapters/pty.ts src/process/supervisor/adapters/pty.test.ts
  • node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
  • node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-test.tsbuildinfo
  • .agents/skills/autoreview/scripts/autoreview --mode local
    Evidence after fix: focused process/supervisor tests passed after rebase, adjacent exec-runtime tests passed before the final changelog-only rebase resolution, oxfmt/oxlint/tsgo/diff-check passed, and autoreview reported no accepted/actionable findings.
    Observed result after fix: GitHub run 26349729759 completed successfully, including checks-windows-node-test; secondary runs 26349729750, 26349729760, 26349729761, 26349729763, 26349728879, and 26349735904 completed successfully.
    What was not tested: no live packaged external-agent integration beyond PR proof and CI; the touched behavior is covered by focused unit/regression tests and CI matrix proof.

@steipete
steipete merged commit b13166b into openclaw:main May 24, 2026
100 of 101 checks passed
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
…5865)

* fix: gracefully escalate supervisor cancellations

* fix: preserve process-tree cancellation during grace

* fix: satisfy signal monitor allSettled lint

* fix(process): split graceful cancel signal escalation

---------

Co-authored-by: JARVIS-Glasses <[email protected]>
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

channel: signal Channel integration: signal merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. 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.

2 participants