Repository navigation
Conversation
steipete
marked this pull request as ready for review
August 30, 2026 18:11
This was referenced Sep 1, 2026
steipete
added a commit
to openclaw/openclaw
that referenced
this pull request
Sep 1, 2026
Adopt the reviewed VM-local SSH activity fix from useblacksmith/run-testbox#15 through an immutable temporary fork pin in the three Linux Testbox workflows. Keep existing idle and job limits unchanged. Track premature lease expiry: #134718
steipete
added a commit
to openclaw/openclaw
that referenced
this pull request
Sep 1, 2026
Adopt the reviewed VM-local SSH activity fix from useblacksmith/run-testbox#15 through an immutable temporary fork pin in the three Linux Testbox workflows. Keep existing idle and job limits unchanged. Track premature lease expiry: #134718
steipete
added a commit
to openclaw/openclaw
that referenced
this pull request
Sep 1, 2026
* fix(ci): keep active Testbox commands alive past idle timeout Adopt the reviewed VM-local SSH activity fix from useblacksmith/run-testbox#15 through an immutable temporary fork pin in the three Linux Testbox workflows. Keep existing idle and job limits unchanged. Track premature lease expiry: #134718 * test(ci): align Testbox handoff contracts with reviewed action Keep TruffleHog provisioning ordered before the named handoff, pin the reviewed Linux action, and separately retain the disabled Windows vendor marker. Follow up the active lease-expiry fix: #134725 * test(ci): cover doctor runtime preparation selection
github-actions Bot
pushed a commit
to Desicool/openclaw
that referenced
this pull request
Sep 2, 2026
…aw#134725) * fix(ci): keep active Testbox commands alive past idle timeout Adopt the reviewed VM-local SSH activity fix from useblacksmith/run-testbox#15 through an immutable temporary fork pin in the three Linux Testbox workflows. Keep existing idle and job limits unchanged. Track premature lease expiry: openclaw#134718 * test(ci): align Testbox handoff contracts with reviewed action Keep TruffleHog provisioning ordered before the named handoff, pin the reviewed Linux action, and separately retain the disabled Windows vendor marker. Follow up the active lease-expiry fix: openclaw#134725 * test(ci): cover doctor runtime preparation selection
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.
What Problem This Solves
Testbox idle detection compares local socket output with the externally forwarded client port. A long-running command can therefore go uncounted after its one-time activity marker becomes old, even while SSH remains connected.
Two isolated live reproductions used Blacksmith CLI 0.4.57 through Crabbox with a one-minute idle limit. Both observed advertised port 64000, local SSH port 22, an established connection throughout, no match from the action's original socket pipeline, and an unchanged activity marker. The action reported idle completion anyway:
Both leases were independently verified completed. The hosting job's success is not command-success evidence.
Why This Change Was Made
Keep activity detection with its lifecycle owner,
run-testbox: resolve all local sshd listener ports withsudo -n sshd -T, then query established connections usingss's local-source-port filter. Preserve the forwarded port in connection information and phone-home data. Inspection failure fails the action rather than silently treating unknown activity as idle.This removes the broad advertised-port grep, including accidental matches on unrelated peer ports. It does not add a client heartbeat, change idle/test timeouts, change providers, or modify any application tests. Action implementation delta: +13/-2 lines; executable test coverage: +121 lines; test workflow wiring: +3 lines.
User Impact
The intended behavior is that connected noninteractive commands, interactive sessions, and rsync transfers keep the Testbox alive; idle leases still expire normally. The command's exit status and reports remain authoritative for command results. The README makes the hosting-job/command-result distinction explicit.
Evidence
python3 -m unittest discover -s tests -v: five test methods pass, covering default/non-default/multiple listeners, marker fallback, idle expiry, unrelated peer ports, and failed inspection.yamllint -d relaxed action.yml: passed.actionlint .github/workflows/test.ymlandgit diff --check: passed.ControlMaster=autoandControlPersist=300. An allowlisted argv observer exec'd the unchanged system SSH, while passivelsofobservations of the owned endpoint showed the persistent master still established294s after command return, absent at309s, and the lease completed at340s. No SSH options were changed and no additional SSH probe refreshed activity. The action logged its one-minute idle expiry and the hosting job completed successfully.The tested action revision is
7aeb7bab6f521ca30924d7dbf1fd47d6fcada294; current PR head2b6b1be536ec7f3c73757fedf5460a27ab4856b4differs only in the README clarification. Action and test bytes are unchanged. Upstream CI run33327156834 isaction_required, awaiting maintainer approval of the fork workflow—not a passing CI claim. No merge or release has occurred.The motivating application proof also had untimestamped Vitest worker IPC EPIPE errors. Their worker-exit cause and ordering against lease expiry remain unproved; this PR does not claim to fix or explain those errors.