Problem
2026-09-03 實測:本機同時有 14 個 /Users/che/bin/ltm mcp 行程,全部掛在 Claude Code 的 claude bg-spare 預熱 session 之下(ps -axo pid,ppid,command 對照 parent),存活 2 分鐘到 19 小時不等,其中 7 個仍是 v0.3.0 的舊映像(binary 換 inode 後舊行程照跑)。
每個行程在第一次 ltm_query 時都會跑 refreshIncrementally()(Sources/LTMService/LTMService.swift:819,無條件)。語料一有大量新檔(本日 174 MB/11,935 chunk),第一個拿到 build lock 的行程花 2 分 32 秒併入;其餘行程的首查若在同一窗口,會排隊等鎖(#53 決定鎖全程持有)。同一份工作只會被做一次(後到者拿到鎖時語料已是新的),但等待本身 會讓那些 session 的第一次 MCP 呼叫卡住數分鐘,而 MCP client 端看到的只是沒有回應。
更正(2026-09-07 diagnose) :建置鎖是 flock(LOCK_EX | LOCK_NB),拿不到鎖的行程不等 ,立即用既有索引作答並附警告(fixture 實測 0.10 s)。「排隊等鎖數分鐘」不會發生;剩下的問題是 MCP 路徑首查的併入無界(見 Diagnosis)。
Type
bug(多行程情境下的延遲放大;不涉及正確性——鎖語意是對的)
Expected
先量:同時 N 個 ltm mcp 首查時,第 2..N 個的等待分佈(可用 fixture 語料+人為 backlog 重現,不對真實索引做實驗)。
決定是否需要:(a) 查詢前併入加有界等待(拿不到鎖就用既有索引作答並在回應附「索引落後」警告——MCP 回應仍缺 sourcesUnreadable 與 skipped——與 CLI 的 refresh 診斷只對齊了一半 #54 已有警告通道);(b) 或 主動回想(proactive recall):要不要用 hook 讓 ltm 自動提醒或自動查詢——設計決定 #64 討論中的 --no-refresh/--max-refresh-seconds 同時服務這裡。
不變式 2 不動:任何「用舊索引作答」都要在回應裡說明,不得靜默。
Actual
所有行程無條件併入、無界等鎖;多 session 機器上第一次呼叫的延遲取決於別的 session 有沒有先付過那筆成本。
相關
Source : surfaced during /idd-diagnose #64 sister concern surfacing (Step 3.6)
Current Status
Phase : diagnosed
Updated : 2026-09-07(diagnosis 已 post;前提更正;Complexity Plan;Conflict Class A)
Dashboard : (見 dashboard comment)
Tasks
Problem
2026-09-03 實測:本機同時有 14 個
/Users/che/bin/ltm mcp行程,全部掛在 Claude Code 的claude bg-spare預熱 session 之下(ps -axo pid,ppid,command對照 parent),存活 2 分鐘到 19 小時不等,其中 7 個仍是 v0.3.0 的舊映像(binary 換 inode 後舊行程照跑)。每個行程在第一次
ltm_query時都會跑refreshIncrementally()(Sources/LTMService/LTMService.swift:819,無條件)。語料一有大量新檔(本日 174 MB/11,935 chunk),第一個拿到 build lock 的行程花 2 分 32 秒併入;其餘行程的首查若在同一窗口,會排隊等鎖(#53 決定鎖全程持有)。同一份工作只會被做一次(後到者拿到鎖時語料已是新的),但等待本身會讓那些 session 的第一次 MCP 呼叫卡住數分鐘,而 MCP client 端看到的只是沒有回應。Type
bug(多行程情境下的延遲放大;不涉及正確性——鎖語意是對的)
Expected
ltm mcp首查時,第 2..N 個的等待分佈(可用 fixture 語料+人為 backlog 重現,不對真實索引做實驗)。--no-refresh/--max-refresh-seconds同時服務這裡。Actual
所有行程無條件併入、無界等鎖;多 session 機器上第一次呼叫的延遲取決於別的 session 有沒有先付過那筆成本。
相關
Source: surfaced during /idd-diagnose #64 sister concern surfacing (Step 3.6)
Current Status
Tasks
ltm_queryMCP 加max_refresh_seconds(0=不限),預設有界;回應附落後行lockHeld警告維持,tool description 說明兩種警告ltm-clispec lock-frequency 段補 MCP 預設一句docs/measurements/2026-09-xx-mcp-first-merge.md