[All Platforms][Sandbox] rebuild refuses with "different recreate transaction in progress" when an unrelated sandbox has an incomplete rebuild
- Dominant language
- TypeScript
- Stars
- 22.5k
- Forks
- 3.1k
- Avg merge
- 1d 43m
- Merged PRs (30d)
- 718
Description
## Description
`nemoclaw {sandbox} rebuild` refuses to run against a healthy, Ready sandbox with the error "has a different recreate transaction in progress" whenever a completely different, unrelated sandbox on the same host has an incomplete rebuild transaction recorded - even though the sandbox actually being rebuilt has no pending transaction of its own. The error message names the sandbox being rebuilt, not the sandbox whose transaction is actually still open, which makes the message actively misleading.
Platform scope: All Platforms -- reproduced on DGX Spark, but root cause is a host-wide shared onboard-session.json file (not scoped per sandbox) with no platform/hardware dependency; expected to reproduce identically on any platform.
Regression: Unknown - earlier versions not tested this session.
## Environment
```text
Device: DGX Spark
OS: Ubuntu (aarch64)
Architecture: aarch64
Node.js: v22.22.1
npm: 10.9.4
Docker: 28.3.3 (build 980b856)
OpenShell CLI: openshell 0.0.106
NemoClaw: v0.0.121
OpenClaw: 2026.7.1 (2d2ddc4)
```
## Steps to Reproduce
1. On a host with two independent, healthy Ready sandboxes (call them A and B), cause sandbox A's rebuild to fail partway through in a way that leaves its recreate transaction incomplete (in this case, an unrelated MCP-bridge-restore failure during a bulk sandbox-upgrade run left sandbox A's transaction at an incomplete phase).
2. Confirm sandbox B is completely healthy and Ready: `nemoclaw B status` reports Phase: Ready and healthy inference.
3. Run: `nemoclaw B rebuild --yes`
4. Observe the failure, then separately finish sandbox A's own interrupted rebuild to completion: `nemoclaw A rebuild --yes` (this one succeeds).
5. Immediately re-run the exact same command from step 3 again with no other change: `nemoclaw B rebuild --yes`
## Expected Result
Step 3 should succeed (or fail for a reason specific to sandbox B) since sandbox B itself has no incomplete transaction.
## Actual Result
Step 3 fails every time with:
```text
Error: Sandbox 'B' has a different recreate transaction in progress; resume or repair that transaction before changing its target.
```
Sandbox B's own state backup step completes successfully immediately before this error, confirming B itself is reachable and fine - the error is not about B's own state.
Step 5, run immediately after unrelated sandbox A's own rebuild finally completes (with zero changes to sandbox B in between), succeeds immediately with the identical command that failed twice before.
This confirms the "different recreate transaction in progress" check is not actually scoped to the sandbox being rebuilt - it is blocked by ANY other sandbox's incomplete transaction on the same host, and the error message incorrectly names the sandbox that was actually requested rather than the sandbox whose transaction is really still open.
## Logs
```text
$ nemoclaw B rebuild --yes
Backing up sandbox state...
State backed up (11 directories, 1 files)
Error: Sandbox 'B' has a different recreate transaction in progress; resume or repair that transaction before changing its target.
(retried after sandbox A's own rebuild completed, no other change)
$ nemoclaw B rebuild --yes
Backing up sandbox state...
State backed up (11 directories, 1 files)
Deleting old sandbox...
Sandbox 'B' created
...
Sandbox 'B' rebuild completed
```
Contributor guide
Research direction
Start by tracing `nemoclaw {sandbox} rebuild` and how it checks the host-wide `onboard-session.json` recreate transaction; the issue does not name a source file or test. Reproduce with two sandboxes, leaving A's rebuild incomplete before rebuilding B. Done when B is no longer blocked by A's unrelated transaction and the error identifies the sandbox whose transaction is open.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- cli, infrastructure
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 66/100