fix(workspace): `/workspace` Sync and Unlink can race — no shared lock in `manage.ts`
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
- Dominant language
- TypeScript
- Stars
- 813
- Forks
- 134
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 62
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from AltimateAI/altimate-code
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
AltimateAI/altimate-code#1323 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
AltimateAI/altimate-code#1288 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 92/100
AltimateAI/altimate-code#1285 ·
-
privacy: Altimate Base consent dialog no longer discloses persistent per-installation identifier Open
Difficulty 1/5 Under an hour Newbie friendliness 88/100
AltimateAI/altimate-code#1284 ·
-
Difficulty 2/5 Under an hour Newbie friendliness 72/100
AltimateAI/altimate-code#1283 ·
All issues in AltimateAI/altimate-code
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
copse-dev/agent-pane#2953 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
bug clawsweeper:linked-pr-open clawsweeper:needs-live-repro clawsweeper:no-new-fix-pr impact:message-loss issue-rating: 🐚 platinum hermit P2 regression
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
calcite-components needs triage refactor
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Esri/calcite-design-system#15203 ·