Context
During the resolution of the boot-time identity race condition in #10241, we empirically proved that the failure mode (where GraphService.getNode failed to find identity nodes during MCP server boot, despite the nodes existing in SQLite) was caused by cross-process WAL lock contention between the Antigravity hardlinked SQLite process and the Claude Code process.
The primary remediation, applying pragma busy_timeout = 5000 to the SQLite connection, entirely resolved the issue.
The Problem
The learn/agentos/tooling/MemoryCoreMcpAuth.md troubleshooting section currently lacks documentation of this specific failure mode (SQLite lock contention leading to silent bindAgentIdentity failures at boot).
The Architectural Reality
The Neo.mjs MCP server swarm architecture connects multiple independent agent processes to a single shared .neo-ai-data/sqlite/memory-core-graph.sqlite file. Under concurrent boot conditions, read operations like GraphService.getNode({id: graphNodeId}) may fail if another process is holding an exclusive write lock (SQLITE_BUSY) and no busy_timeout is configured.
The Fix
Extend learn/agentos/tooling/MemoryCoreMcpAuth.md §Troubleshooting with a paragraph documenting this failure mode.
Acceptance Criteria
Out of Scope
- Making changes to the
GraphService or Server codebase. This ticket is strictly documentation.
Avoided Traps
- Re-derivation of the retry pattern: The documentation must emphasize that adding arbitrary retry loops masks the underlying
SQLITE_BUSY error. The busy_timeout mechanism is the correct, native SQLite solution.
Related
- Resolves the documentation chore from #10241
- #10242 (The PR that implemented the fix)
Origin Session ID: 1c5933cc-a2d0-4296-ae3f-f4e815d385a2
Context
During the resolution of the boot-time identity race condition in #10241, we empirically proved that the failure mode (where
GraphService.getNodefailed to find identity nodes during MCP server boot, despite the nodes existing in SQLite) was caused by cross-process WAL lock contention between the Antigravity hardlinked SQLite process and the Claude Code process.The primary remediation, applying
pragma busy_timeout = 5000to the SQLite connection, entirely resolved the issue.The Problem
The
learn/agentos/tooling/MemoryCoreMcpAuth.mdtroubleshooting section currently lacks documentation of this specific failure mode (SQLite lock contention leading to silentbindAgentIdentityfailures at boot).The Architectural Reality
The Neo.mjs MCP server swarm architecture connects multiple independent agent processes to a single shared
.neo-ai-data/sqlite/memory-core-graph.sqlitefile. Under concurrent boot conditions, read operations likeGraphService.getNode({id: graphNodeId})may fail if another process is holding an exclusive write lock (SQLITE_BUSY) and nobusy_timeoutis configured.The Fix
Extend
learn/agentos/tooling/MemoryCoreMcpAuth.md§Troubleshooting with a paragraph documenting this failure mode.Acceptance Criteria
learn/agentos/tooling/MemoryCoreMcpAuth.mddocumenting the boot-time identity race condition.pragma busy_timeout = 5000as the architectural solution to cross-process SQLite WAL lock contention.Out of Scope
GraphServiceorServercodebase. This ticket is strictly documentation.Avoided Traps
SQLITE_BUSYerror. Thebusy_timeoutmechanism is the correct, native SQLite solution.Related
Origin Session ID: 1c5933cc-a2d0-4296-ae3f-f4e815d385a2