$ the-wire · showcase
Session overwrites fenced, provider cleanup hardened, main unblocked
By RepoJournal · Filed · About OpenClaw
OpenClaw fixed a concurrency bug where session updates could overwrite newer state, and Crabbox hardened cleanup across Vast and Cloudflare to stop orphaning billed instances.
OpenClaw fixed a data-loss bug in session handling: concurrent session recovery or model-selection updates could silently overwrite newer session metadata, and a replacement prepared for one owner could commit after another actor took ownership [1]. The fix captures each authoritative SQLite session row and its hydrated session entry as one immutable replacement snapshot, so stale updates no longer clobber concurrent changes. On macOS, named app profiles now stay inside their own managed state tree unless the operator explicitly selects a development checkout; previously, a fresh isolated remote profile without a CLI could silently discover the default development checkout and spawn its source worker, rebuilding unrelated user files [2]. Direct remote Gateway failures now report the actual selected endpoint instead of an unrelated local port and SSH-tunnel advice, while preserving SSH/local guidance and bracketing IPv6 endpoints.
Crabbox continued its cross-provider acquisition audit. On Vast, ambiguous creates previously had no recovery: if CreateInstance failed after send or returned a success-shaped response without an instance ID, cleanup deleted the local SSH key and recorded nothing, orphaning a possibly-billed instance [3]. That path now records ambiguous creates and surfaces rollback claim failures. On Cloudflare dynamic workers, an uncertain provider-side completion previously skipped cleanup without forcing retention or persisting a claim, so a run could report Kept=false while unreconciled provider state remained; uncertain completions now always report kept and persist a recovery claim labeled recovery=uncertain-lifecycle so list/cleanup can reconcile [4]. DigitalOcean Droplet cleanup is now fenced with exact claim locking, provider/account identity revalidation, instance-first deletion, and retry-safe retained state, and never deletes account SSH keys from the legacy compatibility path [5].
Main is unblocked after a UI test suite split: ui/src/pages/cron/view.test.ts exceeded eslint max-lines and made check-lint-core-5 fail on every run, blocking the merge gate repo-wide [6]. The oversized cron view suite was split so every PR since no longer inherits the failure. First-run setup also improved: the Control UI no longer downloads and initializes the entire Chat workspace before discarding it for the Model Setup redirect, so fresh Gateways no longer briefly show "No models available" [7]. CLI skills commands that fail with --json now emit a proper single-document JSON error instead of an empty stdout stream, fixing skills search, list, info, check, and the default report [8].
Action items
- → Deploy the openclaw session-overwrite fix before next release to prevent silent metadata loss openclaw/openclaw [immediate]
- → Review Crabbox Vast and Cloudflare cleanup paths for any runs that may have orphaned billed instances openclaw/crabbox [plan]
- → Update affected CLI scripting to expect JSON error output from skills commands on failure openclaw/openclaw [plan]
- → Monitor the cron view suite split to confirm main stays green openclaw/openclaw [monitor]
References
- [1] fix: session updates overwrite concurrent state or new owners ↗ openclaw/openclaw
- [2] fix(macos): isolate profiles and report direct Gateway failures ↗ openclaw/openclaw
- [3] fix(vast): record ambiguous creates and surface rollback claim failures ↗ openclaw/crabbox
- [4] fix(cloudflare-dynamic-workers): retain evidence for uncertain lifecycle completions (#1439) ↗ openclaw/crabbox
- [5] fix(provider): fence DigitalOcean cleanup with exact claims (#1436) ↗ openclaw/crabbox
- [6] test(ui): split the oversized cron view suite to unbreak main ↗ openclaw/openclaw
- [7] improve(ui): skip discarded workspace loading during first-run setup ↗ openclaw/openclaw
- [8] fix(cli): render skills JSON failures ↗ openclaw/openclaw