Problem
v0.4.0 實測(2026-09-03,本機語料 639,209 chunk):
MCP :ltm_query(query: "F_SETNOSIGPIPE EPIPE 測試 host SIGPIPE", limit: 3) 的第一名 是這次呼叫本身——session 3a2ceb7e-41cf-41c1-ab0c-d1e197ad4beb turn 4dae970d-bd21-4a3c-89f5-653c088eedcc(2026-09-03T02:25:37Z),內容就是 ⟨tool mcp__plugin_ltm_ltm__ltm_query query=F_SETNOSIGPIPE …⟩。呼叫寫進 jsonl 的時間早於 server 查詢前的增量併入,所以它先被索引、再被自己查到。
CLI :ltm query 的三個基準查詢(「tokenizer 討論」「flock inode 鎖」「資格考」)第一名全部 是同一則 turn(2026-09-01T04:32:12Z)——查詢穩態延遲 ~4 秒、成本大宗在查詢前增量掃描——能否降到 1 秒以內 #56 量測時那行含有全部三個字串的 Bash 命令 for q in "tokenizer 討論" "flock inode 鎖" "資格考"。
兩者是同一個形狀:查詢字串本身進了語料,之後任何相同查詢都先召回「問這個問題的那一刻」 。對導航零價值(讀者要的是被問的事,不是問的動作),而且它會擠掉真正相關的 turn(例 1 裡今天實際討論 F_SETNOSIGPIPE 的 turn 沒進前三)。
LTM 類比(.claude/rules/ltm-analogy.md):人回想一件事時,不會把「我剛才在想這件事」當成想起來的內容。
Type
bug(檢索品質;不涉及不變式——索引內容正確,是排序/呈現層的問題)
Expected
先決定在哪一層、用什麼判準 排除或降權,再實作。候選(不預設答案,需 diagnose):
A. 排除「就是這次查詢」的 turn :判準要能機械化——例如 chunk 文字為工具呼叫且其 query= / ltm query "…" 引數與本次查詢逐字相同。最窄、最不會誤殺;擋不住例 2 那種「含有查詢字串的舊命令」。
B. 降權「內容是 ltm 查詢/量測命令」的 turn :以 chunk 形狀(⟨tool … ltm_query / ltm query)判定,不是以查詢字串判定;涵蓋例 2。要量誤殺率——討論 ltm 本身的 session(本 repo)會大量命中。
C. 只在呈現層標記 (「這是一次查詢動作」)而不改排序——最保守,但沒有解決擠掉相關 turn 的問題。
不論選哪個:不得改寫或刪除索引內容 (性質 5:可以遺忘、不可以編造);決定要落在 MemoryStrategy seam 或檢索層的哪一側,要對照 openspec/specs/memory-strategy/spec.md 的「不得在 seam 之外重排」;前後要有 docs/measurements/ 紀錄(至少例 1/例 2 兩組查詢的前三名變化)。
Actual
如上:兩條路徑的第一名都是查詢動作本身或含查詢字串的舊命令。
相關
Source : surfaced during v0.4.0 post-release smoke test (2026-09-03)
Current Status
Tasks
Problem
v0.4.0 實測(2026-09-03,本機語料 639,209 chunk):
ltm_query(query: "F_SETNOSIGPIPE EPIPE 測試 host SIGPIPE", limit: 3)的第一名是這次呼叫本身——session3a2ceb7e-41cf-41c1-ab0c-d1e197ad4bebturn4dae970d-bd21-4a3c-89f5-653c088eedcc(2026-09-03T02:25:37Z),內容就是⟨tool mcp__plugin_ltm_ltm__ltm_query query=F_SETNOSIGPIPE …⟩。呼叫寫進 jsonl 的時間早於 server 查詢前的增量併入,所以它先被索引、再被自己查到。ltm query的三個基準查詢(「tokenizer 討論」「flock inode 鎖」「資格考」)第一名全部是同一則 turn(2026-09-01T04:32:12Z)——查詢穩態延遲 ~4 秒、成本大宗在查詢前增量掃描——能否降到 1 秒以內 #56 量測時那行含有全部三個字串的 Bash 命令for q in "tokenizer 討論" "flock inode 鎖" "資格考"。兩者是同一個形狀:查詢字串本身進了語料,之後任何相同查詢都先召回「問這個問題的那一刻」。對導航零價值(讀者要的是被問的事,不是問的動作),而且它會擠掉真正相關的 turn(例 1 裡今天實際討論
F_SETNOSIGPIPE的 turn 沒進前三)。LTM 類比(
.claude/rules/ltm-analogy.md):人回想一件事時,不會把「我剛才在想這件事」當成想起來的內容。Type
bug(檢索品質;不涉及不變式——索引內容正確,是排序/呈現層的問題)
Expected
先決定在哪一層、用什麼判準排除或降權,再實作。候選(不預設答案,需 diagnose):
query=/ltm query "…"引數與本次查詢逐字相同。最窄、最不會誤殺;擋不住例 2 那種「含有查詢字串的舊命令」。⟨tool … ltm_query/ltm query)判定,不是以查詢字串判定;涵蓋例 2。要量誤殺率——討論 ltm 本身的 session(本 repo)會大量命中。不論選哪個:不得改寫或刪除索引內容(性質 5:可以遺忘、不可以編造);決定要落在
MemoryStrategyseam 或檢索層的哪一側,要對照openspec/specs/memory-strategy/spec.md的「不得在 seam 之外重排」;前後要有docs/measurements/紀錄(至少例 1/例 2 兩組查詢的前三名變化)。Actual
如上:兩條路徑的第一名都是查詢動作本身或含查詢字串的舊命令。
相關
(查詢, 應命中的 turn)資料集,本 issue 的「有沒有變好」目前只能用少數手挑查詢看前三名Source: surfaced during v0.4.0 post-release smoke test (2026-09-03)
Current Status
Tasks
retrievalspec:fused list 成員資格加「對本系統的查詢動作不進候選」(封閉列舉+性質 5 推論),明寫是資格過濾非重排RetrievalEngine.search候選資格謂詞,與 session 排除共用 refetch 迴圈(1,000 上限照舊)--include-query-turnsescape(MCP 同名參數)docs/measurements/2026-09-xx-self-hit.md:例 1/例 2 前後前三名+母體數字+誤殺面