fix(collector): 機器寫進筆記庫的檔案一律帶前綴,不再跟使用者的頁面撞名(arcrun-rag#60)

leo 2026-08-12:「我的 Logseq 又被覆蓋⋯⋯**不只是加上 journal,可能所有的檔案都加一個前後綴,比如「wiki」**。」

不是資料被蓋掉,是機器產出用了跟他一樣的命名空間(status.md、日期檔那些)
⇒ 他打開資料夾分不出哪些是自己的。**心理上的覆蓋跟實際覆蓋一樣糟。**
This commit is contained in:
2026-08-12 14:54:59 +08:00
parent 37a02061dd
commit 5a140faf1f
14 changed files with 1305 additions and 45 deletions
+38 -2
View File
@@ -39,8 +39,44 @@ printf '# 我的筆記\n\n## 摘要\nstub 卡\n' > "system-dev/wiki/cards/我的
if err != nil {
t.Fatal(err)
}
if len(cards) != 1 || cards[0] != "system-dev/wiki/cards/我的筆記.md" {
t.Fatalf("cards=%v", cards)
// stub(模擬 /rag-extract-file skill)寫的是**沒有前綴**的檔名——這正是實況:
// 那條路的檔名由 prompt 決定,不歸 Go 管。enforceCardMarks 必須把它補正,
// 讓 claude 路與 gemma/workers-ai 路交出同一種名字(arcrun-rag#60 紅線:只准一種)。
if len(cards) != 1 || cards[0] != "system-dev/wiki/cards/arcrun-我的筆記.md" {
t.Fatalf("cards=%vwant [system-dev/wiki/cards/arcrun-我的筆記.md]", cards)
}
if _, err := os.Stat(filepath.Join(root, "system-dev", "wiki", "cards", "arcrun-我的筆記.md")); err != nil {
t.Fatalf("補正後的卡片檔不存在:%v", err)
}
if _, err := os.Stat(filepath.Join(root, "system-dev", "wiki", "cards", "我的筆記.md")); err == nil {
t.Fatal("沒帶前綴的原檔還在——補正應該是改名,不是複製一份")
}
}
// arcrun-rag#60 第二輪:vault 上,skill 仍會把卡寫進**可見的** system-dev/wiki/cards/
// (那個位置寫死在 prompt 裡,Go 改不到它)⇒ Go 這一側必須把它歸位到隱藏目錄並補標記。
// 這是「破口在 prompt 裡、只能在 Go 收口」的那一類,不補就等於 claude 路照樣污染筆記庫。
func TestExtractWithClaude_VaultRelocatesAndMarks(t *testing.T) {
root := t.TempDir()
mustMkdir(t, filepath.Join(root, "logseq")) // 這是個 Logseq vault
stub := writeStubClaude(t, t.TempDir(), `
mkdir -p system-dev/wiki/cards
printf '# 我的筆記\n\n## 摘要\nstub 卡\n' > "system-dev/wiki/cards/我的筆記.md"
`)
cards, err := ExtractWithClaude(stub, root, "我的筆記.md")
if err != nil {
t.Fatal(err)
}
want := ".arcrun-rag/wiki/cards/arcrun-我的筆記.md"
if len(cards) != 1 || cards[0] != want {
t.Fatalf("cards=%vwant [%s]", cards, want)
}
if _, err := os.Stat(filepath.Join(root, filepath.FromSlash(want))); err != nil {
t.Fatalf("歸位後的卡片不存在:%v", err)
}
// 可見目錄裡不准留下任何東西——vault 的頁面數不能因為 daemon 跑過而增加。
if _, err := os.Stat(filepath.Join(root, "system-dev", "wiki", "cards", "我的筆記.md")); err == nil {
t.Fatal("卡片還留在可見的 system-dev/wiki/cards/vault 會多出一頁")
}
}