fix(workspace): `/workspace` Sync and Unlink can race — no shared lock in `manage.ts`

Open
#1,322 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
typescript
Domain
cli

Research direction

Start in packages/opencode/src/altimate/workspace/manage.ts by tracing sync, unlink, and refresh, then inspect how packages/opencode/src/plugin/tui/altimate/workspace.tsx reflects their state. Define how a shared lock or busy state coordinates these operations and how the menu prevents conflicting actions. Done means concurrent Sync and Unlink no longer overlap and their toasts remain consistent with the completed operation.

Written by the indexing model from the issue text.

Description

Selecting Sync in the /workspace menu closes the dialog and runs Manage.sync() in the background; reopening the menu and selecting Unlink runs Manage.unlink() concurrently. The in-flight sync can push memory blocks to, or fail against, a workspace that is being unbound at the same moment, and the two toasts can land in a confusing order ("Synced 3 memories" after "Unlinked from X").

Blast radius is low — memory pushes are idempotent and unlink resets the overlay unconditionally — but it is a real race two keystrokes can trigger. Fix is a cross-operation lock (or "busy" state) in packages/opencode/src/altimate/workspace/manage.ts that the menu in packages/opencode/src/plugin/tui/altimate/workspace.tsx reflects.

Found during the v0.12.0 release review (end-user persona). Deferred because: needs a lock design across sync/unlink/refresh, not a wording change.

🤖 Generated with Claude Code

https://claude.ai/code/session_012Q51zFUmPg1WwtS5CrGJE6

Dominant language
TypeScript
Stars
813
Forks
134
Avg merge
2d 15h
Merged PRs (30d)
53

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from AltimateAI/altimate-code

All issues in AltimateAI/altimate-code

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.