NVIDIA / NVIDIA/NemoClaw

blueprint rollback and reconcile report an unreadable run directory as a missing run

Open Beginner friendly
#10,430 1 comment 0 reactions 0 assignees View on GitHub
area: cli
Dominant language
TypeScript
Stars
22.5k
Forks
3.1k
Avg merge
1d 1h
Merged PRs (30d)
715

Description

### What happens

`actionRollback` and `actionReconcile` report every failure to read the run directory as a
missing run, so a run that exists but cannot be read is described as absent.

Both sites are byte-identical. `nemoclaw/src/blueprint/runner.ts:2639-2643` (`actionRollback`)
and `nemoclaw/src/blueprint/runner.ts:2521-2525` (`actionReconcile`):

```
try {
readdirSync(stateDir);
} catch {
throw new Error(`Run ${rid} not found.`);
}
```

The `catch` is unconditional. `EACCES` on the run directory — wrong ownership, a restrictive
umask, a directory written by another user — produces `Run nc-run-1 not found.`

The operator is then told to look for a run that is sitting right there. They go hunting for
missing state, or re-run the blueprint, when the actual problem is a permission on a directory
that exists.

### Why this looks like drift rather than a decision

Discriminating `ENOENT` is established practice here — **79 files** do it, including one in this
same blueprint tree, `nemoclaw/src/blueprint/private-networks.ts:77`:

```
function isNodeEnoent(err: unknown): boolean {
return err instanceof Error && "code" in err && err.code === "ENOENT";
}
```

So the pattern was available and is already used a few files away.

The bare `catch` arrived with **#772 (`385d6b047`), `refactor: convert blueprint Python modules
to TypeScript`** — a mechanical port, where a bare `except` becomes a bare `catch` without anyone
deciding that an unreadable directory should be reported as missing. The second copy in
`actionReconcile` was added later, duplicating the same shape.

### Environment

macOS 26.5.1 (25F80), Node v26.7.0, `main` at `152758793`.

Contributor guide

Open the contributing guide

Research direction

Read nemoclaw/src/blueprint/runner.ts at actionReconcile lines 2521-2525 and actionRollback lines 2639-2643, then compare the error check in nemoclaw/src/blueprint/private-networks.ts:77. Confirm the behavior for a missing run versus an unreadable existing directory, and verify both actions report those cases distinctly.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
cli
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.