Skip to content

fix: race condition in parallel PostToolUse hooks#14

Open
deiviuds wants to merge 2 commits intomemvid:mainfrom
deiviuds:main
Open

fix: race condition in parallel PostToolUse hooks#14
deiviuds wants to merge 2 commits intomemvid:mainfrom
deiviuds:main

Conversation

@deiviuds
Copy link
Copy Markdown

Summary

Fixes #13 - Race condition where parallel PostToolUse hooks corrupt the mind.mv2 file.

Root Cause

When Claude Code makes parallel tool calls, multiple post-tool-use.js processes spawn simultaneously. Each process had its own memvid SDK handle with stale internal state, causing file corruption.

Solution

  1. File Locking - Added memvid-lock.ts using proper-lockfile to serialize writes
  2. Fresh SDK State - Re-open memvid inside the lock for every write operation
  3. Cross-Process Deduplication - Added dedup.ts to prevent duplicate observations from parallel hooks
  4. Session Persistence - Added session.ts for consistent session IDs across hook invocations
  5. Source Tracking - Added source field to distinguish claude-code vs opencode observations

Testing

  • Added unit tests for dedup.ts (5 tests)
  • Added unit tests for session.ts (13 tests)
  • Enhanced mind-lock.test.ts with concurrent write tests (4 tests)
  • All 23 tests passing

Changes

  • src/core/mind.ts - Re-open memvid inside lock for writes
  • src/hooks/post-tool-use.ts - Use dedup and session utilities
  • src/hooks/session-start.ts - Write session info at start
  • src/utils/dedup.ts - Cross-process deduplication (new)
  • src/utils/session.ts - Session persistence (new)
  • src/__tests__/dedup.test.ts - Dedup tests (new)
  • src/__tests__/session.test.ts - Session tests (new)

- Add file locking via memvid-lock.ts to prevent concurrent writes
- Re-open memvid inside lock for every write to ensure fresh SDK state
- Add cross-process deduplication (dedup.ts) to prevent duplicate observations
- Add session persistence (session.ts) for consistent session IDs across hooks
- Add source tracking to distinguish claude-code vs opencode observations
- Add unit tests for dedup.ts and session.ts utilities

Fixes memvid#13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Race condition: parallel PostToolUse hooks corrupt mind.mv2 file

1 participant