{{ message }}
Repository navigation
Conversation
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Contributor
Contributor
There was a problem hiding this comment.
If Node is absent from the remote PATH, this unconditional call makes the first process check exit with 127. The monitor then rejects with probe_failed, even while the runner is still working.
The existing launch path allows this setup: REMOTE_RUNNER_CHILD_LAUNCH_SCRIPT leaves the fingerprint empty when Node fails, and the normal launcher does not require a fingerprint. Previously, that path used shell commands alone for monitoring. Preserve it, or ensure Node is available before starting the runner. Add a regression test with Node absent from the remote PATH.
Prompt To Fix With AI
This is a comment left during a code review.
Path: server/src/services/native-runtime/remote-runner-recovery-diagnostics.ts
Line: 109
Comment:
**Supervision now requires Node**
If Node is absent from the remote `PATH`, this unconditional call makes the first process check exit with 127. The monitor then rejects with `probe_failed`, even while the runner is still working.
The existing launch path allows this setup: `REMOTE_RUNNER_CHILD_LAUNCH_SCRIPT` leaves the fingerprint empty when Node fails, and the normal launcher does not require a fingerprint. Previously, that path used shell commands alone for monitoring. Preserve it, or ensure Node is available before starting the runner. Add a regression test with Node absent from the remote `PATH`.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Thinking Path
Linked Issues or Issue Description
Refs: #16835. That change requires confirmed exit before remote replacement. This change covers normal exits during those checks. I searched for related exit, fingerprint, zombie and ESRCH fixes. I found no equivalent open or merged change.
What happened?
A remote Runner can exit after the first liveness check. Its command line or process stat can disappear before the next read. The old check reports
process_identity_changed,fingerprint_unavailable, or a generic probe failure. The active monitor cannot confirm exit. It can retain execution ownership after the Runner has returned its result. A matching zombie also has an empty command line and is rejected as an identity change.Expected behavior
Confirm exit when a fresh signal-zero check returns ESRCH. Also confirm exit for a zombie whose boot identity and start ticks match the saved generation. Keep read failures and permission failures uncertain. Reject changed ownership markers and reused PIDs before any signal.
Steps to reproduce
The regression tests also retire the child during the command-line read and supply a matching zombie stat fixture.
Paperclip version or commit
The patch is based on
8b873e01121a80e563a8a02bf6a3219783de5476.Deployment mode
Remote Runner process supervision. The Linux probes were tested in a disposable Linux/amd64 container. The fault tests need no model provider or sandbox account.
What Changed
Verification
pnpm exec vitest run server/src/services/native-runtime/native-session-executor.test.ts server/src/services/native-runtime/remote-runner-recovery-diagnostics.test.tspasses all 798 tests. This includes the unchanged supervision and adoption cases.pnpm --filter @paperclipai/server exec tsc --noEmitpasses.pnpm --filter @paperclipai/server exec tscpasses.git diff --checkpasses.pnpm -r typecheckandpnpm buildstop because this machine has no Cargo. The server package's normal typecheck and build wrappers also stop when their vendor preparation calls that Rust build. The direct server TypeScript checks above pass after dependency builds. No full build or full-suite pass is claimed. The full test suite was not run because its Runner integration cases require the missing Rust binary.Risks
isAlive()boolean interface. It does not add propagation of an unknown state through its existing callers.Model Used
OpenAI GPT-6 through Codex, with reasoning, tool use, code edits and test execution. The session does not expose the exact serving model ID or context-window size.
Checklist
Fixes: #/Closes #/Refs #OR (b) described the issue in-PR following the relevant issue template#NNN/github.com/paperclipai/paperclipURLs)docs/...,fix/...) and contains no internal Paperclip ticket id or instance-derived details