Description
Description
When nemoclaw onboard is interrupted (SIGINT / Ctrl+C) after Step 3 (provider_selection) but before Step 6 (sandbox creation), the sandbox name is already recorded in onboard-session.json. After interruption, nemoclaw list reads this stale session entry and displays the sandbox as if it exists, even though no sandbox was ever created in the OpenShell gateway.
Environment
Device: Ubuntu 24.10 server (10.176.176.140)
OS: Ubuntu 24.10 (Linux 6.11.0-18-generic x86_64)
Architecture: x86_64
Node.js: v22.22.2
npm: 10.9.7
Docker: 28.4.0
OpenShell CLI: 0.0.36
NemoClaw: v0.0.31
OpenClaw: v2026.4.24
Steps to Reproduce
1. Start onboard for a new sandbox in the background:
NEMOCLAW_NON_INTERACTIVE=1 \
NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1 \
NVIDIA_API_KEY=nvapi-... \
nemoclaw onboard --name interrupt-test --non-interactive &
ONBOARD_PID=$!
2. Wait ~12 seconds (past Step 3 provider_selection, before Step 6 sandbox image build):
sleep 12 && kill -SIGINT $ONBOARD_PID && wait $ONBOARD_PID
3. Run:
nemoclaw list
Expected Result
nemoclaw list does NOT contain "interrupt-test" — the sandbox was never created, so it should not appear in the inventory.
Actual Result
nemoclaw list shows "interrupt-test" via onboard session recovery:
Sandboxes:
interrupt-test
The entry persists until the user manually destroys it or clears the session.
Root Cause
1. src/lib/onboard.ts:7532 — startRecordedStep("provider_selection", { sandboxName }) writes
sandboxName to onboard-session.json during Step 3, before the sandbox is created in Step 6.
2. src/lib/inventory-commands.ts:74-98 — nemoclaw list calls loadLastSession(). If sandboxes.json
has no entry but the session has a sandboxName, it displays the name via the recovery path
"Recovered sandbox inventory from the last onboard session."
3. There is no SIGINT cleanup handler that removes sandboxName from onboard-session.json or
verifies the sandbox actually exists in the gateway before showing it.
Suggested fix: either write sandboxName to session only after sandbox creation is confirmed,
or validate the session-recovered sandbox against the live gateway before displaying it.
Logs
Verified manually on 10.176.176.140 (NemoClaw v0.0.31) and reproduced in CI job.
Bug Details
| Field |
Value |
| Priority |
Unprioritized |
| Action |
Dev - Open - To fix |
| Disposition |
Open issue |
| Module |
Machine Learning - NemoClaw |
| Keyword |
NemoClaw, NEMOCLAW_GH_SYNC_APPROVAL, NemoClaw_Onboard, NemoClaw_Sandbox |
[NVB#6130391]
Description
Description
Environment Steps to Reproduce Expected Result Actual Resultnemoclaw list shows "interrupt-test" via onboard session recovery: Sandboxes: interrupt-test The entry persists until the user manually destroys it or clears the session.Root Cause1. src/lib/onboard.ts:7532 — startRecordedStep("provider_selection", { sandboxName }) writes sandboxName to onboard-session.json during Step 3, before the sandbox is created in Step 6. 2. src/lib/inventory-commands.ts:74-98 — nemoclaw list calls loadLastSession(). If sandboxes.json has no entry but the session has a sandboxName, it displays the name via the recovery path "Recovered sandbox inventory from the last onboard session." 3. There is no SIGINT cleanup handler that removes sandboxName from onboard-session.json or verifies the sandbox actually exists in the gateway before showing it. Suggested fix: either write sandboxName to session only after sandbox creation is confirmed, or validate the session-recovered sandbox against the live gateway before displaying it.LogsBug Details
[NVB#6130391]