## How OpenClaw tries to update
When you run (or the cron runs):
- openclaw gateway update.run
…the updater (implemented in that update-runner.ts) roughly does:
1. Find the git repo root (your /Users/stv/openclaw)
2. git fetch / check out the target tag/commit
3. Install deps (pnpm install or whatever package manager it detects)
4. Build (pnpm build)
5. Build the Control UI assets (pnpm ui:build) → this generates dist/control-ui
6. Then it does “restore control-ui”: git checkout -- dist/control-ui/
- intention: UI build produces hashed assets and would leave the repo “dirty”, which would block future updates
- so they try to reset that directory back to the committed state
### Why it keeps failing for you
Because at the commit you’re on (57c34a32, ca47b0d7, etc.), git doesn’t know about dist/control-ui/ (not tracked / not present), so git checkout -- dist/control-ui/ errors and the whole update is marked
failed.
If you want, I can also point you to the exact line numbers in update-runner.ts and we can decide whether the right fix is:
- make dist/control-ui tracked again (if that was intended), or
- change the updater to not run that checkout when the path isn’t tracked.
## How OpenClaw tries to update
When you run (or the cron runs):
- openclaw gateway update.run
…the updater (implemented in that update-runner.ts) roughly does:
1. Find the git repo root (your /Users/stv/openclaw)
2. git fetch / check out the target tag/commit
3. Install deps (pnpm install or whatever package manager it detects)
4. Build (pnpm build)
5. Build the Control UI assets (pnpm ui:build) → this generates dist/control-ui
6. Then it does “restore control-ui”: git checkout -- dist/control-ui/
- intention: UI build produces hashed assets and would leave the repo “dirty”, which would block future updates
- so they try to reset that directory back to the committed state
### Why it keeps failing for you
Because at the commit you’re on (57c34a32, ca47b0d7, etc.), git doesn’t know about dist/control-ui/ (not tracked / not present), so git checkout -- dist/control-ui/ errors and the whole update is marked
failed.
If you want, I can also point you to the exact line numbers in update-runner.ts and we can decide whether the right fix is:
- make dist/control-ui tracked again (if that was intended), or
- change the updater to not run that checkout when the path isn’t tracked.